AmazonからWebサービス経由で情報取得して表示するプラグインがぼくの知る限り2つある。ひとつはMTAmazonで、もうひとつはaws.plだ。前者はそのままでは日本語は通らないが、後者は日本の方が作っているので、そのままで日本語が通る。もちろん最初は後者を使ってみた。
セットアップは簡単で、aws.plをpluginディレクトリに置くほかは、XML::Simpleというモジュールを入手して、extlib/XMLなどに置くだけでいい。
ところが、いざ記述して使おうとしたら、まるっきり無視された。どうしてかなと数時間考え込んでしまったが、わかってみれば、それもそのはず、ぼくはエントリーの方にタグを書いていたのだった。そうではなく、Movable Typeのタグはすべてテンプレートの方に書かなければいけない。
とはいうものの、それではトップページなどで決まりきったアイテムを紹介するという用途にしか使えないので、ありがたみが半減だ。エントリーの方にタグを記述できるようにするProcess Tagsというプラグインを見つけて、それを使えば、エントリーごとに個別にAmazonの情報を取得・表示できそうなのはわかったが、そんなことをするくらいなら、Webサービスを使わず、自分でWWWで検索した結果をはりつけてもそんなに手間は変わらない。やはりテンプレートに指定するのが正しい使い方だという結論に達した。
では、どう使うか?aws.plの方は、検索アイテムを外部から引数として渡すことができなそうだったので、MTAmazonを使うことにした。MTAmazonならMovale Typeの任意のタグの値を読み取って利用することができるのだ。さきほど書いたように日本語で利用するにはextlib/MTPluginsに置く、MTAmazon.pmの修正が必要だが。バージョン2.22からの修正点は以下の通り(国際化、地域化を考慮したまともな修正ではなくQuickHackだ)。
*** MTAmazon.pm.old 2002-11-06 21:41:44.000000000 +0900
--- MTAmazon.pm 2003-11-24 02:41:51.000000000 +0900
***************
*** 169,172 ****
--- 169,173 ----
$ctx->stash('AmazonItem', $i);
my $out = $builder->build($ctx, $tokens);
+ $out = Jcode->new($out,'utf8')->utf8;
return $ctx->error( $builder->errstr ) unless defined $out;
$prod .= $out;
***************
*** 368,373 ****
! my $url = "http://xml.amazon.com/onca/xml3?t=$associateid&" .
"dev-t=$devtoken&" .
"$method=$search&" .
! "mode=$line&type=$format&page=$page&f=xml";
$url .= "&sort=$sort" if $sort;
$url .= "&offerstatus=open" if ($method eq 'SellerSearch');
--- 369,374 ----
! my $url = "http://xml.amazon.co.jp/onca/xml3?t=$associateid&" .
"dev-t=$devtoken&" .
"$method=$search&" .
! "mode=$line&type=$format&page=$page&f=xml&locale=jp";
$url .= "&sort=$sort" if $sort;
$url .= "&offerstatus=open" if ($method eq 'SellerSearch');
utf8のところはそれぞれサービスに利用している文字コードを指定する必要がある。
2004年3月22日前後より、xml.amazon.com のURLでは"locale=jp"を指定できなくなったので xml.amazon.co.jp を指定するようにした。
さて、このサイトでは、以下のようにしてカテゴリーが「読書ノート」の場合のみ、エントリーのキーワードに指定された項目をAmazonで検索した結果を表示している。
<MTIfCategory name="読書ノート"> <MTAmazon method="Asin" search="[MTEntryKeywords]" > <div class="amazon"> <a href="<MTAmazonLink>"><img src="<MTAmazonImage>" /><div><$MTAmazonTitle$></div></a> </div> </MTAmazon> </MTIfCategory>

コメントする