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
*** 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/&nbsp;/ /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/&nbsp;/ /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 続きを読む

コメント(1)

false :

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

コメントする

このブログ記事について

このページは、falseが2007年10月 6日 11:09に書いたブログ記事です。

ひとつ前のブログ記事は「MT4のコメントにGravatarのアバターを表示」です。

次のブログ記事は「WWW::Mixi::Scraper 0.08」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1