最終更新:2012-02-01 (水) 18:40:59 (3111d)  

amazon.inc.php
Top / amazon.inc.php

Amazon Product Advertising API対応

2009/08/15からAmazon Product Advertising APIになったので対応

//秘密鍵をdefine
define('SECRET_ACCESS_KEY_ID','Secret Access Key');

//新APIのURLを作成
function plugin_amazon_get_api_url($asin){

/*
	define('PLUGIN_AMAZON_XML', 'http://ecs.amazonaws.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=' .
	AWS_ACCESS_KEY_ID . '&Operation=ItemLookup&Version=2007-10-29&ItemId=');
*/

	$baseurl = 'http://ecs.amazonaws.jp/onca/xml';
	$params = array();
	$params['Service']        = 'AWSECommerceService';
	$params['AWSAccessKeyId'] = AWS_ACCESS_KEY_ID;
	$params['Version']        = '2009-03-31';
	$params['Operation']      = 'ItemLookup'; 
	$params['ItemId']       = $asin;

	// Timestamp パラメータを追加します
	// - 時間の表記は ISO8601 形式、タイムゾーンは UTC(GMT)
	$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');

	// パラメータの順序を昇順に並び替えます
	ksort($params);

	// canonical string を作成します
	$canonical_string = '';
	foreach ($params as $k => $v) {
	    $canonical_string .= '&'.urlencode_rfc3986($k).'='.urlencode_rfc3986($v);
	}
	$canonical_string = substr($canonical_string, 1);

	// 署名を作成します
	// - 規定の文字列フォーマットを作成
	// - HMAC-SHA256 を計算
	// - BASE64 エンコード
	$parsed_url = parse_url($baseurl);
	$string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}";
	$signature = base64_encode(hash_hmac('sha256', $string_to_sign, SECRET_ACCESS_KEY_ID, true));

	// URL を作成します
	// - リクエストの末尾に署名を追加
	$url = $baseurl.'?'.$canonical_string.'&Signature='.urlencode_rfc3986($signature);

	return $url;
}


function plugin_amazon_get_asin_title()
{
	...
	//取得URL書き換え
	$url = plugin_amazon_get_api_url($asin);
	...
}

参考

2011年10月26日を発効日とするAPIの仕様変更

function create_url($asin)
{
  $header = "GET\nwebservices.amazon.co.jp\n/onca/xml\n";
  $param  = "AWSAccessKeyId=" . AWS_ACCESS_KEY_ID;

  //この行を追加
  $param .= "&AssociateTag=" . AMAZON_AID;

  $param .= "&ItemId=" . $asin;
  $param .= "&Operation=ItemLookup";
  $param .= "&ResponseGroup=" . rawurlencode("ItemAttributes,Images,Offers");
  $param .= "&Service=AWSECommerceService";
  $param .= "&Timestamp=" . rawurlencode(gmdate('Y-m-d\TH:i:s\Z'));
  $param .= "&Version=2009-03-31";
  $sign   = rawurlencode(base64_encode(hash_hmac('sha256',$header.$param,SECRET_ACCESS_KEY,true)));
  $url    = AMAZON_XML . $param . "&Signature=" . $sign;
  return $url;
}

参考