[RubyでECS4.0] Amazonへのリクエスト生成とXMLデータの取得
前回の記事は検索フォームより入力されたデータを取得するところまでを書きました。次のステップはその入力された検索語句のデータを使ってAmazon Webサービスのサーバをリクエストを送信して、XMLでデータを取得するところまでになります。
ECS 4.0へのリクエストを作成する
Amazon Webサービスは3.0から4.0にバージョンアップした際に、かなり柔軟に商品データの項目を選んで取得できるようになりました。今回の目標はRubyに慣れるためのECS4.0を利用した簡単Webアプリ作成なので、ごくシンプルに単純なものでいいので利用するデータは「商品タイトル」「商品画像」とします。
ECSサーバへのリクエストは以下のような感じになります。
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService &AWSAccessKeyId=[Your Access Key ID] &AssociateTag=[Your Associate Tag] &Operation=ItemSearch &SearchIndex=[カテゴリIndex] &Keywords=[検索語句 UTF8エンコード] &ResponseGroup=Request,Small,Images &ItemPage=[ページ番号] &Version=2006-06-28
この中で変数としてスクリプト中に持っておきたいものは、「AWSAccessKeyId」「AssociateTag」「SearchIndex」「Keywords」「ItemPage」「Version」です。Versionは変数として持たなくてもいいんですけどVersionがアップしたときにスクリプト中から探して置き換えるのも面倒なので変数として定義しておくことにします。
AWS3.0の頃は取得できるデータタイプはheavyとliteの2通りでした。ECS4.0になってデータタイプはユーザ側がある程度自由に指定できるようになりました。基本はSmall、Medium、Largeになります。たとえばSmallは本当に最小限の商品データしか含まれていません。
<Item>
<ASIN>B000GRUR78</ASIN>
<DetailPageURL>AmazonへのAffiliate Link</DetailPageURL>
<ItemAttributes>
<Artist>aiko</Artist>
<Creator Role="アーティスト">aiko</Creator>
<Manufacturer>ポニーキャニオン</Manufacturer>
<ProductGroup>Music</ProductGroup>
<Title>彼女</Title>
</ItemAttributes>
</Item>
Smallで取得できる商品データはこんな感じ↑です。aikoで音楽を検索したものです。最低限の情報しかありません。これがMediumとかLargeになるとデータが増えていきます。画像URIはSmallには含まれていませんが、Mediumには含まれています。しかしMediumにするとそれ以外の今回は必要のないデータまでつらづらと取得してしまいます。今回、あと欲しい情報は画像URIだけになるので取得する情報をSmall、Imagesとしました。こうする事によって先ほどの商品情報データに画像のURL情報もいっしょに付加されて取得することができるようになります。ついでに言えばAmazonから取得するXMLデータサイズも小さいものになり、スクリプトで処理するのに優しいかもしれません。
AWSAccessKeyIdなどの変数類はハッシュとして定義しておくようにしました。次のような感じです。検索語句はUTF8でuriエンコードしてください。今回作成しているrubyのスクリプトのファイルエンコードはUTF8です。
FORM = {
"keyword" => URI.encode(cgi["keyword"]),
"mode" => cgi["mode"],
"accesskey" => "Access Key ID",
"t" => "Associate Tag",
"Ver" => "2006-06-28",
"page" => "1"
}
url = "http://webservices.amazon.co.jp/onca/xml?&Service=AWSECommerceService"
url += "&AWSAccessKeyId=" + FORM["accesskey"]
url += "&AssociateTag=" + FORM["t"]
url += "&Operation=ItemSearch"
url += "&SearchIndex=" + FORM["mode"]
url += "&Keywords=" + FORM["keyword"]
url += "&ResponseGroup=Request,Small,Images,Reviews"
url += "&ItemPage=" + FORM["page"]
url += "&Version=" + FORM["Ver"]
ハッシュに入れないほうがわかりやすいですかねぇ。とりあえずPerlで作ってたときは、結構ハッシュに入れて管理していたので今回もそうして見ました。
ECSサーバからXMLデータを取得する
リクエストURIの生成がすんだら次はそのURIへアクセスしてのXMLデータの取得になります。リファレンスマニュアルで調べてみたら使用しているRuby 1.84は外部のデータを取得する添付ライブラリとして「open-uri」「net/http」などがあるようだ。リファレンスを見た感じではopen-uriのほうが簡単な気がしたのでこちらを利用してみることにしました。
xml_uri = URI.parse(url) xml = xml_uri.read
これで先ほど生成したURIを元にしてXMLデータの取得ができます。print xmlでテキストが表示されればOK。
今回はここまで。次回は取得したXMLデータを加工してHTMLとして吐き出すところまで持っていきたいです。
コメント