ニュースサイトの 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.htmPerl 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;
			