[僕] CustomFeed::HatenaDiaryRSS

僕ト云フ事

たろマークはてなブックマーク

2006年06月03日

[plagger] CustomFeed::HatenaDiaryRSS

はてなダイアリを private mode で使ってる友達がいて、それも plagger で読めたらいいよね、ということで作ってみた。


package Plagger::Plugin::CustomFeed::HatenaDiaryRSS;
 
use strict;
use warnings;
use base qw( Plagger::Plugin );
use WWW::Hatena::Scraper;
use XML::Feed;
 
sub register {
    my ( $self, $context ) = @_;
    $context->register_hook( $self, 'subscription.load' => \&load, );
}
 
sub load {
    my ( $self, $context ) = @_;
    my $feed = Plagger::Feed->new;
    $feed->aggregator( sub { $self->aggregate(@_) } );
    $context->subscription->add($feed);
}
 
sub aggregate {
    my ( $self, $context, $args ) = @_;
    my $whs = WWW::Hatena::Scraper->new;
 
    my $username = $self->conf->{username};
    my $password = $self->conf->{password};
 
    $whs->login( $self->conf->{username}, $self->conf->{password} )
      or $context->log( warn => "Hatena login failed" );
 
    my $content = $whs->get_content("http://d.haetna.ne.jp/");
    my $rk      = $whs->rk;
    my $whs2    = WWW::Hatena::Scraper->new;
    $whs2->login($rk)
      or $context->log( warn => "Cookie is invalid or expired!" );
 
    my $uri = 'http://d.hatena.ne.jp/' . $self->conf->{target} . '/rss';
    $content = $whs->get_content($uri);
 
    my $datas = eval { XML::Feed->parse( \$content ) };
    unless ($datas) {
        $context->log( error => "Error loading feed $uri: "
              . ( $@ || XML::Feed->errstr ) );
        return;
    }
    my $feed = Plagger::Feed->new;
    $feed->type('hatena-diary');
    $feed->title( $datas->title );
    $feed->link($uri);
 
    for my $data ( $datas->entries ) {
        my $url = $data->link or next;
 
        my $entry = Plagger::Entry->new;
        $entry->title( $data->title );
        $entry->link( $data->link );
        $entry->author( $data->author );
        $entry->body( $data->content->body );
 
        $feed->add_entry($entry);
    }
    $context->update->add($feed);
}
 
1;

yaml はこんな感じ。


  - module: CustomFeed::HatenaDiaryRSS
    config:
      username: your id
      password: your password
      target: target id

もちろん、id で許可されてないと読めません。

これちょっと変えるとはてブでも使えたりするんだけど、モジュール名がいい名前浮かばなかったので('-';)
CustomFeed::HatenaRSS だと、はてな RSS ?とか思っちゃうし。あー、ターゲットをリストできるといいよね。何より同じ事してる plugin がないか心配w

ちなみにあちこち参考にさせていただきました。あちこち参考にしすぎてそれと言えなくなってます(;'-')
WWW::Hatena::Scraper の部分は、Synopsis まんま('-';)

追記

miyagawa さんから反応いただきました。

subtechグループ - Bulknews::Subtech - [Plagger] RSS with Authentication

はてなダイアリにログインした状態の Cookie ファイルをつくって (firefox か w3m など)
(省略)で、できるはず。

Cookies について理解してませんでした(;'-')
また無駄な苦労を orz

blog comments powered by Disqus