PlaggerでRSS to RSSフィルタを作る

この日記のサイドバーに表示している「最近のブックマーク」「最近の被ブックマークコメント」は表示を調整するためにCGIRSSを整形している(ref. ヒビノキロク - サイドバーのブックマーク)。これを試しにPlaggerを使ってやってみたら、とても簡単にできた。

  • 最近のブックマーク用
package Plagger::Plugin::Filter::HatenaBookmark;

use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'update.entry.fixup' => \&filter,
    );
}

sub filter {
    my($self, $context, $args) = @_;

    my $summary = $args->{entry}->{summary};
    my $tags = $args->{entry}->{tags};

    my $body = join('', map { "[$_]" } @{$tags}) . $summary;
    $args->{entry}->{body} = Plagger::Text->new(type => 'text', data => $body);
}

1;
plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://b.hatena.ne.jp/nozom/rss

  - module: Filter::HatenaBookmark

  - module: Publish::Feed
    config:
      format: RSS
      dir: /var/www/html/
      filename: recent-bookmark.rss
  • 最近の被ブックマークコメント用
package Plagger::Plugin::Filter::HatenaBookmarkComment;

use strict;
use base qw( Plagger::Plugin );

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'update.entry.fixup' => \&filter,
    );
}

sub filter {
    my($self, $context, $args) = @_;

    my $summary = $args->{entry}->{summary};
    my $tags = $args->{entry}->{tags};
    my $id = $args->{entry}->{author};

    my $body = join('', map { "[$_]" } @{$tags}) . $summary . ' by id:' . $id;
    $args->{entry}->{body} = Plagger::Text->new(type => 'text', data => $body);
}

1;
plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://b.hatena.ne.jp/bookmarklist?mode=rss&url=http://d.hatena.ne.jp/nozom/

  - module: Filter::HatenaBookmarkComment

  - module: Publish::Feed
    config:
      format: RSS
      dir: /var/www/html/
      filename: recent-bookmarked.rss

モジュール名はあまりいい名前が思いつかなかったので適当。