Plagger::Plugin::Publish::iPodNotes

実は結構前から Plagger で取得した RSS を iPod の Notes で読むプラグインを自分で作って使ってるのですが、昨日の YAPC::Asia 初日の Plagger の session で、まだ iPod の Notes に書き出す Plugin がないということを知ったので、ちょっと恥ずかしいのですが拙作をここに晒しておきます。

iPodNotes.pm

package Plagger::Plugin::Publish::iPodNotes;
use strict;
use base qw( Plagger::Plugin );

use File::Spec;
use iPod::Notes;

our $VERSION = '0.01';

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

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

    my $cfg  = $self->conf;
    my $feed = $args->{feed};
    my $url  = $feed->{url};
    $url =~ s![:/\.\&\?]!_!g;

    my $article_name = File::Spec->catfile( 'Blogs', $url );

    my $i;
    my $index;
    for my $entry ( @{ $feed->{entries} } ) {

        my $article_num = sprintf "%03d", $i++;
        my $note = iPod::Notes->new(
            Title     => $article_num,
            Docpath   => $article_name,
            Content   => $entry->body,
            NotesPath => $cfg->{notes_path},
            Debug     => $cfg->{debug},
        );
        $note->write;

        $index .= sprintf "<a href=\"%s/%s\">* </a>%s\n", $article_name,
            $article_num, $entry->title;
    }

    my $note = iPod::Notes->new(
        Title   => $feed->title,
        Content => $index,
    );
    $note->write;

    return 1;
}

1;

この中で使っている
iPod::Notes
というのも自作で、CPAN には登録していないのでここに晒しておきます。 RSS 以外のテキストファイルを iPod に転送するために使ってるんですけど、

  1. Plagger::Plugin::Publish::iPodNotes
  2. iPod::Notes

iPod::Notes は WindowsXP + cygwin + perl5.8.7 + iPod photo で正常に動作していることを確認しています。昔 ActivePerl でも動いてたんですけど、いまは知りません。

CPAN って登録したことないんだけど、iPod の Notes って iPod の version によって細かく違うみたいだし、今は全て utf8 に強制変換してるし、こんなものを登録してもいいのかなあ?(あと、名前が良くないとか)

ああ、あと config.yaml が必要ですね。

  - module: Publish::iPodNotes
    config:
      debug: 1
      notes_path:
        - cygdrive
        - f
        - Notes

こんなのを config.yaml に追加してください。debug はなくても全然構わないけど。notes_path は mount している iPod の Notes ディレクトリまでの path です。

もう出発しないと YAPC::Asia 2日目に間に合わないな。それでは会場で。