読みたい本、読まなければならない本は増える一方なのですが消費量は低下するばかりで、Amazonのウィッシュリストはどんどん増えていくのでした。これをWebで確認するのは面倒なのでRSSリーダーで読めたらいいなぁと思い、ウィッシュリストをRSSにして出力するスクリプトを作ってみました。 |
読みたい本、読まなければならない本は増える一方なのですが消費量は低下するばかりで、Amazonのウィッシュリストはどんどん増えていくのでした。これをWebで確認するのは面倒なのでRSSリーダーで読めたらいいなぁと思い、ウィッシュリストをRSSにして出力するスクリプトを作ってみました。 |
#!/usr/local/bin/perl
require 5.008;
use strict;
use warnings;
binmode STDOUT, ':utf8'; # Wide character in print at..
use Net::Amazon;
use XML::RSS;
use DateTime::Format::W3CDTF;
use constant DEV_TOKEN => 'YOUR_AMZN_TOKEN';
use constant WISHLIST_ID => 'YOUR_WISH_LIST';
use constant RDF_PATH => './wishlist.rdf';
my $ua = Net::Amazon->new(
token => DEV_TOKEN,
locale => 'jp',
);
my $rss = new XML::RSS (version => '1.0');
$rss->channel(
title => 'My Amazon Wishlist',
link => 'http://www.amazon.co.jp/exec/obidos/registry/' . WISHLIST_ID,
description => '',
dc => {
creator => '',
rights => '',
language => 'ja'
}
);
my $response = $ua->search( wishlist => WISHLIST_ID );
for ($response->properties){
my $description = $_->ProductDescription();
$description =~ s/<[^>]*>//g;
$description =~ s/ / /g;
my @date = split /\//, $_->ReleaseDate();
my %date;
$date{year} = $date[0];
$date{month} = $date[1] if $date[1];
$date{day} = $date[2] if $date[2];
$date{time_zone} = 'Asia/Tokyo';
my $dt = DateTime->new(\%date);
$rss->add_item(
title => $_->ProductName() . " " . $_->author() . " " . $_->OurPrice(),
link => "http://www.amazon.co.jp/exec/obidos/ASIN/" . $_->Asin(),
description => "[ " . $_->ProductName() . " / " . $_->author() . " / " . $_->OurPrice()
. " / " . $_->Manufacturer() . " / " . $_->Availability()
. " / SalesRank: " . $_->SalesRank() . " ] " . $description,
dc => {
date => $dt->format_datetime($dt) . '+09:00',
},
);
}
$rss->save(RDF_PATH);
__END__
スクリプトはutf8で書いたほうがラクですがEUC-JPでも動きます。dc:dateの時間のところはどうせ00:00:00になるので、DateTime::Format::W3CDTFを使う必要はないかもしれません。binmode STDOUT, ':utf8'; は"Wide character in print at.."というエラーの対策ですが、これを書いてもエラーが少し出てしまいます。スクリプトをutf8にすれば解決するかも。でも動くからいいや。
日本語文字化け関係にはちょっと悩まされたのですが、ここなどが参考になりました。Net::Amazonの応答はUTF-8なので、RSSにしやすいですね。
スクリーンショットはOpera7.53での見た目です。発行年月日でソートできるしAmazon.co.jp 売上ランキングが手軽に見られるので便利。満足。cronとかに入れて動作させるとシアワセになれます。本当はコメントとかウィッシュリストへの登録日時が取得できればいいのですが、Net::Amazonでは取得できなさそうです。SOAP::Liteで直接叩けば取ってこれるのかなぁ。
参考サイト
http://fromto.cc/hosokawa/diary/2003/20030727-home2/
http://blog.bulknews.net/cookbook/blosxom/rss/rss2email.html
http://naoya.dyndns.org/~naoya/mt/archives/000386.html
http://naoya.dyndns.org/~naoya/mt/archives/000611.html
http://search.cpan.org/~mschilli/Net-Amazon-0.31/lib/Net/Amazon.pm