App-RoboBot
view release on metacpan or search on metacpan
lib/App/RoboBot/Plugin/Net/URLs.pm view on Meta::CPAN
foreach my $url (@urls) {
my $r = $self->ua->get($url);
if ($r->is_success) {
my $title = $self->get_title($r);
if (defined $title && length($title) > 0 && $title =~ m{\w+}o) {
$title =~ s{\s+}{ }ogs;
$title =~ s{(^\s+|\s+$)}{}ogs;
$message->response->push(sprintf('Title: %s', $title));
}
if (scalar($r->redirects) > 0) {
my $redir = ($r->redirects)[-1];
# Limit notification of redirects to only those which differ from the
# original URL by a distance of greater than 10% of the length of
# original URL. This prevents some odd issues from reporting a
# redirect to the same URL.
if (distance($url, $redir) >= length($url) * 0.10) {
$message->response->push(sprintf('Redirected to: %s', $redir->base));
}
}
}
# TODO add URL logging and the "Last Seen:" output from the old plugin version
}
}
sub shorten_url {
my ($self, $message, $command, $rpl, $url) = @_;
return unless defined $url && length($url) > 0;
# TODO actually shorten the URLs
return $url;
}
sub find_urls {
my ($self, $message) = @_;
my $text = $message->raw;
my @uris;
my $finder = URI::Find->new(sub {
my($uri) = shift;
push @uris, $uri;
});
$finder->find(\$text);
return @uris;
}
sub get_title {
my ($self, $r) = @_;
my $tree = HTML::TreeBuilder::LibXML->new;
$tree->parse($r->decoded_content);
$tree->eof;
my @values = $tree->findvalue('//head/title');
if (@values && scalar(@values) > 0) {
return $values[0];
}
return;
}
__PACKAGE__->meta->make_immutable;
1;
( run in 1.457 second using v1.01-cache-2.11-cpan-97f6503c9c8 )