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>&#12522;&#12463;&#12456;&#12473;&#12488;&#12395;&#12399;&#12289;&#24517;&#35201;&#12394;&#12497;&#12521;&#12513;&#12540;&#12479;&#12364;&#21547;&#12414;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;&#24517;&#35201;&#12394;&#12497;&#12521;&#12513;&#12540;&#12479;&#12395;&#12399;&#12289;AssociateTag&#12394;&#12393;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;</Message>
        </Error>
      </Errors>
  • limit=10を指定しないとエラーになる。

forが回るたびに次のページを取得していくが、amazon側の仕様で11ページ以降が取得できなくなっているため

      <Errors>
        <Error>
          <Code>AWS.ParameterOutOfRange</Code>
          <Message>ItemPage &#12392;&#12375;&#12390;&#25351;&#23450;&#12375;&#12383;&#20516;&#12399;&#28961;&#21177;&#12391;&#12377;&#12290;&#26377;&#21177;&#12394;&#20516;&#12399;&#12289;1&#12363;&#12425;10&#12414;&#12391;&#12398;&#12418;&#12398;&#12391;&#12377;&#12290;</Message>
        </Error>
      </Errors>