Python ElementTree でAmazon APIを利用する

| コメント(0) | トラックバック(0)

この間、SAXパーサーでAmazon Product(以下略)を解析したので、更なるXML柔軟利用を目指してXPathを使ってみる。

Amazon APIへのRESTリクエスト作成はこちら。また、最新のソースはこのあたり

ElementTree 参考URL

XPath の構文

注意点
  • xmlns属性があると、タグを指定するときに、'//tag_name' などと書くことができずに、'//{http://xmlns_attribute_value}tag_name'のようにいちいち記述する必要がある。
  • 要するに、elm.find('./ItemAttributes/Title') と書くことはできず、elm.find('./{http://webservices.amazon.com/AWSECommerceService/2005-10-05}ItemAttributes/{http://webservices.amazon.com/AWSECommerceService/2005-10-05}Title のようにする必要がある')
#!Python2.6
# -*- coding: utf-8 -*-

import amazon_ecs  # 自作モジュールをインポート
import urllib2
from xml.etree import ElementTree

# xmlns を付加したタグ名を返す
def qn(tag):
    return ElementTree.QName(ns, tag).text

ns = r'http://webservices.amazon.com/AWSECommerceService/2005-10-05'

# xmlnsが指定されている場合、タグを{xmlnsの値}タグ名 といちいち書く必要があるため、そのように展開したものを保持しておく
# ./{http://webservices.amazon.com/AWSECommerceService/2005-10-05}ItemAttributes/{http://webservices.amazon.com/AWSECommerceService/2005-10-05}Title
q_items  = './/{0}'.format(qn('Item'))
q_title  = './{0}/{1}'.format(qn('ItemAttributes'), qn('Title'))
q_author = './{0}/{1}'.format(qn('ItemAttributes'), qn('Author'))
q_asin   = './{0}'.format(qn('ASIN'))
q_url    = './{0}'.format(qn('DetailPageURL'))
q_img    = './{0}/{1}'.format(qn('SmallImage'), qn('URL'))

# Amazon Product Advertise API リクエスト URLを生成
operation = amazon_ecs.ItemSearch()
operation.keywords('手塚 治虫')
operation.search_index('Books')
operation.response_group('Large')
request = operation.request()
print 'REQUEST : {0}'.format(request)

# ElementTreeを生成
root = ElementTree.parse(urllib2.urlopen(request)).getroot()
# XPathを使用してElementTreeを解析
items =  root.findall(q_items)
for item in items:
    print '-' * 100
    print 'TITLE : {0}'.format(item.find(q_title).text)
    print 'AUTHOR : {0}'.format(item.find(q_author).text)
    print 'ASIN : {0}'.format(item.find(q_asin).text)
    print 'URL : {0}'.format(item.find(q_url).text)
    print 'IMG : {0}'.format(item.find(q_img).text)

PyDevで走らせた結果

py_xpath01

トラックバック(0)

トラックバックURL: http://typea.info/mt/mt-tb.cgi/161

コメントする

このブログ記事について

このページは、pirotoが2009年8月29日 01:35に書いたブログ記事です。

ひとつ前のブログ記事は「初めてのPython」です。

次のブログ記事は「beaglidx にハッキングされた!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.02