Amazon Pluginのバージョン2.
リンクの生成の部分とかを変更.
ちょっと説明を加えてみる.

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
# AmazonID
my $accessKeyID = "XXXXXXXXXXXXXXXXXX";		# AamzonWebServicesのAccessKeyID
my $associateID = "XXXXXXXXXXXX";			# AmazonアフィリエイトのアソシエイトID
# エラーメッセージ
my $errorMsg = "[Amazon Plugin] ";
my $errorMsgInput = "$errorMsg入力URLが間違っている可能性があります.";
my $errorMsgNetworkError = "$errorMsgAmazonに接続できませんでした.";
my $errorMsgXML = "$errorMsgAmazonから商品情報XMLを取得できませんでした.";
my $AMAZON_HTML =<<'__EOF__';
test
__EOF__

ここまでは,定数とか,メッセージとか.
AmazonのIDはご自分のモノをどうぞ.
add_global_filterで,文字列を置換する.
具体的には,[amazon:(アマゾンのURL)]をエントリの文章から検索し,
マッチした場合,アマゾンのURLを引数にmakeAmazonTagを呼び出し,その戻り値で置換するようにしている.
つまり,[〜]で囲まれた部分をタグに置き換えるようにしている.
一応,URLなので,頭にhttp://があるようにしてある.
もっと厳密にチェックした方がいいかもしれない.

MT::Template::Context->add_global_filter(
sonson_plugins_amazon => sub {
my ($str, $arg, $ctx) = @_;
$str =~ s/[amazon:(.+)]/makeAmazonTag($1)/ge if $arg && $str =~ /[amazon:http://(.+)]/;
return $str;
}
);

以下の4つの関数が,それぞれ,処理する.
バージョン1から変化なし.やってることは,コメントアウトそのまんま.

sub getASINCode{
 〜略〜
}
# ASINコードでAMAZONにアクセスして,結果をXMLで取得する.
sub getXML{
 〜略〜
}
# エラーの結果が返っていないかをチェック
sub checkXML{
 〜略〜
}
# XMLから,詳細ページへのリンク,タイトル,画像のURLを抽出し,
# タグを生成して,文字列として返す.
sub makeHtmlTag{
 〜略〜
}

makeAmazonTagがすべての根幹.この関数が,add_global_filterから呼び出される.

$result .= "	<a href="http://www.amazon.co.jp/exec/obidos/ASIN/$item_asin/
$associateID/ref=nosim/" target="_blank">
";

ってな具合でAmazonのリンクを作成しているが・・・.
これでちゃんとアフィリエイトが動作しているのか・・・.するようだ.

# 入力されたURLから,HTMLタグか,エラー結果を返す.
sub makeAmazonTag{
my $url = shift;
my $code = getASINCode($url);
if( $code eq NULL ){
return $errorMsgInput;
}
my $result_str = getXML($code);
if( $result_str eq NULL ){
return $errorMsgNetworkError;
}
if( !checkXML($result_str) ){
return $errorMsgXML;
}
return makeHtmlTag($result_str);
}
1;
__END__