2005-02-12

Amazon Webサービスで人気商品表示

Amazonアソシエイトプログラムとは別に、Amazon Webサービスというプログラマー向けのデベロッパーキットを用意している。
あらかじめ登録しておけば、Amazonの商品を検索し、アフィリエイトリンクとして自分のサイトに表示することができるのだ。

そこで、サイドバーに特定ジャンルの売り上げ上位3位までの商品を画像リンク付で表示してみた。
なお、今回の方法では、cronが使えるサーバで、Perl5.8以上、「LWP::Simple」「XML::Simple」が必要というややマニアックな方法である。

Amazonアソシエイトプログラムでは

こんな感じでベストセラー商品を表示できるが、これだとやはり味気ない。
しかし、Amazonデベロッパーキットならば、商品のリンクだけ等自由なカスタマイズができる。

なにはともあれば、まずはデベロッパー・トークンをAmazon Webサービスをさくっとゲットしよう。
登録画面は英語だが、恐れるほどでもない。メールアドレスさえしっかり入力できればOK。

IDをゲットすれば、

http://xml-jp.amznxslt.com/onca/xml3?t=yublog08-22&dev-t=XXXXX&type=lite&mode=electronics-jp&page=1&f=xml&BrowseNodeSearch=3210981&sort=+salesrank&locale=jp

という感じで、自由な条件でAmazonのデータをxmlで取得できる。
この例では、IDをXXXXXとしているので、実際には表示されない。
パラメータについては、本家サイトを参考にすればよい。特定のカテゴリの中から売れ筋の商品を抽出したり、キーワードを設定して、合致する商品を検索し、発売日順に並べるなど自由なカスタマイズができる。素晴らしい。

続いては、簡単なPerlのプログラムを組んで、cronで定期的に実行させる。
例えばこんな感じ。

#!/usr/local/bin/perl

#
#Amazonから情報を得てサイドバーで表示
#

use LWP::Simple;
use XML::Simple;
use Encode;

#表示するアイテム数
$item_num = 3;

$amazon_url = "http://xml-jp.amznxslt.com/onca/xml3?t=yublog08-22&dev-t=XXXXX&type=lite&mode=electronics-jp&page=1&f=xml&BrowseNodeSearch=3210981&sort=+salesrank&locale=jp";

#保存用ファイル
$file = "./amazon.cgi";

my $xml = get($amazon_url);

unless(defined $xml){
die "Failed\n";
}

my $simple = XML::Simple->new();
my $tree = $simple->XMLin($xml);


open (FILE, ">$file") || die ("Open Error : $file");

for ($i = 0; $i <= item_num - 1; $i++) {

$url[$i] = $tree->{'Details'}->[$i]->{'url'};
$product_name[$i] = $tree->{'Details'}->[$i]->{'ProductName'};
$image_url[$i] = $tree->{'Details'}->[$i]->{'ImageUrlSmall'};
$our_price[$i] = $tree->{'Details'}->[$i]->{'OurPrice'};

print FILE "<p><a href=\"$url[$i]\" target=\"_blank\"><img src=\"$image_url[$i]\" boder=0 /><br />$product_name[$i]</a><br />$our_price[$i]円</p>\n";

}
close (FILE);

exit;

超適当だ……。
これで、$fileで指定したファイルにデータが保存されるので、

<$MTInclude file="./amazon.cgi"$>

をテンプレートに入れればOK。
ブログに反映させるためには、リビルドも必要なので、MovableTypeのサイドバーへRSS表示で紹介したmt-rebuild.plもcronに登録する必要がある。