PythonとAmazonとXMLと
遊んだ。
結局GWはこれだけかよ。
pyamazonとかも考えたが、時間もあることだし自分で書いてみる。
import string import urllib import urllib2 from xml.dom.minidom import parse class Amazon snip... def __createUrl(self, **kwargs): params = ["&AWSAccessKeyId=%s" % self.accesskey] for key, value in kwargs.iteritems(): params.append("&%s=%s" % (urllib.quote(key), urllib.quote(value.encode('utf-8')))) url = self.baseUrl + string.join(params, '') return url def __request(self, url): f = urllib2.urlopen(url) return parse(f) snip...
肝はこれだけ。
サービスURLとアクセスキーはコンストラクタで設定。
RESTは楽だなあ。
あとは、APIに合わせてメソッドを作る。
とりあえずどうとでもなるDOMで返してるのだが、ラッパクラスはあったほうが良いか?
今回はxpathを使ってみた。
<?python from xml import xpath ?> <div py:for="item in xpath.Evaluate('//Items/Item', result.documentElement)"> <a href="new_review?isbn=${xpath.Evaluate('./ASIN/text()', item)[0].nodeValue}"> ${xpath.Evaluate('./ItemAttributes/Title/text()', item)[0].nodeValue} </a> <img src="${xpath.Evaluate('./MediumImage/URL/text()', item)[0].nodeValue}"/> </div>
UTF-8でやってる分には文字コードを気にしなくて良いようだ。
ちなみにxpathは標準ライブラリではなく(DOMとSAXは標準)PyXMLに入っている。
http://pyxml.sourceforge.net/
http://www.python.org/community/sigs/current/xml-sig/