[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__