Changeset 465

Show
Ignore:
Timestamp:
04/01/06 22:16:18
Author:
tokuhirom
Message:

r1124@tance: tokuhirom | 2006-04-01 21:48:54 +0900

CustomFeed?
Mixi : pluggable interface.and, support Message, RecentComment?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Plugin/CustomFeed/Mixi.pm

    r459 r465  
    77use WWW::Mixi; 
    88use Time::HiRes; 
     9 
     10our $MAP = { 
     11    FriendDiary => { 
     12        start_url  => 'http://mixi.jp/new_friend_diary.pl', 
     13        title      => 'マイミク最新日記', 
     14        get_list   => 'parse_new_friend_diary', 
     15        get_detail => 'get_view_diary', 
     16        icon_re    => qr/owner_id=(\d+)/, 
     17    }, 
     18    # can't get icon 
     19    Message => { 
     20        start_url  => 'http://mixi.jp/list_message.pl', 
     21        title      => 'ミクシィメッセージ受信箱', 
     22        get_list   => 'parse_list_message', 
     23        get_detail => 'get_view_message', 
     24    }, 
     25    # can't get icon & body 
     26    RecentComment => { 
     27        start_url  => 'http://mixi.jp/list_comment.pl', 
     28        title      => 'ミクシィ最近のコメント一覧', 
     29        get_list   => 'parse_list_comment', 
     30        icon_re    => qr/[^_]id=(\d+)/, 
     31    }, 
     32}; 
    933 
    1034sub plugin_id { 
     
    3357sub aggregate { 
    3458    my($self, $context, $args) = @_; 
    35  
    36     my $start_url = 'http://mixi.jp/new_friend_diary.pl'; 
     59    for my $type (@{$self->conf->{feed_type} || ['FriendDiary']}) { 
     60        $context->error("$type not found") unless $MAP->{$type}; 
     61        $self->aggregate_feed($context, $type, $args); 
     62    } 
     63
     64sub aggregate_feed { 
     65    my($self, $context, $type, $args) = @_; 
     66 
     67    my $start_url = $MAP->{$type}->{start_url}; 
    3768    my $response  = $self->{mixi}->get($start_url); 
    3869 
     
    5889    my $feed = Plagger::Feed->new; 
    5990    $feed->type('mixi'); 
    60     $feed->title('マイミクシィ最新日記'); 
    61     $feed->link('http://mixi.jp/new_friend_diary.pl'); 
     91    $feed->title($MAP->{$type}->{title}); 
     92    $feed->link($MAP->{$type}->{start_url}); 
    6293 
    6394    my $format = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d %H:%M'); 
    6495 
    65     my @msgs = $self->{mixi}->parse_new_friend_diary($response); 
     96    my $meth = $MAP->{$type}->{get_list}; 
     97    my @msgs = $self->{mixi}->$meth($response); 
    6698    my $items = $self->conf->{fetch_items} || 20; 
     99    $self->log(info => 'fetch ' . scalar(@msgs) . ' entries'); 
    67100 
    68101    my $i = 0; 
    69102    my $blocked = 0; 
    70103    for my $msg (@msgs) { 
    71         next unless $msg->{image}; # external blog 
     104        next if $type eq 'friend_diary' and not $msg->{image}; # external blog 
    72105        last if $i++ >= $items; 
    73106 
     
    78111        $entry->date( Plagger::Date->parse($format, $msg->{time}) ); 
    79112 
    80         if ($self->conf->{show_icon} && !$blocked) { 
    81             my $owner_id = ($msg->{link} =~ /owner_id=(\d+)/)[0]; 
     113        if ($self->conf->{show_icon} && !$blocked && defined $MAP->{$type}->{icon_re}) { 
     114            my $owner_id = ($msg->{link} =~ $MAP->{$type}->{icon_re})[0]; 
    82115            my $link = "http://mixi.jp/show_friend.pl?id=$owner_id"; 
    83116            $context->log(info => "Fetch icon from $link"); 
     
    104137        } 
    105138 
    106         if ($self->conf->{fetch_body} && !$blocked && $msg->{link} =~ /view_diary/) { 
     139        if ($self->conf->{fetch_body} && !$blocked && $msg->{link} =~ /view_/ && defined $MAP->{$type}->{get_detail}) { 
    107140            $context->log(info => "Fetch body from $msg->{link}"); 
    108141            my $item = $self->cache->get_callback( 
     
    110143                sub { 
    111144                    Time::HiRes::sleep( $self->conf->{fetch_body_interval} || 1.5 ); 
    112                     my($item) = $self->{mixi}->get_view_diary($msg->{link}); 
     145                    my $meth = $MAP->{$type}->{get_detail}; 
     146                    my($item) = $self->{mixi}->$meth($msg->{link}); 
    113147                    $item; 
    114148                },