Amazon Showcase WordPress Plugin

amazon.co.jp mag
Creative Commons License photo credit: mujitra (´・ω・)

Amazon Showcase WordPress Plugin は、サイドバーで商品を紹介できる WordPress の Widgetです。シンプルに写真だけ掲載できるので(販促効果はなさそうだけど)気に入っていたのですが、突然動作しなくなってしまいました。(Ver2.0時点)

2009/09/25追記
Product Advertising API に対応した Ver2.1が出ていたのだけど、何故稼働させず。
で、Ver2.2が出て、ちゃんと動くようになりました。めでたし。
一カ所だけ修正すべき箇所があります。

amazonshowcase.php (Ver2.2)

[sourcecode language=”php” firstline=”564″]
case ‘jp’: $base = ‘ecs.amazonaws.co.jp’; break;
[/sourcecode]

このアドレスが相変わらず間違っていて、co.jp の co. をとって、ecs.amazonaws.jp にすればOK。

2009/09/25追記
以下、オリジナルのエントリ-。Ver2.0の時代の物でもはや洋なし。

どうも、Product Advertising API の変更によるものらしい。

http://developer.amazonwebservices.com/connect/ann.jspa?annID=442

重要:2009年8月15日をもって、Product Advertising API は、署名認証を含まないリクエストを一切処理しなくなります。現在、Product Advertising API を利用されている方は、今すぐご利用中のすべてのリクエストに署名認証を含める準備を開始いただけますようお願いいたします。

ひ~。って感じでググって、こちらを参考にソースを修正しました。

もやし日記
Amazon Product Advertising API への対応(PHP版)

amazonshowcase.phpの515行目から始まる、Sends http request to Amazon web serviceの funciton ItemSearch()の前に、
function urlencode_rfc3986($str) を追加し、
unciton ItemSearch()の中身を、AccessKey を使う形に書き換えました。

543行目に Access Key、543行目に Secret Access Key をセットします。

[sourcecode language=”php” firstline=”515″]
/**
* Sends http request to Amazon web service
*
* @param array $asins
* @param string $associateId
* @param string $locale
* @return xml Amazon API Response
*/
function urlencode_rfc3986($str) {
return str_replace(‘%7E’, ‘~’, rawurlencode($str));
}

function ItemSearch($asins = array(), $associateId = null, $locale = ‘us’) {
//Set the values for some of the parameters.
$associateId = empty($associateId) ? $this->_AssociateId : $associateId;

if (is_array($asins) && !empty($asins)) {
//Set the values for some of the parameters.

switch ($locale) {
case ‘uk’: $base = ‘http://ecs.amazonaws.co.uk/onca/xml’; break;
case ‘de’: $base = ‘http://ecs.amazonaws.de/onca/xml’; break;
case ‘jp’: $base = ‘http://ecs.amazonaws.jp/onca/xml’; break;
case ‘fr’: $base = ‘http://ecs.amazonaws.fr/onca/xml’; break;
case ‘ca’: $base = ‘http://ecs.amazonaws.ca/onca/xml’; break;
default: $base = ‘http://ecs.amazonaws.com/onca/xml’; break;
}

//Set Access key
$AWSAccessKeyId = ‘★Set! Your Access Key ID’;
$secret_access_key = ‘★Set! Your Secret Access Key’;

$params = array();
$params[‘Service’] = ‘AWSECommerceService’;
$params[‘AssociateTag’] = $associateId;
$params[‘AWSAccessKeyId’] = $AWSAccessKeyId;
$params[‘Version’] = ‘2009-07-01’;
$params[‘Operation’] = "ItemLookup";
$params[‘ItemId’] = implode(‘,’, $asins);
$params[‘ResponseGroup’] = "Small,Images";
$params[‘Timestamp’] = gmdate(‘Y-m-d\TH:i:s\Z’);

ksort($params);

$canonical_string = ”;
foreach ($params as $k => $v) {
$canonical_string .= ‘&’.$this->urlencode_rfc3986($k).’=’.$this->urlencode_rfc3986($v);
}
$canonical_string = substr($canonical_string, 1);

$parsed_url = parse_url($base);
$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, true));

$url = $base.’?’.$canonical_string.’&Signature=’.$this->urlencode_rfc3986($signature);

//Catch the response in the $response object
$response = getUrl($url);

return $response;
}

return false;
}
[/sourcecode]

フォームから Secret Access Keyなどを設定できるように改造すればいいのだろうけど、とりあえず、これで事足りたので。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です