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
$deduplicated = \@result;
}
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 $node ? URI->new($node->attr('href'))->as_string : undef;
}
}
=head1 AUTHOR
Dave Cross <dave@perlhacks.com>
( run in 0.238 second using v1.01-cache-2.11-cpan-179a2ef0c17 )