rendered paste body#!/usr/bin/perl
# Testing fetch RSS news
# cpan -f "POE POE::Component::RSSAggregator POE::Component::Client::HTTP POE::Component::Client::Keepalive"
# cpan -f "Net::DNS XML::RSS::Feed"
use strict;
use warnings;
use lib "/home/forger/perl/lib/perl/5.10.0";
use lib "/home/forger/perl/share/perl/5.10.0";
use POE;
use POE::Component::RSSAggregator;
#when was program ran + 60 seconds
my $starttime = $^T + 60;
my @feeds = (
{ url => "http://news.google.com/?output=rss",
name => "google",
delay => 600,
max_headlines => 1,
init_headlines_seen => 1,
},
{ url => "http://kernel.org/kdist/rss.xml",
name => "kernel",
delay => 600,
init_headlines_seen => 1,
},
{ url => "http://forum.ubuntu-gr.org/rss.php",
name => "ubuntu-gr-forum",
delay => 120,
max_headlines => 2,
init_headlines_seen => 1,
},
);
POE::Session->create(
inline_states => {
_start => \&init_session,
handle_feed => \&handle_feed,
},
);
$poe_kernel->run();
sub init_session {
my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
$heap->{rssagg} = POE::Component::RSSAggregator->new(
alias => 'rssagg',
debug => 0,
callback => $session->postback("handle_feed"),
tmpdir => '/tmp', # optional caching
init_headlines_seen => 1,
);
$kernel->post('rssagg', 'add_feed', $_) for @feeds;
}
sub handle_feed {
my ($kernel, $feed) = ($_[KERNEL], $_[ARG1]->[0]);
# Skipping starting headlines
#if (time > $starttime) {
for my $headline ( $feed->late_breaking_news ) {
print '['.$feed->{name}.'] '.$headline->{headline}.' '.$headline->{url}."\n";
}
#}
}