15:29
Product Advertising APIをRestでアクセスする
AmazonアソシエイトWebサービスの名称が、「Product Advertising API」に変更された。これに伴って、今まで使用していたアクセス方法は使用出来なくなり、リクエスト自体にサインをしなければいけなくなった。
ライブラリが出てくるまで、ちょっとこの変更はつらいかも。ということで、そのRestでのアクセス方法を説明する。英語ですが、Amazonのページにちゃんと書かれています。
今までのリクエスト、例えば、ItemLookupは以下のようなリクエスト
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Version=2008-08-19これに、タイムスタンプをつけます。次の例では、GMTのタイムスタンプをつけます。2009-0509T06:30:41Z
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Version=2008-08-19&Timestamp=2009-05-09T06:20:41ZこのリクエストをURLエンコードします。RFC3986に従って、エンコードします。
http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Version=2008-08-19&Timestamp=2009-05-09T06%3A20%3A41Zパラメータのキーと値のペアを抜き出します。
Service=AWSECommerceService AWSAccessKeyId=0000000000000000 AssociateTag=jx-22 ItemId=4877712399 Operation=ItemLookup ResponseGroup=Medium Version=2008-08-19 Timestamp=2009-05-09T06%3A20%3A41Zさらに、それをソートします。ソートするときは、文字コードの値でソートします。つまり、Aよりも、aの方が後に来ます。
AWSAccessKeyId=0000000000000000 AssociateTag=jx-22 ItemId=4877712399 Operation=ItemLookup ResponseGroup=Medium Service=AWSECommerceService Timestamp=2009-05-09T06%3A20%3A41Z Version=2008-08-19ソート済みのこれらの文字列をアンパサンドで結合します。
AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Service=AWSECommerceService& Timestamp=2009-05-09T06%3A20%3A41Z&Version=2008-08-19さらに、下の文字列を用意します。改行文字も必要です。
GET ecs.amazonaws.jp /onca/xmlこのサインする文字列を以下のようになります。
GET ecs.amazonaws.jp /onca/xml AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Service=AWSECommerceService& Timestamp=2009-05-09T06%3A20%3A41Z&Version=2008-08-19Secret Access Keyの文字列を利用して、SHA256ハッシュアルゴリズムを使用するRFC2104-compliant HMACを適用します。
pwqYQRc3RepIrf7m+VMRy/jFXx/ZBSPsaSFFexIUoSI=この文字列をURLエンコードします。
pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3D最後に、先ほど生成したURLにこのSignatureのキーで追加します。
AWSAccessKeyId=0000000000000000&AssociateTag=jx-22&ItemId=4877712399&Operation=ItemLookup&ResponseGroup=Medium&Service=AWSECommerceService& Timestamp=2009-05-09T06%3A20%3A41Z&Version=2008-08-19&Signature=pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3Dこれで、リクエストが完成です。このJava実装は、Amazonのページに記載されています。それは、日本用にはなっていないので、それを日本用のものに変更したものを次のエントリーで掲載します。