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
まずはパラメータ部分のみをリスト化する。
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
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 行を付加する。
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 は一行。
この 4 行のデータを Secret Access Key をキーとして RFC 2104-compliant HMAC with the SHA256 でハッシュ化する。 Java の場合、以下のロジックでハッシュ化できる。
Java Sample Code for Calculating Signature Version 2 Signatures
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html
で、得られたハッシュ値がこちら。
uIwCHHLMsvxxUmd+IX+KqNh9/+eNXlUB2X+L21woSZE=
ハッシュ値を URL Encode する。
uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
URL Encode されたハッシュ値をパラメータの最後に付加する。
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