概要: Feed か Entry の URL の一覧を出力する。
Plagger に登録されたエントリの URL 一覧を出力したい、と言うことで作ってみた。
package Plagger::Plugin::Publish::File;
use strict;
use warnings;
use base qw(Plagger::Plugin);
use Array::Uniq qw(uniq);
sub init {
my $self = shift;
$self->SUPER::init(@_);
$self->{'url'} = [];
}
sub register {
my ( $self, $c ) = @_;
$c->register_hook(
$self,
'publish.entry' => $self->can('add'),
'publish.finalize' => $self->can('publish'),
);
}
sub add {
my ( $self, $c, $args ) = @_;
if ( $self->conf->{'entry_url'} ) {
push @{ $self->{'url'} }, $args->{'entry'}->link;
}
else {
push @{ $self->{'url'} }, $args->{'feed'}->url;
}
}
sub publish {
my ( $self, $c ) = @_;
my $out = q{};
for my $url ( uniq sort { $a cmp $b } @{ $self->{'url'} } ) {
$out .= "$url\n";
}
my $path = $self->conf->{'filename'};
$c->log(info => "writing output to $path");
open my $fh, ">:utf8", $path or $c->error("$path: $!");
print $fh $out;
close $fh;
}
1;
__END__
ライセンスは Perl と同等で、設定はこんな感じ。
plugins:
- module: Subscription::Config
config:
feed: http://nyarla.net/blog
- module: Publish::File
config:
entry_url: 1
filename: /path/to/entry_list.txt
設定のentry_url
を真に設定すると Plagger に登録されたすべての エントリ の URL を、
逆に偽に設定すると フィード の URL の一覧を出力する。
SBM からのオートディスカバリをやろうと思ったものの、Plagger のエントリの URL 一覧を 取得できそうなのが見つからなかったため作ってみた次第。 あとこのプラグインで出力したファイルは Subscription::File で購読できると思う。
あとで SBM からのオートディスカバリをやってみる。
追記
一部修正。たぶん直ったはず。
#FIXME