カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

Plagger::Plugin::Subscription::Config::File

概要: メタデータが指定できるSubscription::File


PlaggerでWebアンテナ作るのに一行一URLのファイルで購読サイトを管理するのが便利なので、 Subscription::File使ってたんだけど、メタデータ付加できないよー、と言うことで適当にでっち上げた。

package Plagger::Plugin::Subscription::Config::File;
use strict;
use warnings;
use base qw( Plagger::Plugin::Subscription::Config );
sub load {
    my ( $self, $context ) = @_;
    my $uri = URI->new( $self->conf->{file} )
      or $context->error("config 'file' is missing");
    $uri->scheme('file') unless $uri->scheme;
    my @urls= ();
    for ( split /\n/, Plagger::Util::load_uri($uri)) {
        s/\#.*//;
        next if /^\s*$/;
        push @urls, $_;
    }
    my $feeds = [];
    for my $url ( @urls ) {
        my $data = {};
        $data->{'url'}  = $url;
        $data->{'meta'} = $self->conf->{'meta'};
        $data->{'tag'}  = $self->conf->{'tag'};
        push @{ $feeds }, $data;
    }
    $self->conf->{'feed'} = $feeds;
    shift @_;
    $self->SUPER::load( @_ );
}
1;
__END__

Subscription::Fileの改変物なので、ライセンスはSubscription::Fileと同じくPerlのライセンスで。

設定はこんな感じ

plugins:
  - module: Subscription::Config::File
    config:
      file: /path/to/uri/list.txt
      meta:
        name: value
      tag:
        - foo
        - bar
        - baz

fileには一行一URLが書かれたテキストファイルを指定、 metatagはファイルで指定されたすべてのURLに適用される。

最近アップしてるプラグインはPlaggerでアンテナ作るためだったりする。 具体的には、

  • Subscription::XPath::Config
  • Filter::ForceDate
  • Filter::SortEntries
  • Publish::Template

あたり。

他にも(といっても2個ぐらい)アンテナ作るために作ったプラグインはあるんだけど、 コードがちょっと微妙なので公開は多分しない。 まあ、ちょっとした問題に対してアドホックに対処するためのプラグインとかあるし。

っていうかテスト書いてない……。