Amazon Product Advertising APIの認証をJavaScriptで

既に色々なところで話題になっているAmazonのECSがProduct Advertising APIに名称変更され、3ヵ月後には認証を要求するようになるという変更は、Pipes(やYQL)などを利用してJavaScriptだけで書かれているアソシエイト・ツールにはかなり厳しい気がする。シグネチャの生成自体はJavaScriptで出来るので、とりあえずAsamashi09を対応させたけど、Secret Access Keyを隠さないといけないのでこのままでは公開できない(動作サンプルすら提供できない)。

使ってみる場合は適当な場所にダウンロード(↓downloadとかいうボタンから)して、適当な場所に展開後、asamashi09.jsの11行目と12行目を自分のAccess Key IDとSecret Access Keyに置き換え、index.htmlをブラウザで開けば動く(はず)。

使ったライブラリは、

の2つ。

asamashi09.jsの110-127行目と192-221行目あたりが実装になる。とりあえず動くものを作ろうとダラダラ書いたので再利用できなさそうなものになった。ちゃんと書き直す。

以下ははまった所と注意した方が良さそうな所のメモ。

  • シグネチャ作る時のドメインもecs.amazonaws.jpに変える
  • 最初コピペでwebservices.amazon.comのままで生成しててはまった
  • URLエンコード絡み
  • 二重にエンコードしてしまったり、するべきところでしていなかったりで認証キーが一致しないことが多々
  • SubscriptionIdでは認証通らない
  • AWSAccessKeyIdじゃないとダメっぽい(多分)
  • AWSAccessKeyIdはAssociateTagより前
  • Windowsっぽいソートに慣れてしまってて素で間違えた
  • TimestampはExpiredがある
  • Timestampで指定した時間から15分くらいで期限切れ扱いになるので、適当な時間を投げるのはダメ
  • URLエンコードはRFC 3986準拠
  • encodeURIComponent()だといくつか足らない

Secret Access Keyを隠す方法とか思いつかないんだけど……。