[Perl] Amazon Plugin 開発(2)
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__