our
$VERSION
=
'0.3.1'
;
has
'fetcher'
=> (
is
=>
'ro'
,
isa
=>
'App::Wubot::Util::WebFetcher'
,
lazy
=> 1,
default
=>
sub
{
return
App::Wubot::Util::WebFetcher->new();
},
);
has
'logger'
=> (
is
=>
'ro'
,
isa
=>
'Log::Log4perl::Logger'
,
lazy
=> 1,
default
=>
sub
{
return
Log::Log4perl::get_logger( __PACKAGE__ );
},
);
sub
react {
my
(
$self
,
$message
,
$config
) =
@_
;
my
$url
;
if
(
$config
->{url} ) {
$url
=
$config
->{url};
}
elsif
(
$config
->{url_field} ) {
if
(
$message
->{
$config
->{url_field} } ) {
$url
=
$message
->{
$config
->{url_field} };
}
else
{
$self
->logger->error(
"Waring: url field not found on message: $config->{url_field}"
);
return
$message
;
}
}
else
{
$self
->logger->error(
"WebFetch Reactor ERROR:: neither url nor url_field defined in config"
);
return
$message
;
}
$self
->logger->debug(
"Fetching content from $url"
);
my
$content
;
eval
{
$content
=
$self
->fetcher->fetch(
$url
,
$config
);
1;
} or
do
{
my
$error
= $@;
$self
->logger->error(
$self
->key .
": Request failure: $error"
);
return
$message
;
};
if
(
$config
->{field} ) {
$message
->{
$config
->{field} } =
$content
;
utf8::decode(
$message
->{
$config
->{field} } );
}
else
{
$self
->logger->error(
"WebFetch Reactor ERROR: 'field' not defined in config!"
);
return
$message
;
}
return
$message
;
}
__PACKAGE__->meta->make_immutable;
1;