Amazon Product Advertising API 電子署名とXSLTのまとめ

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

API&ウェブサービス
スポンサーリンク
当ブログの記事に共感していただけたら、また読みに来ていただけると嬉しいです。読んでくれる方の数が多くなると、更新するヤル気に繋がります(^^)
フォロー、ブックマークしていただけると、ブログ更新を見逃しません
わかったブログ

コメント

タイトルとURLをコピーしました