【Perl】いつの間にか Plagger が動かなくなっていた件


ニュースサイトの Atom / RSS を取得して加工する Plagger スクリプトがいつの間にか動かなくなっていた。備忘録として解決策を載せておく。

その 1. euc-jp に未対応?

エラーメッセージを見てみると次のように表示される。

failed: Parsing content failed: Couldn't open encmap euc-jp.enc:
No such file or directory
at /opt/local/lib/perl5/site_perl/5.12.0/darwin-multi-2level/XML/Parser.pm line 187
at /opt/local/lib/perl5/site_perl/5.12.0/Plagger/Plugin/Aggregator/Simple.pm line 77

ググってみると、XML::Parser::Encodings::euc-jp.enc というファイルがないことが原因のようだ。

[Projects::Memo] Couldn’t open encmap euc-jp.enc:No such file or directory
http://fukaz55.main.jp/projects/mm/euc_jp.htm

Perl XMLでencoding=’Shift_JIS’や’euc-jp’を使う
http://homepage3.nifty.com/hippo2000/perltips/xml/xmlenc.htm

$ wget http://homepage3.nifty.com/hippo2000/perltips/xml/Encoding.tar.gz
$ tar zxvf Encoding.tar.gz
$ sudo cp Encoding/mkenc/example/euc-jp.enc /opt/local/lib/perl5/site_perl/5.12.0/darwin-multi-2level/XML/Parser/Encodings/

これで解決した。3 行目の /opt/local/~ は各自の環境によって異なるので注意。

その 2. XML::Feed::Entry::Format::RSS::add_enclosure がない?

次のようなエラーメッセージが表示される。

Can't locate object method "add_enclosure" via package "XML::Feed::Entry::Format::RSS" at /opt/local/lib/perl5/site_perl/5.12.0/Plagger/Plugin/Publish/Feed.pm line 107.

Plagger::Plugin::Publish::Feed のソースを見てみると、 XML::Feed::Entry::RSS::add_enclosure の定義はあるが、 XML::Feed::Entry::Format::RSS::add_enclosure がない。適切かどうかはわからないが、次のようにして修正すると解決した。

*** Feed.pm.orig        2010-06-08 09:35:23.000000000 +0900
--- Feed.pm     2010-06-08 09:47:31.000000000 +0900
***************
*** 154,159 ****
--- 154,161 ----
          length => $enclosure->{length},
      };
  };
+ *XML::Feed::Entry::Format::RSS::add_enclosure
+     = *XML::Feed::Entry::RSS::add_enclosure;


  1;

コメントを残す