昨日までで、トピックのコメントまでは取得できるようになったが、後は未読管理をしないといけない。
そこで、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: 1
Publish::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

コメントする