アマゾンのウェブサービスAPIの変更と対処についてのメモ書きです。


(最初に言っておきますが、対処方法が本当に正しいかどうかは保障できません。対応してエラーが出てないから大丈夫そうだというレベルです。あとは、旧バージョンが利用停止になる8月15日まで待つ状態です。もし、間違っていたらコメント欄からご指摘してください。)



今から1ヶ月半程前にアマゾンからメールが届いて、ウェブサービスの名称を変更すること(AWSからProduct Advertising API)、APIリクエストには電子署名が必要になるという内容だったわけですが、猶予期間が2009年8月15日まであるし、APIを使った稼ぎはほとんど0なのでメンドクセと思い今まで放置していました。


でも、そろそろやっておこうかなと思い、さっきこの変更に対応しました。

(最初の変更アナウンスが出てから1ヶ月以上たっているので、そろそろ電子署名の作り方やらサンプルプログラムやら日本語で紹介しているサイトも出てきているだろうという他人任せな考えもあります・・・)


私の場合、APIの利用にはphpを使っていて、また、pearのServices_Amazonモジュールを使ってたわけなのですが、新しいProduct Advertising APIに対応したServices_Amazonモジュールがリリースされていて、これを使えば

コーディングの変更点はわずか1行だけでした。

(電子署名の事なんて全く理解せずにも対応できました。モジュール内で電子署名をごにょごにょ作ってアクセスしてくれるみたいです)


まず、pearのサイト からServices_Amazonモジュールの最新版(私が落としたのは0.8.0beta)をダウンロード。


次にダウンロードしたファイルをサーバにアップロード。

(ちなみにxreaを使っています。phpのバージョンは確かではないけど5.2以降だった記憶が・・・)


インクルードするphpファイルはAmazon.phpです。(以前はAmazonECS4.phpを使っていました。)


そして、変更する箇所は以下の一行です。


・変更前

$amazon = new Services_AmazonECS4($access_key, $associateId);


・変更後(引数は左から順にアクセスキー、秘密鍵、アマゾンアソシエイトのID)

$amazon = new Services_Amazon($access_key, $secret_key, $associateId)


呼び出すクラスをServices_AmazonECS4からServices_Amazonに変更しています。また、秘密鍵を第二引数にしています。変更点はこの二箇所だけです。

(秘密鍵、アクセスキーについてはアマゾンのwebサービスサイトにログインして調べてみてください。アマゾンアソシエイトのIDはアマゾンのアフィリエイトを利用しないなら不要ですので、第三引数は除外してもリクエストできます)


これだけで対応は完了です。


とはいっても、Services_Amazonモジュールを使っていなくてRESTのURLを自分で作ってsimplexml_load_file()関数などを使っている方もいるだろうし、私もローカル環境でRESTのURLを自分で作ってブラウザでリクエスト結果を確認するなどの作業をしていたので、結局、電子署名を含んだURLの作成まで調べました。


電子署名を含んだURL作成の手順の詳細はここでは説明しません。本家サイト で確認してください。


後、URL作成のphpサンプルプログラムも「もやし日記 」さんのページを参考にしました。