PEAR の Services_AmazonECS4-0.9.0 を 2011.10.26 の仕様変更以降の Product Advertising API に対応させる方法のメモ
PEAR の Services_Amazon パッケージの v0.9.0 が現状の Product Advertising API に対応していないようだったので、その修正内容のメモ。
API側で廃止されたOperationに対応するメソッド(SellerLookup等)はもちろん使用できないが、
それ以外のOperationの認証と検索はできるようになる。
AmazonECS4.php:85行目を修正
AmazonECS4.php
// define('SERVICES_AMAZON_BASEURL', 'http://webservices.amazon.com/onca/xml?Service=AWSECommerceService');
define('SERVICES_AMAZON_BASEURL', 'http://webservices.amazon.com/onca/xml');
AmazonECS4.php:133行目下あたりにメンバ変数を追加
AmazonECS4.php
var $_service = 'AWSECommerceService';
AmazonECS4.php:313~318行目を修正
AmazonECS4.php
/*
'US' => 'http://webservices.amazon.com/onca/xml?Service=AWSECommerceService',
'UK' => 'http://webservices.amazon.co.uk/onca/xml?Service=AWSECommerceService',
'DE' => 'http://webservices.amazon.de/onca/xml?Service=AWSECommerceService',
'JP' => 'http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService',
'FR' => 'http://webservices.amazon.fr/onca/xml?Service=AWSECommerceService',
'CA' => 'http://webservices.amazon.ca/onca/xml?Service=AWSECommerceService',
*/
'US' => 'http://webservices.amazon.com/onca/xml',
'UK' => 'http://webservices.amazon.co.uk/onca/xml',
'DE' => 'http://webservices.amazon.de/onca/xml',
'JP' => 'http://webservices.amazon.co.jp/onca/xml',
'FR' => 'http://webservices.amazon.fr/onca/xml',
'CA' => 'http://webservices.amazon.ca/onca/xml',
AmazonECS4.php:1046~1056行目の_buildUrlメソッドを次のように修正
AmazonECS4.php
function _buildUrl($params)
{
$params['AWSAccessKeyId'] = $this->_keyid;
$params['AssociateTag'] = $this->_associd;
$params['Service'] = $this->_service;
$params['Version'] = $this->_version;
$params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
ksort($params);
$canonical_string = '';
foreach ($params as $k => $v) {
$canonical_string .= '&'.str_replace('%7E', '~', rawurlencode($k)).'='.str_replace('%7E', '~', rawurlencode($v));
}
$canonical_string = substr($canonical_string, 1);
$parsed_url = parse_url($this->_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_KEY, true));
$url = $this->_baseurl.'?'.$canonical_string.'&Signature='.str_replace('%7E', '~', rawurlencode($signature));
return $url;
}
以上