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

09/05/14 Comment(0) Trackback(0) はてなブックマーク - 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

同じテーマの記事

現在、573記事を公開中

Movable Type 4.261 &php.gif

製品レビューポータル「MONO-PORTAL」 rankbanner.png人気blogランキング

あわせて読みたい フィードメーター - わかったブログ
Twitter / kankichi
465
474