Changeset 465
- Timestamp:
- 04/01/06 22:16:18
- trunk/plagger (modified) (previous)
- trunk/plagger/lib/Plagger/Plugin/CustomFeed/Mixi.pm (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plagger/lib/Plagger/Plugin/CustomFeed/Mixi.pm
r459 r465 7 7 use WWW::Mixi; 8 8 use Time::HiRes; 9 10 our $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 }; 9 33 10 34 sub plugin_id { … … 33 57 sub aggregate { 34 58 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 } 64 sub aggregate_feed { 65 my($self, $context, $type, $args) = @_; 66 67 my $start_url = $MAP->{$type}->{start_url}; 37 68 my $response = $self->{mixi}->get($start_url); 38 69 … … 58 89 my $feed = Plagger::Feed->new; 59 90 $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}); 62 93 63 94 my $format = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d %H:%M'); 64 95 65 my @msgs = $self->{mixi}->parse_new_friend_diary($response); 96 my $meth = $MAP->{$type}->{get_list}; 97 my @msgs = $self->{mixi}->$meth($response); 66 98 my $items = $self->conf->{fetch_items} || 20; 99 $self->log(info => 'fetch ' . scalar(@msgs) . ' entries'); 67 100 68 101 my $i = 0; 69 102 my $blocked = 0; 70 103 for my $msg (@msgs) { 71 next unless$msg->{image}; # external blog104 next if $type eq 'friend_diary' and not $msg->{image}; # external blog 72 105 last if $i++ >= $items; 73 106 … … 78 111 $entry->date( Plagger::Date->parse($format, $msg->{time}) ); 79 112 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]; 82 115 my $link = "http://mixi.jp/show_friend.pl?id=$owner_id"; 83 116 $context->log(info => "Fetch icon from $link"); … … 104 137 } 105 138 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}) { 107 140 $context->log(info => "Fetch body from $msg->{link}"); 108 141 my $item = $self->cache->get_callback( … … 110 143 sub { 111 144 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}); 113 147 $item; 114 148 },
