October 16, 2004

wishlist2js.pl - Amazon ウィッシュリストを JavaScript にしてウェブサイトに貼り付ける

[ Perl ]

Amazon.co.jp のウィッシュリストを使うと自分が欲しいと思う書籍や音楽をリストアップすることができます。作成したウィッシュリストは Amazon.co.jp 内で他のユーザも閲覧することができますが、せっかくなのでそれを blog で公開してみましょう。

...といってもそんなに目新しいことをするわけではなく、Amazon Web サービスを使ってウィッシュリストのデータを取得し、JavaScript に書き出して JavaScript Includion で表示するというものです。結果はこんな感じ。 (出力にスタイルを当ててます。)

コードは以下です。Net::Amazon で Wishlist 検索を行って、その結果を Template-Toolkit に渡して整形表示。モジュールのおかげで割と単純なスクリプトだったりします。

#!/usr/local/bin/perl
 
use strict;
use warnings;
use utf8;
 
NDO::Wishlist2Js->new->do;
 
package NDO::Wishlist2Js;
 
use Cache::File;
use Encode;
use Net::Amazon;
use Template;
 
use constant DEV_TOKEN => 'DM1XQEXM3YQU8';
use constant WISHLIST_ID => '3J0YO7YAO4L4W';
use constant AWS_CACHE_ROOT => '/memfs/wlist2js';
use constant AWS_CACHE_EXPIRES => '3600 sec';
 
sub new {
    bless {}, shift;
}
 
sub do {
    my $self = shift;
    $self->setcache;
    $self->setua;
    $self->makelist;
    $self->print;
}
 
sub setcache {
    my $self = shift;
    $self->{awscache} = Cache::File->new(
        cache_root => AWS_CACHE_ROOT,
        default_expires => AWS_CACHE_EXPIRES,
    );
}
 
sub setua {
    my $self = shift;
    $self->{ua} = Net::Amazon->new(
        token  => DEV_TOKEN,
        locale => 'jp',
        cache => $self->{awscache},
    );
}
 
sub makelist {
    my $self = shift;
    my $response = $self->{ua}->search( wishlist => WISHLIST_ID );
    die $response->message if ($response->is_error);
    $self->{wishlist} = [ $response->properties ];
}
 
sub print {
    my $self = shift;
    my $template = Template->new or die $Template::ERROR;
    my $html;
    $template->process(
        \*DATA, { wishlist => $self->{wishlist} }, \$html
    ) or die $template->error;
    my @lines = split /\n/, $html;
    my $output = "";
    for (@lines) {
        s/x27/'/g;
        $output .= "document.writeln('$_');\n";
    }
    print encode('euc-jp', $output);
}
 
1;
 
__DATA__
<div id="wishlist">
[% FOREACH item IN wishlist -%]
<div class="wishlist-item">
<div class="wishlist-item-image">
<img src="[% item.ImageUrlSmall %]" alt="[% item.ProductName %]" />
</div>
<div class="wishlist-item-info">
<div class="wishlist-item-info-title">
<a href="http://www.amazlet.com/browse/ASIN/[% item.Asin %]/">[% item.ProductName %]</a>
</div>
Amazon.co.jp 価格: <span class="wishlist-price">[% item.OurPrice %]</span><br />
[% IF item.SalesRank %]ランキング: [% item.SalesRank %][% END %]<br />
[% item.Availability %]
</div>
<div class="wishlist-item-footer"></div>
</div>
[% END -%]
</div>

実はちょっと色気を出して、出力先のリンクは Amazon.co.jp ではなく amazlet.com に貼ったりしてみました。このスクリプトを crontab にでも引っ掛けておき、出力を wishlist.js にでもリダイレクトして保存、script タグで取り込めば完了です。

というわけでたまには週末 Hack してみました。

Posted by naoya at October 16, 2004 02:50 PM | トラックバック (2)  b_entry.gif
トラックバック [2件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/1297
Net::Amazonでウィッシュリストを取得してみる
Excerpt: NDO::Weblogの Amazon ウィッシュリストを JavaScript にしてウェブサイトに貼り付けるスクリプトが面白そうだったので試してみました。 ...
Weblog: Monologue
Tracked: November 27, 2004 03:47 AM
Amazon Web Services - XSLTでJavaScriptを吐く
Excerpt: Amazonに登録してある自分のwishlistをブログやホームページに取り込んで表示させるのは、もっとも基本的なAWS応用例の一つ。結合するテクニックとしては...
Weblog: psychic.goo:1008
Tracked: December 22, 2004 11:12 PM
コメント [0件]
コメントする









名前、アドレスを登録しますか?