Amazon Product Advertising API を Ruby から使う
Posted by yoosee on Web at 2009-06-08 10:04 JST1 Amazon Product Advertising API の Signature 対応
この blog でも使っている Amazon A2S(ECS4.0) 呼び出し用の ruby library だが、5月15日から名称を Amazon Product Advertising API と変更するのに伴い、リクエストに秘密鍵を用いた署名が必要となり、現在の形式は8月15日までで使えなくなるらしい。有料サービス提供を見据えてのアクションなのか、他のEC2とインターフェイスを合わせたいのかが理由かと思うが、現状広く使われているAPIをたった3ヶ月で書き換えないとすべて無効にしてしまうというのは、なかなか豪胆なことだ。しかも ECS3.0 から 4.0 にしたのもまだ去年だと言うのに。
私個人としては個人で使う分をどうにかすればいいだけではあるので、取り合えずどうにかした。一応、このblogに出ているAmazonのリンクはほとんどがこれ経由なので、問題なく動いていると思う。更新したファイルは CodeRepos に置かせてもらった。以下からどうぞ。以前と違うのは、上記の、ないし誰が書いた Amazon の API を利用する公開されたライブラリを使おうと思った場合、Amazon.comサイトで Product Advertising API アカウントを作成 し、Accesss Key ID と共に Secret Access Key を取得する必要がある。Secret Key は非公開前提なため、上記の公開ファイルからは ID と Key は省いている。
API 呼び出し側の実装としては、この Secret Key を用いてリクエストを正規化→HMAC::Sha256のSignatureをTimestampとともに渡すと言うことをやらないといけない。
この辺の処理はAmazon Product Advertising APIの認証の件 - zorioの日記を参考に、と言うかほとんどそのまま使っている。何故か openssl の OpenSSL::HMAC::digest を使った SHA256 Hash は不正といわれて通らず、digest/sha2 を使って計算した HMAC では大丈夫だった。
それにしてもこの秘密鍵、OSSでソースを配布するなんて場合には非常に不便。たださんがAmazon.co.jp のフォーラムでOSSからの認証利用について質問しているようだが、そもそもこんなのはAmazonにとっても使われてなんぼなものなはずであり、どうしたいのかがよくわからん。あと、JavaScript から呼ぶのがすごい困難な気がする。どうやって Secret Key を隠せばいいんだろう?