As an XML/RSS exercise, I wrote up some code that converts the latest questions from the perlmonks Newest Nodes XML Feed to RSS. It's quick and dirty, but works and a script using it is now in my crontab (hourly). (It parses the authors, too, but I haven't done anything with that yet.) I thought other users (or the gods) might be interested in seeing it. People should be able to easily modify this example to pick out other parts of the newest nodes feed if they desire.
use warnings;
use strict;
use LWP::UserAgent;
use XML::Simple;
use XML::RSS;
# pass in the URL for the newest nodes page, i.e.
# http://perlmonks.org/index.pl?node_id=30175
sub process_xml {
my $url = shift;
my %authors;
my @questions;
my $browser = LWP::UserAgent->new();
$browser->timeout(30);
my $response = $browser->get($url);
die unless $response->is_success;
my $tree = XMLin( $response->content );
foreach my $node ( @{ $tree->{AUTHOR} } ) {
$authors{ $node->{'node_id'} } = $node->{'content'};
}
foreach my $node ( @{ $tree->{NODE} } ) {
my $item = { author => $authors{ $node->{'author_user'} },
node_id => $node->{'node_id'},
subject => $node->{'content'}
};
push @questions, $item if $node->{'nodetype'} eq 'perlquestion
+';
}
my $rss = new XML::RSS (version => '1.0');
$rss->channel(
title => "perlmonks newest questions",
link => "http://perlmonks.org",
description => "perlmonks newest questions",
);
for my $item ( @questions ) {
$rss->add_item(
title => $item->{subject},
link => "http://perlmonks.org/index.pl?node_id=" .
+$item->{node_id}
);
}
print $rss->as_string();
}
-xdg
Code posted by xdg on PerlMonks is public domain. It has no warranties, express or implied. Posted code may not have been tested. Use at your own risk.
DG: Updated to add strict and warnings to set a good example for new monks.