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