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)