サイトアイコン Lonely Mobiler

ruby で Amazon の Api を叩く

ruby を使って Amazon から商品検索してイロイロしたいなと思って調べたら amazon-ecs を利用すると楽そうだったので使ってみた。Amazon の API は Amazon Product Advertising API と言うらしい。

jugend/amazon-ecs

gem を使って、

$ gem install amazon-ecs

これで使えるようになる、はず。

amazon-ecs を使ってみる

使うには amazon/ecs を読み込んで API Key などを設定する必要がある。

require 'amazon/ecs'

Amazon::Ecs.options = { :associate_tag => 'jklr-22', :AWS_access_key_id => AWS_ACCESS_KEY_ID, :AWS_secret_key => AWS_SECRET_KEY }

あとは API の種類にあわせてメソッドを呼ぶだけだ。

API キーの取得方法は・・・ぐぐったら出てくるのでがんばってください。

Amazon の商品の検索を行う

例えば商品の検索をする場合は Amazon::Ecs.item_search を使用する。

res = Amazon::Ecs.item_search( 'RX100', :browse_node => '16462091', :response_group => 'ItemAttributes, Images', :search_index => 'Electronics', :country => 'jp')

res.items.first(5).each do |item| puts item.get('ASIN') + ':' + item.get('ItemAttributes/Title') end

browse_node で商品のカテゴリを指定している。上記例の場合はカメラとなる。

response_group で取得したい情報を指定する。ItemAttributes で商品の詳細情報を、Images で画像を取得できる。

API の返り値は XML なのだが get(ほげほげ) とかやるとうまい具合に値を取得できる。

これの出力は以下のようになる。

$ ruby amazon-ecs.rb B00898JY8E:SONY デジタルカメラ Cyber-shot RX100 2020万画素CMOS 光学3.6倍 ブラック DSC-RX100 B00KD43UTQ:SONY デジタルカメラ Cyber-shot RX100M3 2090万画素 光学2.9倍 DSC-RX100M3 B00KD62HN4:ソニー アタッチメントグリップ「AG-R2」 AG-R2 B009O06WZY:SONY 液晶保護フィルム モニター保護セミハードシート Cyber-shot RX1/RX100 PCK-LM15 B0017IH0XO:HAKUBA デジタルカメラケース デジタルポッシュ ST S ブラック SDP-STS-BK

XML をそのまま表示したい場合は以下のように marchal_dump を使う。

puts res.marshal_dump

Amazon の商品のデータを取得する

ASIN がわかっているのであれば item_lookup を使用する事でアイテムが一つ取れる。

res = Amazon::Ecs.item_lookup( 'B00898JY8E', :response_group => 'Small, ItemAttributes, Images', :country => 'jp') puts res.items.first.get('ItemAttributes/Title')

lookup, ASIN 指定して一つだけ取ってきてるつもりではあるのだが、items の中に入るので first で最初の一個だけ取ってきている。

出力は以下のようになる。

$ ruby amazon-ecs.rb SONY デジタルカメラ Cyber-shot RX100 2020万画素CMOS 光学3.6倍 ブラック DSC-RX100

ページ番号を取得する

ページングを使う時とかに。

res.total_pages # 合計ページ数を返す res.total_results # 結果の数を返す res.item_page # 現在のページ番号を返す

エラーを取得する

以下の要素を利用する事で API 利用時に正常かどうか、エラーがあるかどうかを確認する事ができる。

res.is_valid_request? # リクエストが正常なら true を返す res.has_error? # エラーがあったら true を返す res.error # エラーメッセージがあったらそれを返す

Sponsored Link
モバイルバージョンを終了