AmazonのAPIを触っていて、レスポンスとして返ってきた(XMLから生成された)オブジェクトから値を取得する際にいちいちhasattrでチェックするのが面倒だったので、そのパスがなければデフォルト値を返す関数を作った。
見つけられなかったけど、標準ライブラリにありそう...。
hasattrで属性があるかチェックして、 あったら次の階層に進み、なかったらデフォルト値を返す。
オブジェクトの属性が
obj.__dict__[属性名]
で取得できることが分かったのは収穫だった。(Python2.7)
下記のような形でAmazonのAPIからのレスポンスを処理してみたらうまく動いた。
amazon_test.py
import bottlenose from lxml import objectify amazon = bottlenose.Amazon(AWS_ACCESS_KEY_ID, AWS_SECRET_KEY, Region='JP') res = amazon.ItemSearch( Keywords=u'ダイエット' , SearchIndex='Books' , ItemPage='1' , ResponseGroup='Medium' , AssociateTag=AWS_ASSOCIATE_TAG ) oot = objectify.fromstring(res) for item in root.Items.Item: title = get_obj_attr(item, 'ItemAttributes.Title') author = get_obj_attr(item, 'ItemAttributes.Author') rank = get_obj_attr(item, 'SalesRank', 0) print '%s: %s, rank:%s, author:%s' % (item.ASIN, title, rank, author)
ちゃちゃっとAPIを試したい時なんかに使ってみよう。
- 作者: 株式会社ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2015/05/21
- メディア: Kindle版
- この商品を含むブログを見る