PythonでAmazonのProduct Advertising APIを利用する
正直、「PythonでAmazon Product Advertising APIを使う - 人工知能に関する断創録」や、「無題メモランダム: Amazon Product Advertising APIの署名認証をPythonでやってみる」を読んでいただくのが一番にいいと思います。
ただ、XMLのパースがこのままだと、GAEで上手くできないので(方法があるのかもしれないのですが)、xml.etree.ElementTreeにて分解してみました。ポイントは、名前空間を利用しているところでしょうか...
それにしても、AmazonのAPIも知らない間に認証方法が複雑になったり、名称が変わっていたり、ドキュメント(Product Advertising API)もなにやら変わっていたり。
ソース
ちなみに、お米の情報が取れます...
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib, urllib2 import hashlib, hmac import base64 import time import re from xml.etree.ElementTree import * class Amazon(): amazonUrl = 'http://webservices.amazon.co.jp/onca/xml' accessKey = 'xxxxxxxx' secretKey = 'xxxxxxxx' associate = 'xxxxxxxx' def __init__(self): return def buildURL(self, params): params["Service"] = "AWSECommerceService" params["AWSAccessKeyId"] = self.accessKey params["AssociateTag"] = self.associate params["Timestamp"] = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) params = sorted(params.items()) request = [] for p in params: pair = "%s=%s" % (p[0], urllib2.quote(p[1].encode("utf-8"))) request.append(pair) message = "GET\nwebservices.amazon.co.jp\n/onca/xml\n%s" % ("&".join(request)) hmac_digest = hmac.new(self.secretKey, message, hashlib.sha256).digest() base64_encoded = base64.b64encode(hmac_digest) signature = urllib2.quote(base64_encoded) request.append("Signature=%s" % signature) url = self.amazonUrl + "?" + "&".join(request) return url def sendRequest(self, params): self.url = self.buildURL(params) opener = urllib2.build_opener() return opener.open(self.url).read() def item(self, itemId): params = {} params["Operation"] = "ItemLookup" params["ItemId"] = itemId return self.sendRequest(params) amazon = Amazon() xmlString = amazon.item('B00406BGUI') xml = fromstring(xmlString) namespace_url = 'http://webservices.amazon.com/AWSECommerceService/2005-10-05' namespace = '{' + namespace_url + '}' title = xml.getiterator(namespace+'Title') print title[0].text