May 11, 2009
[WebService] 「Amazon アソシエイト Web サービス」改め「Product Advertising API」メモ
Amazon アソシエイト Web サービスが Product Advertising API という名称に変更されるそうだ。 それに伴い、API に対する全てのリクエストで認証が必要となるとのこと。 移行期間は 2009/05/11 から 2009/08/14 の 3 ヶ月間で、2009/08/15 以降は認証が必須になるそうな。 結構オオゴトだ。
Secret Access Key の取得
今までは Access Key ID で呼び出し元を識別していたが、新仕様では Access Key ID に加えて Secret Access Key というものが必要となる。 Secret Access Key は既に Access Key ID を持っているのであれば、http://aws.amazon.com/から Your Account > Access Identifiers で取得できる(要ログイン)。
リクエストの組み立て
次にリクエストを組み立てる。現行仕様での以下のリクエストを認証に対応させてみる。
http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=*********************&Operation=ItemLookup&ItemId=4101162069&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06まずはパラメータ部分のみをリスト化する。
これに Timestamp を付加する。amazon.co.jp の場合、Timestamp は JST を使用(amazon.com の場合は GMT)し、フォーマットは yyyy-MM-dd'T'HH:mm:ss'Z' とする。Service=AWSECommerceService AWSAccessKeyId=********************* Operation=ItemLookup ItemId=4101162069 ResponseGroup=ItemAttributes,Offers,Images,Reviews Version=2009-01-06
パラメータをソートする。Service=AWSECommerceService AWSAccessKeyId=********************* Operation=ItemLookup ItemId=4101162069 ResponseGroup=ItemAttributes,Offers,Images,Reviews Version=2009-01-06 Timestamp=2009-05-011T12:00:00Z
パラメータを '&' で繋げる。AWSAccessKeyId=********************* ItemId=4101162069 Operation=ItemLookup ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews Service=AWSECommerceService Timestamp=2009-05-011T12%3A00%3A00Z Version=2009-01-06
AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06'&' で繋げたパラメータの前に以下の 3 行を付加する。
この 4 行のデータを Secret Access Key をキーとして RFC 2104-compliant HMAC with the SHA256 でハッシュ化する。 Java の場合、以下のロジックでハッシュ化できる。GET webservices.amazon.co.jp /onca/xml AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews &Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06 ※AWSAccessKeyID 〜 Version=2009-01-06 は一行。
- Java Sample Code for Calculating Signature Version 2 Signatures
- http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html
ハッシュ値を URL Encode する。uIwCHHLMsvxxUmd+IX+KqNh9/+eNXlUB2X+L21woSZE=
URL Encode されたハッシュ値をパラメータの最後に付加する。uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06&Signature=uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3Dこれでリクエストは完成。
上記手順のより詳細な情報はこちら
- Example REST Requests
- http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/rest-signature.html
API にアクセス
上で組み立てたリクエストで API にアクセスして正常応答があれば成功。
参考
より詳細な情報は Amazon Product Advertising API のドキュメントを参照のこと。
- Product Advertising API - Request Authentication
- http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/RequestAuthenticationArticle.html



