Python で Amazon ECS 4.0 にアクセスしてみる
参考にしたところ
- http://www.goodpic.com/mt/archives2/2004/10/amazon_ecs_401.html
- http://trac.atzm.org/index.cgi/wiki/PyAmazon
Python から Amazon E-Commerce Service (ECS) にアクセスするライブラリは、今のところこれくらいしか見つからない。
- pyamazon : http://www.josephson.org/projects/pyamazon/
- pyaws : http://sourceforge.net/projects/pyaws/
pyamazon は AWS 3.0 を使用する上に、仕様が微妙で使いにくい。
pyaws はドキュメントも見つけられなかった。
なので、Python の勉強を兼ねて作ってみた。(機能は貧弱なのでLiteとしておく...)
ECS のバージョン 2004-10-04 に対応してるけど、2006-11-14 でも動くっぽい。
ダウンロードはこちら → pyAmazonLite.py
Python 2.4 + ElementTree または Python 2.5 が必要です。
使い方
Amazon Webサービスの登録ID(Subscription ID)が必要。→ 登録はここ
簡単な使い方はこんな感じ。
>>> from pyAmazonLite import * >>> amazon = Amazon(license = '...') # your license key >>> result = amazon.search('Python') # search "Books" by default >>> print result.totalPages 2 >>> print result.totalResults 14 >>> print result.items[0].ASIN 4873112109 >>> print result.items[0].ItemAttributes.Title 初めてのPython 第2版
Amazon クラスのメソッド search は EcsResult クラスを返す。
引数はこんな感じで、keyword , asin , browseNode のうち最低1個は指定する必要がある。
- keyword
- 検索したいキーワード
- asin
- 検索したいASIN番号
- browseNode
- Amazonのカテゴリごとの番号
- response
- 取得したい情報。("Small" by default)
- page
- 取得する検索結果のページ指定("1" by default)
- operation
- 問い合わせの種類(今のところ指定しても無視される)
- search
- 商品の種類(asin に値を指定したら無視される)("Books" by default)
- content
- フォーマット("text/xml" by default)
- xslt
- XSLTファイルのURL
- sort
- ソート方法
EcsResult のアトリビュートはこう。
- errors
- pyAmazonLite.EcsItem (エラー時以外はNone)
- items
- pyAmazonLite.EcsItem のリスト
- requestURL
- 文字列(リクエスト先のURL)
- totalPages
- 文字列(ItemSearchResponse/Items/TotalPages の値)
- totalResults
- 文字列(ItemSearchResponse/Items/TotalResults の値)
items は検索結果の商品の情報(ItemSearchResponse/Items/Item の値)を表していて、返却されたXMLの構造となるべく同じようにした。
XML要素と EcsResult.items 以下の構造は以下のように対応する。
- 子要素を持つ要素
- EcsItem
- 子要素を持たず、属性も持たない要素
- 文字列
- 子要素を持たないが属性を持つ要素
- EcsNode
EcsItem と EcsNode は辞書を継承していて、アトリビュートのように値にアクセスできる。
>>> print result.items[0].ItemAttributes.Title 初めてのPython 第2版 >>> print result.items[0]['ItemAttributes']['Title'] 初めてのPython 第2版
Creator のようにXML要素が複数個ある可能性がある場合、Creators というリストに格納される。
pyamazon と違って、単数の場合でもリストに格納される。
>>> for c in result.items[0].ItemAttributes.Creators: print u"%s : %s" % (c.Role ,c.text) 著 : マーク ルッツ 著 : デイビッド アスカー 原著 : Mark Lutz 原著 : David Ascher 翻訳 : 夏目 大
検索パラメータがおかしい場合のエラーメッセージはこんな感じで取得できる。
>>> result = amazon.search(asin='invalid-asin') >>> if result.errors: print result.errors.Error.Message INVALID-ASINは、ItemIdの値として無効です。値を変更してから、再度リクエストを実行してください。