#!/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"; } #} }