WWW::Mixiが10/1のMixiのデザイン変更にまだ対応しないので、WWW::Mixi::Scraperを試してみる。
恥ずかしながら、初めてCPANを使ってインストール。portsを使わなくて、他のモジュールと喧嘩しないのかな。
で、対応する。CustomFeed::MixiScraperはCPANにはないようだったので、Charsbar::Note - Plagger::Plugin::CustomFeed::MixiScraperCommentsAdd Starからコピペ。
中を読んでみると、Bbsに対応していないっぽい。WWW::Mixi::ScraperはBbsを読んでいるっぽいので、修正してみる。
さらに、コミュニティ掲示板や日記のコメントにも対応していないようだったので、そっちも手を入れる。
ついでに、改行がなくなってしまうのもなんとかしたい。
ここまでやっても、コミュニティのアンケートには対応していないようだが、今回は面倒なので見送り。
まずは、改行対応(ここで良いのか?試せてない)。WWW::Mixi::Scraper::Plugin
恥ずかしながら、初めてCPANを使ってインストール。portsを使わなくて、他のモジュールと喧嘩しないのかな。
で、対応する。CustomFeed::MixiScraperはCPANにはないようだったので、Charsbar::Note - Plagger::Plugin::CustomFeed::MixiScraperCommentsAdd Starからコピペ。
中を読んでみると、Bbsに対応していないっぽい。WWW::Mixi::ScraperはBbsを読んでいるっぽいので、修正してみる。
さらに、コミュニティ掲示板や日記のコメントにも対応していないようだったので、そっちも手を入れる。
ついでに、改行がなくなってしまうのもなんとかしたい。
ここまでやっても、コミュニティのアンケートには対応していないようだが、今回は面倒なので見送り。
まずは、改行対応(ここで良いのか?試せてない)。WWW::Mixi::Scraper::Plugin
*** Plugin.pm.ORIG Sat Oct 6 11:08:29 2007
--- Plugin.pm Sat Oct 6 08:50:56 2007
***************
*** 51,57 ****
die "no content" unless $content;
# XXX: preserve some tags like <br>?
! $content =~ s/<br(\s[^>]*)?>/\n/g; # at least preserve as a space
$content =~ s/ / /g; # as it'd be converted as '?'
return $content;
--- 51,57 ----
die "no content" unless $content;
# XXX: preserve some tags like <br>?
! #$content =~ s/<br(\s[^>]*)?>/\n/g; # at least preserve as a space
$content =~ s/ / /g; # as it'd be converted as '?'
return $content;
続いて、掲示板のコメントの番号をsubjectに追加。WWW::Mixi::Scraper::Plugin::ViewBBS
*** ViewBBS.pm.ORIG Sat Oct 6 11:08:48 2007
--- ViewBBS.pm Sat Oct 6 08:41:25 2007
***************
*** 56,72 ****
$scraper{list} = scraper {
process 'dl.commentList01>dt[class="commentDate clearfix"]>span.date',
'times[]' => 'TEXT';
process 'dl.commentList01>dd>dl.commentContent01',
'comments[]' => $scraper{comments};
! result qw( times comments );
};
my $stash_c = $self->post_process($scraper{list}->scrape(\$html))->[0];
my @comments = @{ $stash_c->{comments} || [] };
my @times = @{ $stash_c->{times} || [] };
foreach my $comment ( @comments ) {
$comment->{time} = _datetime( shift @times );
$comment->{link} = _uri( $comment->{link} );
}
$stash->{comments} = \@comments;
--- 56,76 ----
$scraper{list} = scraper {
process 'dl.commentList01>dt[class="commentDate clearfix"]>span.date',
'times[]' => 'TEXT';
+ process 'dl.commentList01>dt[class="commentDate clearfix"]>span.senderId',
+ 'nums[]' => 'TEXT';
process 'dl.commentList01>dd>dl.commentContent01',
'comments[]' => $scraper{comments};
! result qw( times nums comments );
};
my $stash_c = $self->post_process($scraper{list}->scrape(\$html))->[0];
my @comments = @{ $stash_c->{comments} || [] };
my @times = @{ $stash_c->{times} || [] };
+ my @nums = @{ $stash_c->{nums} || [] };
foreach my $comment ( @comments ) {
$comment->{time} = _datetime( shift @times );
+ $comment->{subject} = $stash->{subject} . ":" . shift @nums;
$comment->{link} = _uri( $comment->{link} );
}
$stash->{comments} = \@comments;
そして、CustomFeed::MixiScraper。上記のほかに、timezoneの問題で既読管理がうまくいってなかったぽいのも対応。
*** MixiScraper.pm.ORIG Sat Oct 6 11:27:45 2007
--- MixiScraper.pm Sat Oct 6 11:29:20 2007
***************
*** 14,19 ****
--- 14,25 ----
icon => 'owner_id',
},
# can't get icon
+ Bbs => {
+ title => 'コミュニティ最新書き込み',
+ get_list => 'new_bbs',
+ get_detail => 'view_bbs',
+ },
+ # can't get icon
Message => {
title => 'ミクシィメッセージ受信箱',
get_list => 'list_message',
***************
*** 110,115 ****
--- 116,124 ----
$entry->link($msg->{link});
$entry->author($msg->{name});
$entry->date( Plagger::Date->parse($format, $msg->{time}) );
+ if ($entry->date) {
+ $entry->date->set_time_zone('Asia/Tokyo');
+ }
if ($self->conf->{show_icon} && !$blocked && defined $MAP->{$type}->{icon}) {
my $owner_id = $msg->{link}->query_param($MAP->{$type}->{icon});
***************
*** 136,144 ****
}
}
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 );
--- 145,155 ----
}
}
+ my $item = 0;
+
if ($self->conf->{fetch_body} && !$blocked && $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 );
***************
*** 161,166 ****
--- 172,180 ----
$entry->body($body);
$entry->date( Plagger::Date->parse($format, $item->{time}) );
+ if ($entry->date) {
+ $entry->date->set_time_zone('Asia/Tokyo');
+ }
} else {
$context->log(warn => "Fetch body failed. You might be blocked?");
$blocked++;
***************
*** 168,173 ****
--- 182,206 ----
}
$feed->add_entry($entry);
+
+ if ($item) {
+ for my $comment (@{ $item->{comments} || [] }) {
+ $entry = Plagger::Entry->new;
+ if ($comment->{subject}) {
+ $entry->title($comment->{subject});
+ } else {
+ $entry->title('comments for [' . $msg->{subject} . ']');
+ }
+ $entry->link($comment->{link});
+ $entry->author($comment->{name});
+ $entry->date( Plagger::Date->parse($format, $comment->{time}) );
+ if ($entry->date) {
+ $entry->date->set_time_zone('Asia/Tokyo');
+ }
+ $entry->body($comment->{description});
+ $feed->add_entry($entry);
+ }
+ }
}
$context->update->add($feed);
トラックバック(1)
このブログ記事を参照しているブログ一覧: WWW::Mixi::Scraper
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1203
» WWW::Mixi::Scraper 0.08(PC日記)~のトラックバック
WWW::Mixi::Scraper 0.08対応patch 続きを読む

上のPlugin.pmへのpatchではbrは消えたままだった。
本家の方で、WWW::Mixi::Scraper 0.08がリリースされたようで、そちらではTEXTではなくHTMLベースになったようなので、おとなしくミラーリングされるのを待つことにしよう。