AWS(Amazon web service)が、Amazon Product Advertising APIへ名前変更。
名前だけでなく、仕様も変更になったようです。クエリに電子署名をくっつけないと、データを取得できないようになりました。
電子署名
これまでのクエリに、新しく新設された「Your Secret Access Key」と現時刻のTimestampを利用して暗号化した署名をくっつける必要があります。
phpによるクエリ生成方法はもやしさんのところのコードを利用させていただき、難なく対応できました。
Amazon Product Advertising API への対応(PHP版)
XSLT
xmlデータに、XSLTスタイルシートを当ててhtmlファイルを生成しているサイトを運営していますので、こちらも対応。
しかし、上記で生成したクエリに、これまで利用していたXSLTスタイルシートを適用したら、エラーが出てしまいました。
&ContentType=text/html&Style=http://sample.com/sample.xsltをくっつけても、エラーコード「SignatureDoesNotMatch」が出てしまいます。
色々調べた結果、ringoon pop!!さんにお尋ねして解決しました。
[PHP] Amazon Product Advertising API で認証付きリクエストを送る方法まとめ
ちなみに webservices.amazon.co.jp に対してXSLTの署名付きリクエストを送ると SignatureDoesNotMatch が返ってきます。理由は不明です。私は xml-jp.amznxslt.com を使っています。お試し下さい。
なるほど。
もやしさんのところで紹介されていた、リクエストURL「http://ecs.amazonaws.jp/onca/xml~」のドメイン部分を、「http://xml-jp.amznxslt.com/onca/xml~」に変更したら、表示されるようになりました。
クエリ部はソートする必要があるため、他のパラメーターと同様に設定します。
もやしさんのコードだと、
$baseurl = ‘http://xml-jp.amznxslt.com/onca/xml’;
$params = array();
$params[‘Service’] = ‘AWSECommerceService’;
$params[‘AWSAccessKeyId’] = $access_key_id;
$params[‘Version’] = ‘2009-03-31’;
$params[‘Operation’] = ‘ItemSearch’; // ← ItemSearch オペレーションの例
$params[‘SearchIndex’] = ‘Books’;
$params[‘Keywords’] = ‘keyword’;
$params[‘ContentType’] = ‘text/html’;
$params[‘Style’] = ‘http://sample.com/sample.xsl’;
赤字の部分を修正・追加すればOKです。
ドメインの部分は……、ただのバグのような気がします。私はこれで半日つぶしましたorz
コメント