ruby を使って Amazon から商品検索してイロイロしたいなと思って調べたら amazon-ecs を利用すると楽そうだったので使ってみた。Amazon の API は Amazon Product Advertising API と言うらしい。
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 # エラーメッセージがあったらそれを返す
コメント