python-amazon-product-apiを触ってみたメモ
インストール
pip install python-amazon-product-api
config.py
設定は別ファイルにしておきます。
AWS_ACCESS_KEY = '********************' SECRET_KEY = '****************************************' ASSOCIATE_TAG = '********-22'
AWS_ACCESS_KEY、SECRET_KEY、ASSOCIATE_TAGはamazon product advertising APIのアカウントを作成すると取得できます
https://affiliate.amazon.co.jp/gp/advertising/api/detail/main.html
ASSOCIATE_TAGは*****-22のようなアカウントIDを指定します
AWS_ACCESS_KEY、SECRET_KEYの確認方法はこちら
https://affiliate.amazon.co.jp/gp/associates/help/t126/a5?ie=UTF8
main.py
from config import AWS_ACCESS_KEY, SECRET_KEY, ASSOCIATE_TAG from amazonproduct.api import API if __name__ == '__main__': api = API(AWS_ACCESS_KEY, SECRET_KEY, 'jp', ASSOCIATE_TAG) for root in api.item_search('Books', Keywords="Python", ResponseGroup='Large', limit=10): # extract paging information total_results = root.Items.TotalResults.pyval total_pages = root.Items.TotalPages.pyval try: current_page = root.Items.Request.ItemSearchRequest.ItemPage.pyval except AttributeError: current_page = 1 print 'page %d of %d' % (current_page, total_pages) # from lxml import etree # print etree.tostring(root, pretty_print=True) nspace = root.nsmap.get(None, '') books = root.xpath('//aws:Items/aws:Item', namespaces={'aws' : nspace}) for book in books: print book.ASIN, if hasattr(book.ItemAttributes, 'Author'): print unicode(book.ItemAttributes.Author), ':', print unicode(book.ItemAttributes.Title), if hasattr(book.ItemAttributes, 'ListPrice'): print unicode(book.ItemAttributes.ListPrice.FormattedPrice) elif hasattr(book.OfferSummary, 'LowestUsedPrice'): print u'(used from %s)' % book.OfferSummary.LowestUsedPrice.FormattedPrice
ほとんどリポジトリのサンプルと同じなんですが、気がついたことがいくつかありましたのでメモしておきます。
- associate_tagを指定しないとエラーになる。
<Errors> <Error> <Code>AWS.MissingParameters</Code> <Message>リクエストには、必要なパラメータが含まれていません。必要なパラメータには、AssociateTagなどがあります。</Message> </Error> </Errors>
- limit=10を指定しないとエラーになる。
forが回るたびに次のページを取得していくが、amazon側の仕様で11ページ以降が取得できなくなっているため
<Errors> <Error> <Code>AWS.ParameterOutOfRange</Code> <Message>ItemPage として指定した値は無効です。有効な値は、1から10までのものです。</Message> </Error> </Errors>