旧gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

ASIN複数指定で商品情報を一括取得する方法(Amazon Product Advertising API)

Product Advertising APIの基本的な使い方は省きます。

APIを叩く際はamazon-ecsというgemを使っていて、商品情報は以下のような形で取得していました。

Amazon::Ecs.item_lookup(asin_id,  :response_group => 'ItemAttributes, Images', :country => 'jp')

ID1件ずつAPIを叩いていたんですが、そのせいでAmazonからのレスポンスがとれないことがありました。このAPIには「リクエストは1秒間に1回にしてね」という制限があるので、eachで回して5件分くらいのリクエストを送ると、当然拒否られるわけです。

複数取るにはどうすれば、ということで調べると公式ドキュメントのItemLookupの説明にこう書かれていました。

複数の商品を一度に検索するには、商品IDをカンマで区切ります。

なので、(amazon-ecsを使っている場合には)最初の引数の中身をASIN IDをカンマ区切りにした文字列にしてあげればいいです。

options = {response_group: 'ItemAttributes, Images',country: 'jp'}
asins = []
@items.each do |item|
  asins << item.asin
end 
asins = asins.join(",")
res = Amazon::Ecs.item_lookup(asins, options)