2009年の8月15日からAmazon Web Service のアクセス方法が変わりました。
具体的には秘密鍵を使った電子認証が追加された感じになってます。
Amazon から何度かメールで案内がきていたのですが
時間がなくってこの1ヶ月あまり放置していました。
今日は5連休のシルバーウィーク明けで
なんか新しいことに挑戦みたかったので対応してみました。
決して仕事をサボりたかった訳ではないです。
以下、サンプルコーディングです。
#!/usr/bin/env python # coding=utf-8 import sys, time import urllib, hmac, base64, hashlib def AmazonWebServicesSearcher( method, host, uri, secretAccessKey, parameter ): # 1.クエリパラメータ = ( 署名のシードの一部にもなる ) の作成 query = '' # 1.1. パラメータのキーの文字でソート parameter.sort() # 1.1. クエリストリングを作る for p in parameter: query += p[0] + '=' + urllib.quote( p[1] ) + '&' query = query[:-1] print 'query:', query # 2. HMAC-SHA署名の作成 # 2.1. 署名のシードの作成 sig = method + '\n' + host + '\n' + uri + '\n' + query # 2.2. hmacで鍵付きハッシュ化 sig = hmac.new( secretAccessKey, sig, hashlib.sha256).digest() # 2.3. base64 でエンコーディング sig = base64.b64encode( sig ) # 2.4. URLエンコーディング sig = urllib.quote( sig ) print 'sig', sig # 3. REST リクエストの生成 url = 'http://' + host + uri + '?' + query + '&Signature=' + sig print 'url:', url # 検索の実行 res = urllib.urlopen(url).read() return res if __name__ == '__main__': method = 'GET' host = 'webservices.amazon.co.jp' uri = '/onca/xml' secretAccessKey = 'ここに秘密キーを入れる' parameter = [] parameter.append( ['AWSAccessKeyId', 'ここにアクセスキーを入れる'] ) parameter.append( ['Keywords', 'もやしもん'] ) parameter.append( ['Service', 'AWSECommerceService'] ) parameter.append( ['Operation', 'ItemSearch'] ) parameter.append( ['ResponseGroup', 'ItemAttributes'] ) parameter.append( ['SearchIndex', 'Blended'] ) parameter.append( ['AssociateTag', 'hoge22'] ) parameter.append( ['Version', '2009-09-24'] ) parameter.append( ['Timestamp', time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())] ) res = AmazonWebServicesSearcher( method, host, uri, secretAccessKey, parameter ) print res
以前に Google App Engine の勉強のために作ったAmazon、Wiki、Hatena、Yahoo!を同時に検索するページを修正しました。
http://1.latest.whyasearch.appspot.com/?query=%E3%82%82%E3%82%84%E3%81%97%E3%82%82%E3%82%93&x=54&y=12
参考にさせてもらったページです。
https://affiliate.amazon.co.jp/gp/associates/help/t126?ie=UTF8&pf_rd_t=501&ref_=amb_link_84048096_7&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=&pf_rd_s=center-1&pf_rd_r=&pf_rd_i=assoc_help_t126_a18
http://typea.info/blg/glob/2009/07/amazon_product_advertising_api.html
http://d.hatena.ne.jp/lolloo-htn/20090608/1244468019
ではでは