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\
webservices.amazon.co.jp\
/onca/xml\
%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サービス構築
以上です。