The net is vast
プログラミングや、コンピュータなどの備忘録です。 主にRuby, Java, Linux, 等を扱います。アルゴリズムも扱いたいな。
15:29

Product Advertising APIをRestでアクセスする

Category: , By jx
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-19
Secret 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のページに記載されています。それは、日本用にはなっていないので、それを日本用のものに変更したものを次のエントリーで掲載します。
 

0 comments so far.

Something to say?