ところで、本題は。
HTML::ContentExtractorが使いたかったんだけど、移植するとなると大仕事なので標準入出力経由でPerlを叩くという暴挙。
まず準備。
$ sudo cpan (省略) cpan> install HTML::ContentExtractor (省略) cpan> exit $
続いてPerl側を準備。
(content_extractor.pl) #!/usr/bin/env perl use strict; use warnings; use HTML::ContentExtractor; my $ext = HTML::ContentExtractor->new; my $uri = <>; my $content = <>; $ext -> extract($uri, $content); print $ext->as_text;
そしてRuby側。
(content_extractor.rb) #!/usr/bin/env ruby def execute(uri, src) ret = nil IO.popen('./content_extractor.pl', 'r+'){|io| io.puts uri io.puts src.gsub("\n", '').gsub("\r", '') io.close_write ret=io.readlines } puts ret end uri = 記事のURI src = <<EOS (記事のソース) EOS execute(uri, src)
これでruby content_extractor.rbをやるとRubyからPerlを叩いて、本文領域だけ抽出した物が返ってくる。なんだけど、Railsアプリケーションでこれを使おうとすると戻り値がnilになってしまう。Perlが標準出力に返した結果がどこかあらぬところに行ってしまってるらしい。*1