署名認証を含むリクエストの作成方法
2009年8月15日より、Product Advertising API を利用する場合には、リクエストに署名認証を含める必要があります。署名認証を含むリクエストの作成方法です。
- リクエストに必要な構成要素を PARAM とします。
PARAM = { "AWSAccessKeyId" : アクセスキーID, Amazon Web Service で取得。 "Service" : "AWSECommerceService", 常に"AWSECommerceService"を入力。 "AssociateTag" : アソシエイトID, Amazon アソシエイト・プログラムで取得。 "SearchIndex" : "Books", 検索対象の商品カテゴリ。 "Operation" : "ItemSearch", オペレーション。 "ResponseGroup" : "Medium", 返される値の種類を指定。 "Version" : "2010-09-01", APIのバージョン。 "Timestamp" : time.strftime( "%Y-%m-%dT%H:%M:%SZ", time.localtime()) タイムスタンプ。 }
- PARAM の構成要素に含まれる特殊文字を "%xx" エスケープで置換し、バイト順*1にソートします。
import urllib elementList = [] for key in sorted(PARAM.keys()): elementList.append(key + "=" + urllib.quote(PARAM[key])) ※ 改行されている位置がおかしいですが、elementList〜(PARAM[key]))まで一行です。 query = "&".join(elementList) "key=value"を"&"で結合。
- 署名のリクエスト文字列を作成します。
SIG_MESSAGE = """GET ecs.amazonaws.jp /onca/xml %(query)s""" message = SIG_MESSAGE % {"query" : query}
- 秘密キーを使用して、RFC2104準拠のHMAC-SHA256ハッシュアルゴリズムの計算を行います。
SECRET_ACCESS_KEY = Secret Key(秘密キー) ← Amazon Web Service で取得。 import hmac, hashlib dig = hmac.new( SECRET_ACCESS_KEY, msg, hashlib.sha256).digest()
- Base64エンコードとURLエンコードを実行します。
import base64 signature = urllib.quote(base64.b64encode(dig))
- リクエストにURLエンコードが完了した署名を追加すれば、署名認証リクエストの完成です。
AWS_URL = "http://ecs.amazonaws.jp/onca/xml?%(query)s&Signature=%(signature)s" リクエストURL = AWS_URL % {"query" : query, "signature" : signature}
こちらの URL を参考にさせていただきました。
- Amazon Web Service の認証方法が変わったので対応してみた - Solr, Python, MacBook Air in Kameido
- Amazon アソシエイト(アフィリエイト) - ヘルプ
- Product Advertising API
*1:アルファベット順とは異なり、大文字のパラメータは小文字のパラメータの前に並ぶ形式です。