All pastes #1320918 Raw Edit

Someone

public text v1 · immutable
#1320918 ·published 2009-01-28 19:34 UTC
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";
    }
    #}
}