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"
参考
検索結果のソート(Sort) – Amazon Web サービス
“RailsでAmazon Webサービス” に対して1件のコメントがあります。
コメントは受け付けていません。