「Product Advertising API を使った Web サービスを作って小遣いを稼いでやる!」っていうのは半分冗談で、半分本気。Web サービスを作るってのが本気で、小遣い稼ぎが冗談。そんなに甘いモンじゃないからね。
Python で Product Advertising API を呼び出すためのライブラリは色々あるけど、その中でも PyPI で一番ダウンロードされている python-amazon-product-api ってのが良さそうだ。インストールは pip 一発。
pip install python-amazon-product-api
Product Advertising API のレスポンスは XML で、その XML を解析するために python-amazon-product-api は内部で lxml を使っている。当然、lxml も入れないとダメ。
Mac や Linux なら pip で一発インストールなんだろうけど、あいにく Windows だと zlib やら libxml2 やら諸々無いので失敗してしまう。必須ライブラリの入れるのも、手順が超面倒。幸い、PyPI にバイナリや Windows 用インストーラーが置いてあるから、今回はそれを利用しておく。lxml2.3 しかないけどな!
前置きが長くなってしまった。ようやく準備完了。さっそく、Amazon.jp にある Python 本を検索するスクリプトを書いてみた。
# -*- coding: utf-8 -*- from amazonproduct import API, AWSError ACCESS_KEY = "AWSのアクセスキー" SECRET_KEY = "AWSのシークレットキー" ASSOCIATE_TAG = "アフィリエイトID" # ASSOCIATE_TAG も指定すること api = API(ACCESS_KEY, SECRET_KEY, "jp", ASSOCIATE_TAG) try: # 1ページだけ取得する for page in api.item_search("Books", Keywords="Python", limit=1): # 該当製品の総数 print("total results: %s" % page.Items.TotalResults.pyval) # ページの総数 print(page.Items.TotalPages.pyval) # ページ内の製品を列挙する for product in page.Items.Item: print('%s: "%s"' % (product.ItemAttributes.Author, product.ItemAttributes.Title)) except AWSError, e: print("code:%s message:%s" % (e.code, e.message))
ACCESS_KEY や SECRET_KEY は、あらかじめ Product Advertising API のアカウントを作成して入手してある。
実行したらこんな感じ。
total results: 264 total pages: 27 辻 真吾: "Pythonスタートブック" Tarek Ziade: "エキスパートPythonプログラミング" Mark Lutz: "初めてのPython 第3版" 細田 謙二: "Python入門―2&3対応" ビープラウド: "Pythonプロフェッショナルプログラミング" 柴田 淳: "みんなのPython" 柴田 淳: "みんなのPython 改訂版" Alex Martelli: "Python クックブック 第2版" 柏野 雄太: "Python ポケットリファレンス (Pocket Reference)" Guido van Rossum: "Pythonチュートリアル 第2版"
検索結果の1ページ目を表示することに成功した。でも、たったこれだけのサンプルを書くのに1時間以上かかってしまった…。
最初、下記の Example を写経したんだけど、
Example のままだと
AttributeError: 'LxmlItemSearchPaginator' object has no attribute 'Items'
っていうエラーになった。どうやら、LxmlItemSearchPaginator は for でページを取り出してやらないといけないみたい。Example の方を修正しておいて欲しいよ。まったく。