RailsでAmazon Webサービス

以下のページを参考にAmazon WebサービスにRailsからアクセスしてみた。
かなり楽ちん。

RoRでAmazon Associate Web Serviceを使う : Mashupを作ろう : 記事 : MASHUPEDIA – マッシュペディア – : Web API x Mashup

前準備

まずamazon-ecsというライブラリをgemで入れる。

$ sudo gem install amazon-ecs

次にRailsのconfig/environment.rbの末尾にamazon-ecsのオプションの設定を書く。

require ‘amazon/ecs’

Amazon::Ecs.options = {
  :aWS_access_key_id => "hogehogehoge",
  :associate_tag => "stepfeed-22",
  :country => :jp
}

アソシエイトIDも設定できる。

あとはRailsのどこでもamazon-ecsを使ってAmazonのデータを検索可能。

使い方

検索

Amazon::Ecsのitem_searchというメソッドを使うとAmazon Webサービスにアクセスしてレスポンスを取得する。
レスポンスはAmazon::Ecs::Responseオブジェクトになって返される。

res = Amazon::Ecs.item_search("Rails")

これだとタイトルやASINなどの基本的なデータしか取得できない。
簡単なテキストリンクを作るだけならそれだけで十分だが、画像やユーザーレビューなどの詳細なデータを取得したい場合は:reponse_groupオプションでMediumとかLargeとか指定して検索する。

res = Amazon::Ecs.item_search("Rails", :response_group => 'Large')

:sortオプションでソート条件指定も可能。

res = Amazon::Ecs.item_search("Rails", :sort => 'titlerank')
データの参照

検索したデータは返されたAmazon::Ecs::Responseオブジェクトのitemsという変数に入っている。
itemsはAmazon::Elementオブジェクトの集まり。

Amazon::Elementは個別のAmazon商品情報を持っている。
getメソッドを使うと特定の項目のデータを取得できる。

res.items.first.get(:title)

またget_hashメソッドを使うとデータをハッシュで取得できる。
ハッシュになるとキーはシンボルになるので、文字列で指定しないように注意。(getメソッドの引数は文字列でもシンボルでも可)

data = res.items.first.get_hash
data[:title] # => なんかのタイトル
data['title'] # => nil 
子要素を持ったデータの参照

smallimageなどいくつかの情報は子要素を持っているがgetで参照するとXMLの断片が文字列で返ってくる。

res.items.first.get(:smallimage) # =>
"<url>http://ecx.images-amazon.com/images/I/hogehogehoge-.jpg</url><height units=\"pixels\">75</height><width units=\"pixels\">58</width>"

子要素を参照するにはget_hashを使うと便利。

data = res.items.first.get_hash(:smallimage)
data[:url] # => "http://ecx.images-amazon.com/images/I/hogehogehoge-.jpg"

参考

amazon-ecsのRDoc

Sortパラメータ : ええもん屋 ラボ

検索結果のソート(Sort) – Amazon Web サービス

追記

ActiveRecordを使ってレスポンスをキャッシュする手順をまとめてみた。

RailsでAmazon Webサービス” に対して1件のコメントがあります。

コメントは受け付けていません。