Hobbit / Big Brother のイベントサマリー画面(bb2.html) を読む Feed。サーバ監視のお供に。
status red はメールが飛んでくるからすぐ分かるのだけど、status yellow (軽微な障害) は見落としがちなので。
一応、以下の3つで動作確認。
package Plagger::Plugin::CustomFeed::Hobbit; use strict; use base qw( Plagger::Plugin ); use Plagger::Date; use Plagger::UserAgent; use Plagger::Util qw( decode_content ); use HTML::TokeParser; sub register { my ( $self, $context ) = @_; $context->register_hook( $self, 'subscription.load' => \&load, ); } sub load { my ( $self, $context ) = @_; my $feed = Plagger::Feed->new; $feed->aggregator( sub { $self->aggregate(@_) } ); $context->subscription->add($feed); } sub aggregate { my ( $self, $context, $args ) = @_; my $url = $self->conf->{url}; $context->log( info => "GET $url" ); my $agent = Plagger::UserAgent->new; my $res = $agent->fetch( $url, $self ); if ( $res->http_response->is_error ) { $context->log( error => "GET $url failed: " . $res->status ); return; } my $content = decode_content($res); my $parser = HTML::TokeParser->new( \$content ); $parser->get_tag('title'); my ( $title, $date ) = split /\s+\@\s+/, $parser->get_trimmed_text, 2; my $feed = Plagger::Feed->new; $feed->title($title); $feed->link($url); $feed->updated( Plagger::Date->parse_dwim($date) ); $context->log( debug => qq{title: $title, link: $url, updated: $date} ); while( my $token = $parser->get_tag('table') ){ my $summary = $token->[1]->{summary}; if( $summary =~ /events?/i ){ $parser->get_tag('tr'); $feed->description( $parser->get_trimmed_text('tr') ); last; } } $context->log( debug => "description: ". $feed->description ); while ( $parser->get_tag('tr') ) { my $entry = Plagger::Entry->new; $parser->get_tag('td'); # date $entry->date( Plagger::Date->parse_dwim( $parser->get_trimmed_text('td') ) ); $parser->get_tag('td'); # host my $host = $parser->get_trimmed_text('td'); $parser->get_tag('td'); # type my $type = $parser->get_trimmed_text('td'); my $link = $parser->get_tag('a'); # from next unless $link->[1]->{href} =~ /bb-histlog/; my $from = $parser->get_tag('img')->[1]->{alt}; # from img $link = $parser->get_tag('a'); next unless $link->[1]->{href} =~ /bb-histlog/; $entry->link( URI->new_abs( $link->[1]->{href}, $url ) ); my $to = $parser->get_tag('img')->[1]->{alt}; # to img $entry->title("$host:$type [$from]->[$to]"); $context->log( debug => sprintf("%s %s", $entry->title, $entry->date ) ); $feed->add_entry($entry); } $context->update->add($feed); return 1; } 1; __END__ =head1 NAME Plagger::Plugin::CustomFeed::Hobbit - Custom feed for Hobbit / BigBrother =head1 SYNOPSIS - module: CustomFeed::Hobbit config: url: http://example.com/hobbit/bb2.html =head1 AUTHOR FUJIWARA Shunichiro <fujiwara at topicmaker.com> =head1 SEE ALSO L<Plagger> =cut