RubyでAmazonのProduct Advertising APIを利用する
Cordovaアプリを開発のためになにか適当なデータはないかなぁ、という理由で、広く使われていてデータの取得が簡単そうだったAmazonのPAAPI(Product Advertising API)を利用してみることにしました。
これまでにベストセラーのRSSを読み込んで、読み込んだXMLを解析したことはあったのですが、APIを利用するのは初めてになります。
PAAPIの日本語のサイトは こちら
目次
- APIを利用するための準備
- amazon-ecsのインストールと使い方
- PAAPI(Product Advertising API)利用時の注意点
- エラーの例
APIを利用するための準備
PAAPI(Product Advertising API)を利用するためには、APIの「アクセスキー」と「シークレットキー」、それに「アソシエイトID(トラッキングID)」が必要になります。
各キーやIDの取得方法、それに基本的なことについては、Amazon Web サービス入門(Product Advertising API)に詳しく掲載されているので、読み進めながら実際に操作するのがいいと思います。
amazon-ecsのインストールと使い方
今回、言語はRubyなので、PAAPI用のライブラリである amazon-ecs を使います。
インストール
gem install amazon-ecs
基本的な使い方
require 'amazon/ecs'
Amazon::Ecs.configure do |options|
options[:AWS_access_key_id] = 'アクセスキー'
options[:AWS_secret_key] = 'シークレットキー'
options[:associate_tag] = 'アソシエイトID(トラッキングID)'
end
res = Amazon::Ecs.item_search('ruby', {:response_group => 'Medium', :sort => 'salesrank', :country => 'jp'})
res.items.each do |item|
item.get('ASIN')
item.get('ItemAttributes/Title')
end
ライブラリ利用時の注意点としては、日本サイトの商品情報を取得する場合、必ず「:country => 'jp'」を指定しないといけません。未指定の場合のデフォルトは「us」になります。
PAAPI(Product Advertising API)利用時の注意点
試験的に少し使ってみただけですが、いくつか注意が必要と感じたので、以下はその要点だけ書いておきます。
- 基本的に1秒間に1リクエストまで(大量にデータを取得しようとすると時間がかかる)
- sleep()できっちり1秒指定するとアクセスの間隔が早いのかエラーが返される(1秒プラスアルファくらいの間隔が必要)
- Kindle本関連の価格情報は取得できない
- ベストセラー系の情報はRSS同様に10件まで
個人的にベストセラーの情報を取得したい場合は、取得する情報にもよりますがRSSを参照した方が手っ取り早いと感じました。
エラーの例
リクエストの間隔が短いと以下のようなエラーが返されます。
HTTP Response: 503 Service Unavailable - AWS Access Key ID: **********. You are submitting requests too quickly. Please retry your requests at a slower rate.