2008-06-23

Google App EngineでWEBサービスを使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Google App EngineでWEBサービスを使うには、
http://d.hatena.ne.jp/hamatsu1974/20080420/1208632502
http://webdba.blogspot.com/2008/05/urlfetch-rss-img.html
http://yamashita.dyndns.org/blog/google-app-engine-xml/
を見れば基本的にはOKです。

ようはサービスを提供してくれているところへのアクセスには、
Google App Engineで提供されているurlfetchを利用して、
戻ってきたXMLデータの解析には、ElementTreeというのを使うということです。


たいていは普通に使えたのですが、AmazonのWEBサービスを使う際に
例の通りに

import xml.etree.ElementTree as etree
from google.appengine.api import urlfetch

result = urlfetch.fetch(url)
if result.status_code != 200:
 return False
dom = etree.fromstring(result.content)
items = dom.find('.//Items')

とやってもItems以下の情報がとれなかったのです。
いろいろ調べた結果、
Amazonからの戻りXML内に
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2008-04-07">
というのがあって、ここのxmlnsで指定されているネームスペースを利用しないといけないということでした。
ネームスペースが利用されていると、ElementTreeは各XMLタグを
{ネームスペース}タグ
として扱っているようです。
なので、
items = dom.find('.//Items')
ではなく、
namespace ='http://webservices.amazon.com/AWSECommerceService/2008-04-07'
items = dom.find('.//{%s}Items' % namespace)
とすることで取れるようになりました。
コメントを投稿