28
Jun
2009
新AMAZ君EX(amazon Product Advertising API対応版)
Amazon アソシエイトからメールが来て、
「Product Advertising APIというのに変わったので、新しい認証方式に対応しましょう。
8月15日を過ぎると、今のやり方では表示されなくなっちゃうよ」
とまたしても一方的な仕打ち。
かくして、amaz君exも、新しい認証に対応することに。
以下のサイトで公開されていたコードに助けていただきました。ありがとうございました。
◆Amazon Product Advertising API への対応(PHP版) – もやし日記
PHP5だと比較的簡単ですが、それでも今までよりかはだいぶ難しくて、プログラマじゃない人にはかなり敷居は高そう。
うちは、アクセスのたびにPHPで動的に書き出すので、元のコードを書き換えさえすれば、全部が置き換わりますが、
すでに静的に書き込んである分があると、ひとつひとつ手で書き直さないとダメなのかなあ。。
<?php
/*
Plugin Name: AMAZkunEX
Plugin URI: http://www.overcube.com/wordpress/
Description: うちのブログにアマゾンリンクをつけるプラグイン。
Author: overQ
Version: 1.2
Author URI: http://www.overcube.com/wordpress/
*/
// RFC3986 形式で URL エンコードする関数
function urlencode_rfc3986($str)
{
return str_replace('%7E', '~', rawurlencode($str));
}
//新しいamazonの認証、ふたつめの引数はxslの番号を指定
function amaz_url($amaz_val,$xslt_numb) {
// Access Key ID と Secret Access Key は必須です
$access_key_id = 'ここに自分のIDを入れます';
$secret_access_key = 'ここに自分のキーを入れます';
// 基本的なリクエストを作成します
// - この部分は今まで通り
$baseurl = 'http://xml-jp.amznxslt.com/onca/xml';
$params = array();
$params['Service'] = 'AWSECommerceService';
$params['AWSAccessKeyId'] = $access_key_id;
$params['Version'] = '2005-10-05';
$params['Operation'] = 'ItemLookup';
$params['IdType'] = 'ASIN';
$params['ItemId'] = $amaz_val;
$params['ResponseGroup'] = 'Large';
$params['AssociateTag'] = 'azblog-22';
$params['ContentType'] = 'text/html';
$params['Style'] = "http://www.overcube.com/wordpress/wp-content/plugins/amazkun/simple{$xslt_numb}.xsl"; // ← 文字コードは UTF-8
// Timestamp パラメータを追加します
// - 時間の表記は ISO8601 形式、タイムゾーンは UTC(GMT)
$params['Timestamp'] = gmdate('Y-m-dTH:i:sZ');
// パラメータの順序を昇順に並び替えます
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 = "GETn{$parsed_url['host']}n{$parsed_url['path']}n{$canonical_string}";
$signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true));
$url = $baseurl.'?'.$canonical_string.'&Signature='.urlencode_rfc3986($signature);
return($url);
}
//フィルタはここから
function amazkunex ($content) {
//本・音楽・映画でsltの整形を使い分ける。
$arr_amazkun = array("amazkunBook", "amazkunMusic", "amazkunMovie");
for($i=0; $i<=2; $i++)
{
$amaz_pattern = "<".$arr_amazkun[$i].">(.*)<\/".$arr_amazkun[$i].">";
if (preg_match_all ( "/".$amaz_pattern."/", $content, $matches )) {
foreach( $matches[1] as $amaz_val ) {
$amaz_nakami = file_get_contents(amaz_url($amaz_val,1));
$okikae = '<div class="amaz">'.$amaz_nakami.'</div>';
$content = str_replace('<'.$arr_amazkun[$i].'>'.$amaz_val.'</'.$arr_amazkun[$i].'>',$okikae,$content);
}
}
}
return $content;
}
add_filter('the_content', 'amazkunex',6);
?>

![トランスフォーマー スペシャル・コレクターズ・エディション (2枚組) [Blu-ray]](http://ecx.images-amazon.com/images/I/51xKPh7e6XL._SL160_.jpg)

