Plagger::Plugin::Subscription::DeliciousInbox

いらなくなりました!ヽ(´ー`)ノやったぜ!
del.icio.usのinboxの更新があまりに遅いのでやっつけた。TT? 何それ? 当然del.icio.us側の更新が早くなればいらなくなります。Publish::Planetのdel.icio.us風skinは気が向いたら作ります。jが頭に付く人はPPP::HatenaBookmarkに流し込むと幸せになります。
酔っぱらいのコードなので明日にでも変数名とか見直そう…。多少見直した。あとdel.icio.us風というかコピペのskinもあるけど、PPP::Planetの日本語対応ができてないっぽい+この数日で直りそうな予感なのでこっちは放置。PPP::Planetはサニタイズ放棄すれば通ります。

DeliciousInbox.pm

package Plagger::Plugin::Subscription::DeliciousInbox;
use strict;
use base qw( Plagger::Plugin );

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

    $context->register_hook(
        $self,
        'subscription.load' => \&load,
    );
}

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

    my $inbox_list = $self->conf->{inbox};
       $inbox_list = [ $inbox_list ] unless ref $inbox_list;

    for my $config (@$inbox_list) {
        if (!ref($config)) {
            $config = { url => $config };
        }
        
        for my $fav (@{$self->extract($config->{url})}) {        
            my $feed = Plagger::Feed->new;
            
            $feed->url($fav) or $context->error("Feed URL is missing");
            $context->subscription->add($feed);
        }
    }
}

sub extract {
    my($self, $url) = @_;
    
    my $ua = Plagger::UserAgent->new;
    my $res = $ua->fetch($url);
    
    if ($res->is_error) {
        Plagger->context->log(error => "Error fetching $url");
        return;
    }
    
    my @result;
    
    for my $fav_id ($res->content =~ m|<div>&nbsp;&nbsp;<a href\=\"http://del\.icio\.us/([^\"]+)\">.*?</a>|gim) {
        push @result, "http://del.icio.us/rss/$fav_id";
    }
    
    return \@result;
}

1;

config.yaml

global:
  plugin_path: 
    - /Users/ec/lib/Plagger/Plugin
  timezone: Asia/Tokyo

plugins:
  - module: Subscription::DeliciousInbox
    config:
      inbox:
        - url: http://del.icio.us/inbox/fuba

  - module: Aggregator::Simple
  
  - module: Filter::DeliciousFeedTags
 
  - module: SmartFeed::All
    rule:
      module: Fresh
      duration: 3600
    config:
      title: fuba

  - module: Publish::Planet
    rule:
      expression: $args->{feed}->id eq 'smartfeed:all'
    config:
      assets_path: /Users/ec/lib/Plagger/Template/plugins/publish-planet
      dir: /Users/ec/Sites/planet/
      skin: delicious
      template:
        members_list: 0

  - module: Publish::Feed
    rule:
      expression:  $args->{feed}->id eq 'smartfeed:all'
    config:
      dir: /Users/ec/Sites/planet