Amazon Web Service の認証方法が変わったので対応してみた


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 の勉強のために作ったAmazonWiki、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


ではでは