| « | » | |||||
|---|---|---|---|---|---|---|
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
以前2chdat.pmを変更してから小変更を何度か経て、そのまま運用していた。
特に問題は出ていないように見えたが、Livedoor列車運行情報に特化しすぎていて少しもやもやしていた。
そんな中、Livedoor列車運行情報CustomFeedの作者様からトラックバックをいただき、変更があったことを知った。
主な変更点は、タイトルの情報を増やすこととTwitterへの投稿の部分のようだ。
タイトルの情報については自分も少しいじっていて、ほぼ平常通りの場合は「○」、遅れがある場合は「△」などを付加していたが、LDTrain.pmではなくて2chdat.pmの方で処理していた。
汎用性も考えると、作者にならってLDTrain.pmの方で処理した方が良いので変更した。
変更したところは、
オリジナルはこちら。
以下、変更後のコード。
作者様、本当にありがとうございました。
package Plagger::Plugin::CustomFeed::LDTrain;
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 = 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 = "http://transit.livedoor.com/traffic_info/kantou";
my $feed = Plagger::Feed->new;
my $renewaltime = Plagger::Date->now();
$renewaltime->set_locale("ja_JP");
$feed->link($urls);
$feed->title("Livedoor鉄道運行情報 [".$renewaltime->strftime("%m/%d(%a) %H:%M")."更新]");
$feed->description("○:ほぼ平常通り、△:運転再開、遅れあり、×:運転見合わせ、運休");
my $list = $self->parse(Plagger::Util::load_uri(URI->new($urls)));
for my $item (@$list) {
my $entry = Plagger::Entry->new;
$entry->title($self->add_status($item->{body})." ".$item->{title}." [".$item->{hour}.":".$item->{min}."]");
$entry->body($item->{body});
$entry->date(Plagger::Date->strptime("%y%m%d%H%M", $ym.$item->{day}.$item->{hour}.$item->{min}));
$feed->add_entry($entry);
}
$context->update->add($feed);
}
sub parse {
my ($self, $content) = @_;
my $list = [];
while ($content =~ m{
<tr>
.*?<th.*?>(\d{2})/(\d{2}).(\d{2})\:(\d{2})</th>
.*?<td.*?>(.*?)</td>
.*?<td.*?>(.*?)</td>
.*?</tr>
}gsx) {
push @$list, {
month => $1,
day => $2,
hour => $3,
min => $4,
title => $5,
body => $6,
hm => $3.$4,
};
}
@$list = sort { $b->{hm} cmp $a->{hm} } @$list;
$list;
}
sub add_status {
my($self, $body) = @_;
my $status = "";
{
if ($body =~ /平常通り/) { $status = "○" ; last ; }
if ($body =~ /再開|遅れ|運転変更/) { $status = "△" ; last ; }
if ($body =~ /見合わせ|運休/) { $status = "×" ; last ; }
$status = " ";
}
$status;
}
1;
コメント
投稿者 : Izumi (at 2008.01.10 23:54)
トラックバックに加えコメントまで頂き、誠にありがとうございます。
また、野良プラグインを使って頂きありがとうございます。多少なりともお役に立てたようで嬉しく思っております。
今回提示して頂いた改造の内容ですが、洗練されていてイイですね。大変勉強になります。
これからも宜しくお願い致します。
コメント投稿