昨日までで、トピックのコメントまでは取得できるようになったが、後は未読管理をしないといけない。
そこで、Filterのソースでも参考にしようと思って、Filterディレクトリの下を眺めていたら、Rule.pmって言うのがあって、そこのサンプルを見ると、Freshって言うモジュールで日時ベースでの未読管理は実現できていそうだ。
config.yamlを見直して、Publish::Gmailのrule: に書いていた部分を、Filter::Ruleに持ってきてみたら、ちゃんと一度メールしたものは送られないようになった。
後は、上のルールを有効にすると、コメントだけが送られてトピックが送られないことが多いので、昨日の改造だとコメント番号をtitleにしているので読みにくい。そこで、最終的にCustomFeed::Mixiを以下のようにした。
そこで、Filterのソースでも参考にしようと思って、Filterディレクトリの下を眺めていたら、Rule.pmって言うのがあって、そこのサンプルを見ると、Freshって言うモジュールで日時ベースでの未読管理は実現できていそうだ。
config.yamlを見直して、Publish::Gmailのrule: に書いていた部分を、Filter::Ruleに持ってきてみたら、ちゃんと一度メールしたものは送られないようになった。
- module: Filter::Rule rule: - module: Fresh mtime: path: /tmp/foo.tmp autoupdate: 1Publish::Gmailのソースを読んでも、rule:も効きそうに思えるんだけど、良くわからないけどFileter::Ruleで効くので良いことにする。
後は、上のルールを有効にすると、コメントだけが送られてトピックが送られないことが多いので、昨日の改造だとコメント番号をtitleにしているので読みにくい。そこで、最終的にCustomFeed::Mixiを以下のようにした。
*** Mixi.pm.ORIG Fri Jan 5 23:14:14 2007 --- Mixi.pm Sat Jan 6 22:11:05 2007 *************** *** 48,53 **** --- 48,62 ---- get_list => 'parse_show_calendar', get_detail => 'get_view_event', }, + Bbs => { + start_url => 'http://mixi.jp/new_bbs.pl', + title => 'コミュニティ最新書き込み', + get_list => 'parse_new_bbs', + get_detail => 'dummy', + get_detail_bbs => 'get_view_bbs', + get_detail_event => 'get_view_event', + get_detail_enquete => 'get_view_enquete', + }, }; sub plugin_id { *************** *** 134,139 **** --- 143,149 ---- my $i = 0; my $blocked = 0; + my $item; for my $msg (@msgs) { next if $type eq 'FriendDiary' and not $msg->{image}; # external blog last if $i++ >= $items; *************** *** 170,182 **** } } ! if ($self->conf->{fetch_body} && !$blocked && $msg->{link} =~ /view_/ && defined $MAP->{$type}->{get_detail}) { $context->log(info => "Fetch body from $msg->{link}"); ! my $item = $self->cache->get_callback( "item-$msg->{link}", sub { Time::HiRes::sleep( $self->conf->{fetch_body_interval} || 1.5 ); ! my $meth = $MAP->{$type}->{get_detail}; my($item) = $self->{mixi}->$meth($msg->{link}); if ($meth eq 'get_view_diary') { --- 180,196 ---- } } ! $item = 0; ! ! if ($self->conf->{fetch_body} && !$blocked && $msg->{link} !~ /view_enquete/ &&$msg->{link} =~ /view_/ && defined $MAP->{$type}->{get_detail}) { $context->log(info => "Fetch body from $msg->{link}"); ! $item = $self->cache->get_callback( "item-$msg->{link}", sub { Time::HiRes::sleep( $self->conf->{fetch_body_interval} || 1.5 ); ! # my $meth = $MAP->{$type}->{get_detail}; ! my $meth = get_meth($MAP->{$type}, $msg->{link}); ! my($item) = $self->{mixi}->$meth($msg->{link}); if ($meth eq 'get_view_diary') { *************** *** 207,212 **** --- 221,229 ---- } $feed->add_entry($entry); + if ($item) { + add_comments($feed, $item); + } } $context->update->add($feed); *************** *** 221,226 **** --- 238,274 ---- } return \@images; + } + sub get_meth { + my($type, $link) = @_; + + my $meth = ""; + if ($link =~ /view_bbs/) { + $meth = $type->{get_detail_bbs}; + } elsif ($link =~ /view_event/) { + $meth = $type->{get_detail_event}; + } elsif ($link =~ /view_enquete/) { + $meth = $type->{get_detail_enquete}; + } else { + $meth = $type->{get_detail}; + } + return $meth; + } + + sub add_comments { + my ($feed, $item) = @_; + my $format = DateTime::Format::Strptime->new(pattern => '%Y/%m/%d %H:%M'); + if ($item->{'comments'}) { + for my $comment (@{$item->{'comments'}}) { + my $entry = Plagger::Entry->new; + $entry->title(decode('euc-jp', $item->{'subject'}) . ": " . $comment->{'number'}); + $entry->link($comment->{'link'}); + $entry->author( decode('euc-jp', $comment->{'name'}) ); + $entry->date( Plagger::Date->parse($format, $comment->{'time'}) ); + $entry->body( decode('euc-jp', $comment->{'description'}) ); + $feed->add_entry($entry); + } + } } 1;これで、1時間置きにでもcronに仕込めば、gmailで未読が読めるようになりました。
カテゴリ
Plaggerトラックバック(0)
このブログ記事を参照しているブログ一覧: mixiのコミュニティ新着の取得(その2)
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1121
コメントする