Amazon API で 503 エラーが返ってくる際の対応 [Python]

Python で Amazon Product Advertising API から商品情報取得

Pythonから Amazon Product Advertising API を使用しました。

しかし、APIを叩いていると503エラーが度々出るため、エラーハンドリングを行います。

503 エラー対処

エラーが起きた場合、再度 API を叩く処理を追加します。

Amazon Product Advertising API は1秒間に1回、1時間に3600回の制限があります。
しかし、その制限以外でも 503エラーがでる場合があるようです。

import bottlenose
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import time

ACCESS_KEY = "****"
SECRET_ACCESS_KEY = "****"
ASSOCIATE_TAG = "****"

def error_handler(err):
    ex = err['exception']
    if isinstance(ex, HTTPError) and ex.code == 503:
        time.sleep(1) # 1秒待つ
        return True

amazon = bottlenose.Amazon(ACCESS_KEY, SECRET_ACCESS_KEY, ASSOCIATE_TAG, Region="JP", ErrorHandler=error_handler)

isbn = "4774142298"
response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="Images,ItemAttributes,BrowseNodes", SearchIndex="Books", IdType="ISBN")

# xmlとして検索
soup = BeautifulSoup(response,"lxml")
title = soup.find('title').text
asin = soup.find('asin').text
url = soup.find('detailpageurl').text

print("%s" % (title))
print("%s" % (asin))
print("%s" % (url))

注意すべきはエラーが起きた際のリクエスト間隔で、公式では約0.1秒待つサンプルが載っていました。
しかし、Amazon API では早すぎるため 1秒に変更しています。

参考

lionheart/bottlenose · GitHub

kakakikikekeのブログ: ProductAdvertisingAPIで503が出た時の対処方法

コメント

タイトルとURLをコピーしました