0

HTML::Featureのユーザーエージェントが設定できない件

本日もperlネタ。
ブログやニュースサイトから本文だけ抽出したい時に非常に便利なcpanモジュールにHTML::Featureというものがあります。
設計も非常に秀逸で本文を抽出するロジック(エンジン)もモジュールで選ぶことができます。

use HTML::Feature;my $url = "http://hogehoge.com/blog/entry01.html";my $f = HTML::Feature->new(
 
engines => [
'HTML::Feature::Engine::LDRFullFeed',
'HTML::Feature::Engine::GoogleADSection',
'HTML::Feature::Engine::TagStructure',
],
user_agent => 'hogehoge bot',
);
 
my $res = $f->parse($url)->text;
print $res;

本来は、これだけで本文が取得できる… はずが、PODの通りユーザーエージェントを指定すると実は下記のようなエラーが返ってきます。
Can't locate object method "user_agent" via package "LWP::UserAgent" at /usr/lib/perl5/site_perl/5.8.8/HTML/Feature/Fetcher.pm line 23.

内部で使ってるLWP::UserAgentに渡す際にエラーがでてるようです。
LWP::UserAgentではユーザーエージェントを指定するのにuser_agentではなくagentと指定するのでその通りに、Fetcher.pmを少し書き換えます。

# $fetcher->user_agent( $config->{user_agent} );

$fetcher->agent( $config->{user_agent} );

これで再度実行すると問題なくhogehoge botというユーザーエージェントが相手のサーバーログに残ります。

user_agentの指定は必須ではないけど、デフォルトではlibwww-perl/#.###というユーザーエージェント名になってしまいます。
サーバーによってはユーザーエージェントがlibwww-perl/#.###だとリクエストを受け付けないこともあるので独自のユーザーエージェント名を指定しておきます。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です