PythonでAmazonのAPIを使う

大まかな流れ

  • APIキーを手に入れる
  • ライブラリの選定
  • 実際に試してみた

事前準備 - APIキーとアソシエイトタグの入手

ここのページを参考にしました。素直にアカウントとってAPIキーを発行してもらいます。アソシエイト(アフィリエイト)はまた別のベージです
Amazonアソシエイト・プログラムへの参加 - Amazon Web サービス

ライブラリの選定

とりあえずpypiでさがしたら以下の2種類が有力そうなので両方軽く試した

python-amazon-product-api

けっこうよしなにやってくれるライブラリ。lxmlもつかってよしなにするのかもしれないのだけど、とりあえず軽く動かしてみたには挙動がつかみにくい。あとは対応しているプロパティを拾ってくれる時はいいけどそうじゃない属性は拾ってくれないっぽいし、ちょっと微妙な気がした。
簡単なコンソールで試したサンプル

>>> import amazonproduct
>>> aws_key = 'YOUR KEY'
>>> aws_secret = 'YOUR KEY'
>>> afi_id = 'YOUR KEY'
>>> api = amazonproduct.API(aws_key, aws_secret, 'jp', afi_id)
>>> items = api.item_search("Music", Artist="Ken Ishii")
>>> items
<amazonproduct.paginators.LxmlItemSearchPaginator object at 0x101fee510>
#seeはdirよりわかりやすくプロパティやメソッドを表示してくれる便利ライブラリ
>>> from see import  see
>>> for i in items:
...     print see(i.Items.Item)
...     
... 
    .*                 []                 in                 bool()
    hash()             help()             iter()             len()
    repr()             reversed()         str()              .ASIN
    .DetailPageURL     .ItemAttributes    .ItemLinks         .addattr()
    .addnext()         .addprevious()     .append()          .attrib
    .base              .clear()           .countchildren()
    .descendantpaths()                    .extend()          .find()
    .findall()         .findtext()        .get()             .getchildren()
    .getiterator()     .getnext()         .getparent()       .getprevious()
    .getroottree()     .index()           .insert()          .items()
    .iter()            .iterancestors()   .iterchildren()
    .iterdescendants()                    .iterfind()        .itersiblings()
    .itertext()        .keys()            .makeelement()     .nsmap
    .prefix            .remove()          .replace()         .set()
    .sourceline        .tag               .tail              .text
    .values()          .xpath()

参考::python-amazon-product-apiを触ってみたメモ - brainstorm
参考::python-amazon-product-api 0.2.5 : Python Package Index

bottlenose

認証部分だけ軽くラップしてくれるけど、あとは自力でAmazonのAPIを叩かなきゃいけない。返り値でXMLが帰ってくるのでこれも自力でバースしないといけない。XMLまわりはよくわからないのでとりえあずBeautifulSoupで拾ったりした。そのかわり生のXML拾ってくれるし、とれる属性はもちろん中にに入っていれば好きにパースできる。
簡単なコンソールのサンプル

>>> aws_key = 'YOUR KEY'
>>> aws_secret = 'YOUR KEY'
>>> afi_id = 'YOUR KEY'
>>> import bottlenose
#なんか pypi のサンプルだと動かないっぽい?githubのREADMEを参考にした
>>> api = bottlenose.Amazon(aws_key, aws_secret, afi_id)
#dir の代わりに見やすくする便利ライブラリ see
>>> from see import see
#ItemSearchなどがないことがわかる。自力でAPIを叩くこと。
>>> see(api)    ()                   .*                   hash()               repr()    str()                .AWSAccessKeyId      .AWSSecretAccessKey
    .AssociateTag        .Operation           .Region              .Style
    .Timeout             .Version             .signed_request()
>>> items_xml = api.ItemSearch(SearchIndex="Music", Artist="SND")
#BeautifulSoupで自力でパースする
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(items_xml)
>>> soup('title')
[<title>Make Snd Cassette</title>, <title>Stdiosnd Types</title>, <title>Tender Love</title>, <title>Bit Sand Riders</title>, <title>Snd Lite</title>, <title>Snd Lite</title>, <title>Tender Love [Vinyl]</title>, <
title>Makesnd Cassette [Vinyl]</title>, <title>Atavism</title>, <title>Stdiosnd Types [Vinyl]</title>]

参考::pythonでAmazon Product APIにアクセスするライブラリ bottlenoseを触ってみたメモ - brainstorm
参考::SearchIndex-ItemSearch Parameter Combinations for JP - Product Advertising API
参考::python-amazon-simple-product-api 1.0.0 : Python Package Index

うーん

とりあえずbottlenoseの方をつかったほうが属性がとれなくて困るってことはなさそうだし、APIも手動で叩けばちゃんとかえってくるっぽいからそっち使うかなぁ。
そんなことよりXMLの扱い方がほんとマジよくわかんないんで(etreeとかlxmlとか)誰か教えてください