[Python] Amazon Product Advertising API を使ってみた
Amazon Product Advertising API を Python で使ってみました。
Amazon API を使うには AWS への登録が必要です。
下記のサイトに Amazon API を Python で使うためのコードが公開されています。認証用のシグネチャの作り方も載せてあるので非常に参考になります。
・引用元:PythonでAmazon Product Advertising APIを使う – 人工知能に関する断想録
amazon.py(引用元サイトのコードそのまま)
#coding:utf-8 import urllib2 import hashlib, hmac import base64 import time """ Amazon Product Advertising APIを使って商品情報を取得する """ class Amazon: def __init__(self, access_key, secret_access_key, associate_tag=None): """コンストラクタ""" self.amazonurl = "http://webservices.amazon.co.jp/onca/xml" self.proxy_host = None self.proxy_port = None self.access_key = access_key self.secret_access_key = secret_access_key self.associate_tag = associate_tag self.version = "2009-10-01" self.url = None def setProxy(self, host, port=8080): """プロキシをセット""" self.proxy_host = host self.proxy_port = port def setVersion(self, version): """バージョンをセット""" self.version = version def itemLookup(self, item_id, **options): """アイテムの詳細情報を取得""" params = options params["Operation"] = "ItemLookup" params["ItemId"] = item_id return self.sendRequest(params) def itemSearch(self, search_index, **options): """アイテムを検索""" params = options params["Operation"] = "ItemSearch" params["SearchIndex"] = search_index return self.sendRequest(params) def buildURL(self, params): """RESTリクエストのURLアドレスを構築""" params["Service"] = "AWSECommerceService" params["AWSAccessKeyId"] = self.access_key if self.associate_tag is not None: params["AssociateTag"] = self.associate_tag params["Timestamp"] = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) sorted_params = sorted(params.items()) # paramsのハッシュを展開 request = [] for p in sorted_params: pair = "%s=%s" % (p[0], urllib2.quote(p[1].encode("utf-8"))) request.append(pair) # 2009/8/15から認証が導入されている # Secret Access Keyを使ってHMAC-SHA256を計算 msg = "GET\nwebservices.amazon.co.jp\n/onca/xml\n%s" % ("&".join(request)) hmac_digest = hmac.new(self.secret_access_key, msg, hashlib.sha256).digest() base64_encoded = base64.b64encode(hmac_digest) signature = urllib2.quote(base64_encoded) # Signatureをリクエストに追加してURLを作成 request.append("Signature=%s" % signature) url = self.amazonurl + "?" + "&".join(request) return url def sendRequest(self, params): """Amazonにリクエストを送付し、取得したXMLを返す""" self.url = self.buildURL(params) if self.proxy_host: proxy_handler = urllib2.ProxyHandler({"http":"http://%s:%s/" % (self.proxy_host, self.proxy_port)}) opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener() return opener.open(self.url).read() |
キーワードで本を検索してみました。
引用元サイトに掲載されているコードを元に、Pythonのプログラムを対話モードで実行できるように文字コード問題を解決したコードが下記になります。
#coding:utf-8 import sys, codecs sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout) from amazon import Amazon # キーワードで本を検索したい! amazon = Amazon("自分のAccess Key", "自分のSecret Access Key") xml = amazon.itemSearch("Books", Keywords=u"ウェブサービス", ItemPage="1") # 本 print amazon.url # リクエストURL #print unicode(xml, 'utf_8') # Amazonのレスポンス # XMLから情報を取り出す from BeautifulSoup import BeautifulStoneSoup soup = BeautifulStoneSoup(xml) items = soup.find("items") print u"%s件見つかりました" % soup.find("totalresults").contents[0] total_pages = soup.find("totalpages").contents[0] cur_page = soup.find("itempage").contents[0] print u"ページ数: %s/%s" % (cur_page, total_pages) for item in soup.findAll("item"): print item.asin.contents[0], item.author.contents[0], item.title.contents[0] |
出力結果は下記のようになりました。
http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=AKIAIB4QANRP3BXICEHQ&ItemPage=1&Keywords=%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2011-03-07T07%3A34%3A13Z&Signature=g5GSp7pBEGEUgundHtiqMHhwhOVjIda/5a1wCGPIkFw%3D 167件見つかりました ページ数: 1/17 4820742019 岩本 のぞみ 事例でわかるWebサービス・ビジネス―XML、Webサービスのしくみ、基本技術、ビジネスへの適用例が図解でわかる! 4797336838 秋元 裕樹 PHP×WebサービスAPIコネクションズ 4434073435 Sanjiva Weerawarana Webサービスプラットフォームアーキテクチャ 4873110890 イーサン セラミ Webサービスエッセンシャルズ 4891003049 Scott Short XML Webサービス構築ガイド (マイクロソフト公式解説書) 488373174X 成田 雅彦 Webサービス・アプリケーション開発技法―SOAP/WSDL/ebXML 4822281167 嶋本 正 Webサービス完全構築ガイド - XML、SOAP、UDDI、WSDLによる先進Webシステムの設計・実装 4798007064 本 俊也 図解標準 最新Webサービス マスタリングハンドブック―XML、SOAP、WSDL、UDDIの基本から開発まで 4797320680 スティーブ グレアム JavaによるWebサービス構築 4861671000 佐久嶋 ひろみ PHP5 & XMLによるWebサービス構築 |
以上です。