SweetPotato::Plagger このページをアンテナに追加 RSSフィード

2007-04-11

[] CustomFeed::FeedAsEntry  CustomFeed::FeedAsEntry - SweetPotato::Plagger を含むブックマーク はてなブックマーク -  CustomFeed::FeedAsEntry - SweetPotato::Plagger  CustomFeed::FeedAsEntry - SweetPotato::Plagger のブックマークコメント

各フィードに,そのフィードと同じURLとタイトルを持つエントリを追加する。

Plagger/Plugin/CustomFeed/FeedAsEntry.pm

package Plagger::Plugin::CustomFeed::FeedAsEntry;
use strict;
use base qw( Plagger::Plugin );

sub register {
    my ($self, $context) = @_;
    $context->register_hook(
        $self,
        'customfeed.handle' => \&aggregate,
    );
}

sub aggregate {
    my ($self, $context, $args) = @_;
    my $entry = Plagger::Entry->new;
    $entry->link($args->{feed}->url);
    $entry->title($args->{feed}->title);
    $args->{feed}->add_entry($entry);
    $context->update->add($args->{feed});
    return 1;
}

1;

経緯

Subscription::WWWC + EFT + Filter::Diffで似非はてなアンテナ作れそうじゃん」と思ってとりかかったものの,RSSやAtomを持たないページが途中で「~ is not aggregated by any aggregator」というメッセージとともにごっそりと削除される壁にぶちあたった。

Plaggerのソースを見たら,customfeed.handleフェーズの段階でどのモジュールにも処理されずエントリが生成されなかったフィードは削除されてしまうことが分かった。RSSやAtomを持つページはデフォルトでAggregator::Simpleが処理してくれたけど,そうでない普通のページは削除されてしまっていたわけだ。

「じゃあcustomfeed.handleフェーズで無理矢理エントリを追加しなきゃならんのか」ということで作られたのがこのプラグイン。他に使い道は……あまりなさそうだなあ。

トラックバック - http://plagger.g.hatena.ne.jp/SweetPotato/20070411