[Plagger] 列車運行情報をPublishしてみる(続編)
package Plagger::Plugin::CustomFeed::LDTraffic;yamlはこんな感じにしています。
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 $sec = "0";
my $urls = $self->conf->{url};
my $feed = Plagger::Feed->new;
$feed->link($urls);
$feed->title("鉄道運行情報");
my $list = $self->parse(Plagger::Util::load_uri(URI->new($urls)));
for my $item (@$list) {
my $entry = Plagger::Entry->new;
if( $item->{body} =~ /運転を再開しました/ ) {
$entry->title($item->{title}."【運転再開】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /遅れが出ています/ ) {
$entry->title($item->{title}."【列車遅延】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /運転を見合わせています/ ) {
$entry->title($item->{title}."【運転見合わせ】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /平常通り運転しています/ ) {
$entry->title($item->{title}."【平常運転】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /一部列車に運休が出ています/ ) {
$entry->title($item->{title}."【一部運休】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /運転変更が出ています/ ) {
$entry->title($item->{title}."【運転変更】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} elsif( $item->{body} =~ /遅れや運休が出ています/ ) {
$entry->title($item->{title}."【運休・遅延】(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
} else {
$entry->title($item->{title}."(".$item->{month}."/".$item->{day}." ".$item->{hour}.":".$item->{min}.")");
}
$entry->body($item->{body});
$entry->link($urls);
$sec = (length($entry->title) + length($entry->body)) % 60; ←Publish::Twitter対策
$entry->date(Plagger::Date->strptime("%y%m%d%H%M%S", $ym.$item->{day}.$item->{hour}.$item->{min}.$sec));
$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,
};
}
$list;
}
=head1 NAME
Plagger::Plugin::CustomFeed::LDTraffic - Custom feed for livedoor traffic information
=head1 SYNOPSIS
- module: CustomFeed::LDTraffic
config:
url: http://transit.livedoor.com/traffic_info/kantou
=head1 DESCRIPTION
=head1 AUTHOR
=head1 SEE ALSO
L<Plagger>
=cut
1;
plugins:
- module: CustomFeed::LDTraffic
config:
url: http://transit.livedoor.com/traffic_info/kantou
- module: Filter::Rule
rule:
module: Deduped
compare_body: 1
- module: Publish::Twitter
config:
username: Twitterのユーザ名
password: Twitterのパスワード
このエントリーのトラックバックURL:
http://www.simazaki.com/~izumi/cgi-bin/tt-cgi/tt_tb.cgi/537
以前2chdat.pmを変更してから小変更を何度か経て、そのまま運用していた。 特に問題は出ていないように見えたが、Livedoor列車運行情報に特化しすぎていて少しもやもやしていた。 そんな中、Livedoor列車運行情報C...
雑記 : 2008年1月10日 09:38
はじめまして、トラックバックをいただきありがとうございました。
前回に引き続き、今回も参考にさせていただきました。
今後もよろしくお願いします。
ちなみに、MSN アラートで列車運行情報をメールで受けることもできるようです。
http://alerts.msn.co.jp/
ご存知でしたらすみません。
投稿者 まるひ : 2008年1月10日 12:36
トラックバックと共にコメントまで頂き、ありがとうございます。
野良プラグインを使って頂いているのを見つけて、おもわずトラックバックしてしまいました。
改良版プラグインも拝見しました。勉強になります。
今後とも宜しくお願いします。
>ちなみに、MSN アラートで列車運行情報をメールで受けることもできるようです。
こちらのサービスは知りませんでした。MSNもなかなかですね。ご教示ありがとうございます。
投稿者 Izumi : 2008年1月10日 23:43