ruby で Amazon の Api を叩く

シェアする

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

gem を使って、

$ gem install amazon-ecs

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

Sponsored Links

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

シェアする

フォローする