電子署名入りのアマゾン・プロダクト・アドバータイジング API (旧: アマゾン Web サービス) メソッド呼び出し

Product Advertising API (以前の名称は Amazon Associate Web Service) では、2009 年 8 月 15 日から、 電子署名が正しく組み込まれた要求しか受け付けないことになりました。

既に対策済みの方も多いと思いますが (これを書いているのは 2009 年 8 月 16 日です) 、今後新しくコードを書かれる方、 あるいは慌てて修正している方(?)のために、一応電子署名を入れる典型的なアマゾン・プロダクト・アドバータイジング API 呼び出し方法について、 PHP によるサンプルコードを記載しておきます。

サンプルコード

以下の例ではアマゾンに問い合わせ、検索語句に合った書籍 (SearchIndex=Books) の情報を取得しています。

リファレンスはこちらにあります ⇒ Product Advertising API Developer Guide

各種パラメータの意味については、バージョンなどによってもいろいろ変わりますので、上記のリファレンスを見て最新版に置き換えるなりして、 コードを読んでください。


	//
	// パラメータをセット
	//
		
      	$params = array(
      		'Service' => 'AWSECommerceService',
      		'AWSAccessKeyId' => 'AWS キーはここ',
      		'Version' => '2008-08-19',
      		'Operation' => 'ItemSearch',
      		'Keywords' => '検索語句はここ',
      		'SearchIndex' => 'Books',
      		'ResponseGroup' => 'Large',
      		'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
      		'SignatureVersion' => 2,
      		'SignatureMethod' => 'HmacSHA256'
      	);
      	
      	uksort($params, 'strnatcmp');
      
      	$qstr = '';
      
      	foreach ($params as $key => $val) {
      	    $qstr .= "&{$key}=" . rawurlencode($val);
      	}
      
      	$qstr = substr($qstr, 1);
      	
      	$str = "GET\n"
      	     . "ecs.amazonaws.jp\n"
      	     . "/onca/xml\n"
      	     . $qstr;
      	
      	$params['Signature'] = base64_encode(
      	    hash_hmac('sha256', $str, 'シークレットアクセスキーはここ', true)
      	);
      	
      	$url = 'http://ecs.amazonaws.jp/onca/xml?' . http_build_query( $params );
	
	//
	// リクエストを送信して結果を XML で取得 (REST)
	//
	
	$xml_result = file_get_contents( $url );

ちなみに、この呼び出しを利用して、当サイトの書籍ランキング情報も動的に更新しています。

例えば、C/C++ の書籍の紹介ページなどで利用しています。

当サイト内に他の方が書いたレビューなどを掲載しても、あまり意味がないと思いましたので(アマゾンのサイトを見ていただいたほうが、 情報として完全と思いましたので)ランキングでは掲載していませんが、この API を利用すれば掲載することも可能です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説