App-FeedDeduplicator
view release on metacpan or search on metacpan
lib/App/FeedDeduplicator/Aggregator.pm view on Meta::CPAN
method aggregate {
for (@$feeds) {
my $response = $ua->get($_->{feed});
unless ($response->is_success) {
warn "$_->{feed}\n";
warn $response->status_line, "\n";
next;
}
my $feed = XML::Feed->parse(\$response->decoded_content);
unless ($feed) {
warn "Unable to parse $_->{feed}\n";
next;
}
for my $entry ($feed->entries) {
push @$entries, {
entry => $entry,
feed => $_,
}
lib/App/FeedDeduplicator/Deduplicator.pm view on Meta::CPAN
}
method find_canonical ($entry) {
my $link = $entry->link;
return unless $link;
my $response = $ua->get($link);
return unless $response->is_success;
my $tree = HTML::TreeBuilder::XPath->new_from_content(
$response->decoded_content
);
my $node = $tree->findnodes('//link[@rel="canonical"]')->[0];
return unless $node;
return URI->new($node->attr('href'))->as_string;
}
}
=head1 AUTHOR
( run in 0.405 second using v1.01-cache-2.11-cpan-9383018d099 )