otsune's SnakeOil RSSフィード

python -c "print''.join([chr(x) for x in 111&1101,110+~-~11,10^11*11,110+~-~11,-~101,-~11^11*11,~-110,111&11*11,11+11+10,11|~-0110,1-~11^11*11,10^11*11,-~11^11*11,110,101])"

2007-04-23

CustomFeed::Frepaのエラーを修正

| CustomFeed::Frepaのエラーを修正 - otsune's SnakeOil  を含むブックマーク はてなブックマーク - CustomFeed::Frepaのエラーを修正 - otsune's SnakeOil  CustomFeed::Frepaのエラーを修正 - otsune's SnakeOil  のブックマークコメント

FreeBSDでは数ヶ月ほど前から。Mac OS Xマシンでは(たぶん)cpan updateしてから動作しなくなっていたCustomFeed::Frepaだけど。単にMechanizeからの->contentをdecodeしなければエラーが出なくなった。

=== lib/Plagger/Plugin/CustomFeed/Frepa/FriendDiary.pm
==================================================================
--- lib/Plagger/Plugin/CustomFeed/Frepa/FriendDiary.pm	(revision 1853)
+++ lib/Plagger/Plugin/CustomFeed/Frepa/FriendDiary.pm	(local)
@@ -15,7 +15,8 @@
     my $res = $mech->get($self->start_url);
     return @msgs unless $mech->success;
 
-    my $html = decode('euc-jp', $mech->content);
+    my $content = $mech->content;
+    my $html = Encode::is_utf8($content) ? $content : decode('euc-jp', $content);
     my $reg  = decode('utf-8', $self->_list_regexp());
     while ($html =~ m|$reg|igs) {
         my $time = "$1/$2/$3 $4:$5";
@@ -40,7 +41,8 @@
     my $res = $mech->get($link);
     return $item unless $mech->success;
 
-    my $html = decode('euc-jp', $mech->content);
+    my $content = $mech->content;
+    my $html = Encode::is_utf8($content) ? $content : decode('euc-jp', $content);
     my $reg  = decode('utf-8', $self->_detail_regexp);
     if ($html =~ m|$reg|is) {
         $item = +{ subject => $6, description => $7};
=== lib/Plagger/Plugin/CustomFeed/Frepa/FriendStatus.pm
==================================================================
--- lib/Plagger/Plugin/CustomFeed/Frepa/FriendStatus.pm	(revision 1853)
+++ lib/Plagger/Plugin/CustomFeed/Frepa/FriendStatus.pm	(local)
@@ -15,7 +15,8 @@
     my $res = $mech->get($self->start_url);
     return @msgs unless $mech->success;
 
-    my $html = decode('euc-jp', $mech->content);
+    my $content = $mech->content;
+    my $html = Encode::is_utf8($content) ? $content : decode('euc-jp', $content);
     my $reg  = decode('utf-8', $self->_list_regexp());
     while ($html =~ m|$reg|igs) {
         my $time = "$1/$2/$3 $4:$5";
=== lib/Plagger/Plugin/CustomFeed/Frepa/RecentComment.pm
==================================================================
--- lib/Plagger/Plugin/CustomFeed/Frepa/RecentComment.pm	(revision 1853)
+++ lib/Plagger/Plugin/CustomFeed/Frepa/RecentComment.pm	(local)
@@ -16,7 +16,8 @@
     $mech->get($self->start_url);
     return @msgs unless $mech->success;
 
-    my $html = decode('euc-jp', $mech->content);
+    my $content = $mech->content;
+    my $html = Encode::is_utf8($content) ? $content : decode('euc-jp', $content);
     my $reg  = decode('utf-8',  $self->_list_regexp);
     while ($html =~ m|$reg|igs) {
         my $time = "$1/$2/$3 $4:$5";
=== lib/Plagger/Plugin/CustomFeed/Frepa.pm
==================================================================
--- lib/Plagger/Plugin/CustomFeed/Frepa.pm	(revision 1853)
+++ lib/Plagger/Plugin/CustomFeed/Frepa.pm	(local)
@@ -160,7 +160,8 @@
     my $res = $self->{mech}->get($link);
     return $item unless $self->{mech}->success;
 
-    my $html = decode('euc-jp', $self->{mech}->content);
+    my $content = $self->{mech}->content;
+    my $html = Encode::is_utf8($content) ? $content : decode('euc-jp', $content);
 
     chomp( my $re  = decode('utf-8', $self->top_re) );
     if ($html =~ /$re/s) {

FreeBSdでp5-WWW-Mechanizeをportupgradeしたとか、MacでWWW::Mechanizeをcpanでinstallしたとかそういうタイミングでエラーが出たと仮定すると、mechの戻りにutf8フラグが付かなくなったとかそういう仕様変更?

んでdebian生活の人たちはaptでアップデートしていないから平気だったとか。

んで履歴を追跡してみた。

www/p5-WWW-Mechanizeが1.20から1.22になったのは

ViewVC Repository Listing

によると3月4日。

frepaとIRC#plagger-jaで「CustomFeed::Frepaが動作していないみたい」と報告があった時期と近い。

つまりWWW::Mechanize 1.22を使っているマシンはencode,decodeで同様の現象が出るのではないか?

トラックバック - http://subtech.g.hatena.ne.jp/otsune/20070423