package Emureports::Controller::Aggregator; use strict; use warnings; use base 'Catalyst::Controller'; =head1 NAME Emureports::Controller::Aggregator - Catalyst Controller =head1 DESCRIPTION Catalyst Controller. =head1 METHODS =cut =head2 index =cut use LWP::UserAgent; use XML::Feed; use threads; sub setup_request : Local { my ($self,$c,$url)=@_; my $ua = LWP::UserAgent->new(); $ua->agent('EmuReports/0.1'); my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); my $feed = $res->{_content}; $c->stash->{xml} = XML::Feed->parse(\$feed); } sub get_emuscene : Local { my ($self,$c)=@_; my $thr=threads->create($self->emuscene_thread($c)); $thr->detach(); $c->res->body('Grabbing Emuscene Feeds'); } sub emuscene_thread { my ($self,$c)=@_; $c->model('EmuReports::FeedUpdates')->delete(); $c->forward('/aggregator/setup_request',['http://www.emuscene.com/rss.php']); foreach my $node ($c->stash->{xml}->entries()) { my $f = $c->model('EmuReports::FeedUpdates')->new({}); my ($name,$title) = $node->title() =~ /(.*?) Updated to (.*?)$/i; $f->link($node->link()); $f->insert(); } $c->res->body('Grabbed Emuscene Feed!'); }  $f->name($name); $f->title('Updated to ' . $title); 1;