プログラミング工房 > HSP > サンプルスクリプト > 

Amazon E-Commerce Service(ECS)から取得したデータをXMLパーサー(MSXML)で解析する

 下のスクリプトは、HSP3のhspinet.dllの命令を使ってAmazon E-Commerce Service(以下ECS)にアクセスし、そこから取得したXML形式の商品データをCOMコンポーネントのMSXMLで解析するプログラムです。

 ECSとはオンラインショップのAmazonが提供しているAmazon Web Service(AWS)というサービスの一つで、登録ユーザはAmazonの商品データベースに自由にアクセスしたり、ショッピングカート機能を自分のウェブサイトに組み込んだりといった機能を無料で利用することができます。ユーザの多くはアマゾン・アソシエイト・プログラムと組み合わせる形で利用していると思われます。Amazon Web Service(AWS)のページはこちら

 下のスクリプトではRESTと呼ばれるHTTP経由のアクセス方法でECSのデータベースから商品データをダウンロードし一度ファイルに保存してから、MSXMLによってXML形式のデータを解析し、切り出した商品情報を使ってシンプルな内容のウェブページ(HTMLファイル)を生成しています。生成されるHTMLファイルの例はこちら

 >> スクリプトを見る

 以下ソース各部分の説明。

 L.12:

 ECSからデータを取得する処理にhspinet.dllの命令を使えるようにするのに必要。hspinet.dllについてはHSPのマニュアルを参照。

 L.14〜23:

 RESTでデータを取得する場合には、一般のCGIと同じように基本のURLと必要なパラメータをつないだURLにアクセスします。それらを定義したマクロです。

 各パラメータの意味ですが、"Service"にはAWSで利用したいサービスを指定します。ECSを利用する場合は常に"AWSECommerceService"を指定します。

 "AWSAccessKeyId"にはAWSのユーザ登録時に割り当てられるAccess Key IDを指定します。以前からのユーザでSubscription IDという名前でIDをもらっている場合はそれを指定すればOKです。スクリプトは必ず18行目のマクロ"AWS_ID"に対する値を入力してから実行して下さい。

 "Operation"にはECSに対してどの種類の検索を行うかを指定します。単に商品情報がほしい場合はたいがい"ItemSearch"を指定します。

 "SearchIndex"には検索を行う商品のジャンルを指定します。

 "ResponseGroup"には一つの商品に対してどんな種類のデータがほしいかを指定します。

 "Sort"には複数の商品データを取得するときの商品の並び順を指定します。

 "BrowseNode"には検索する商品カテゴリを限定するためのブラウズノードという値を指定します。

 L.26:

 今回netload命令で指定するファイル名にはWindowsのファイル名に使えない文字が含まれているので、netdlname命令で別に指定する保存ファイル名。

 L.28〜29:

 netload命令でダウンロードしたXMLデータ内で「商品ページURL」と「商品名」を含む項目のタグ名。詳しくはスクリプトを実行した後に作成される"res.xml"を参照。

 L.31〜33:

 最後に作成するHTMLファイルのtitleタグの内容とファイル名。

 L.38〜51 (前処理):

 hspinet.dllの初期化とnetload命令で指定するファイル名を生成。

 L.56〜60 (hspinet.dllでAWSにアクセス、レスポンスをファイルに保存):

 特に説明の必要はないと思います。

 L.67〜86:

 ここではHSP3のCOM関連機能とMSXMLを使ってHTMLデータの生成に必要な商品情報を切り出しています。

 L.67〜69:

 ProgIDを指定する形でMSXMLのCOMオブジェクトを作成し、ファイルに保存しておいたECSからのレスポンスを読み込んでいます。68行目はファイルをすべて読み込んでから処理を続行させるために必要。

 L.72〜86:

 スクリプト内で指定したようなURLで商品データを取得すると、一度に商品10個分のデータが返されてくるため、そこからまず「商品ページURL」と「商品名」を含む項目を一気に取り出し、そのあと商品数分だけループを回して実際のデータを取り出しています。

 L.91〜104 (商品情報からHTMLデータを生成):

 特に変わった命令は使っていないので説明の必要はないと思います。

 >> ダウンロード (ブラウザで見ると文字化けしますが、データは正常です)