2007-02-16
■ [CustomFeed] CustomFeed::TaiyoshaComic

このプラグインはWeb::Scraperを用いて書き直されました。最新版はCodeReposに置いてあります。
太洋社コミック発売予定一覧の「発売日順」表を解析し,コミックごとにエントリ化する。
CustomFeed::Manganomoriとやっていることは似ているので,普段信頼している情報源にあわせてお好きな方をどうぞ。
Plagger/Plugin/CustomFeed/TaiyoshaComic.pm
モジュール内で日本語を使用しているので,UTF-8(BOMなし)で保存すること。
package Plagger::Plugin::CustomFeed::TaiyoshaComic; use utf8; use strict; use base qw( Plagger::Plugin ); use Plagger::Date; use Plagger::Util; use Switch; use URI; sub register { my ($self, $context) = @_; $context->register_hook( $self, 'subscription.load' => \&load, ); } sub load { my($self, $context) = @_; my $ym = $self->conf->{month} || Plagger::Date->now()->strftime("%y%m"); my $feed = Plagger::Feed->new; $feed->aggregator( sub { $self->aggregate($context, $ym); }); $context->subscription->add($feed); } sub aggregate { my ($self, $context, $ym) = @_; my @urls = map { "http://www.taiyosha.co.jp/comic/comic${ym}_date${_}.html" } (1..2); my $feed = Plagger::Feed->new; $feed->link($urls[0]); $feed->title("大洋社 コミック発売一覧 $ym"); for my $url (@urls) { my $list = $self->parse(Plagger::Util::load_uri(URI->new($url))); for my $item (@$list) { my $entry = Plagger::Entry->new; $entry->title($item->{title}); $entry->author($item->{author}); $entry->tags([$item->{publisher}]); $entry->body(join ', ', ($item->{author}, $item->{publisher}, $item->{price})); $entry->body($entry->body.', '.$item->{shoseki}) if $item->{shoseki}; if ($item->{day} !~ /^\d+$/) { $entry->body($item->{day}.'旬, '.$entry->body); $item->{day} = $self->part_to_day($item->{day}); } $entry->date(Plagger::Date->strptime("%y%m%d", $ym.$item->{day})); $feed->add_entry($entry); } } $context->update->add($feed); } sub parse { my ($self, $content) = @_; my $list = []; while ($content =~ m{ <TR><TD .*?<font.*?>(.*?)/(.*?)</font> .*?<font.*?>(.*?)</font> .*?<font.*?>(.*?)</font> .*?<font.*?>(.*?)</font> .*?<font.*?>(.*?)</font> .*?<font.*?>(.*?)</font> }gsx) { push @$list, { month => $1, day => $2, publisher => $3, title => $4, author => $5, price => $6, shoseki => $7, }; } $list; } sub part_to_day { my ($self, $part) = @_; switch ($part) { case '上' { return "01"; } case '中' { return "11"; } case '下' { return "21"; } } $part; } 1;
config.taiyosha_comic.yaml
monthには取得したいコミック一覧の年月を %y%m 形式で指定する。指定しない場合は今月のコミック一覧を取得する。
以下の例では出力にPublish::iCalを使用。
plugins: - module: CustomFeed::TaiyoshaComic config: month: 0702 - module: Publish::iCal config: dir: . filename: taiyosha_comic.ics
関連
コメント
トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20070216