5

I am trying to find a RSS parser that can be used with a Perl CGI script. I found simplepie and that's really easy parser to use in PHP scripting. Unfortunately that doesn't work with a Perl CGI script. Please let me know if there is anything that's easy to use like simplepie.

I came across this one RssDisplay but I am not sure about the usage and also how good it is.

Sinan Ünür
  • 116,958
  • 15
  • 196
  • 339
JDesigns
  • 2,284
  • 7
  • 25
  • 39

2 Answers2

6

From CPAN: XML::RSS::Parser.

XML::RSS::Parser is a lightweight liberal parser of RSS feeds. This parser is "liberal" in that it does not demand compliance of a specific RSS version and will attempt to gracefully handle tags it does not expect or understand. The parser's only requirements is that the file is well-formed XML and remotely resembles RSS.

#!/usr/bin/perl

use strict; use warnings;

use XML::RSS::Parser;
use FileHandle;

my $parser = XML::RSS::Parser->new;

unless ( -e 'uploads.rdf' ) {
    require LWP::Simple;
    LWP::Simple::getstore(
        'http://search.cpan.org/uploads.rdf',
        'uploads.rdf',
    );
}
my $fh = FileHandle->new('uploads.rdf');
my $feed = $parser->parse_file($fh);

print $feed->query('/channel/title')->text_content, "\n";

my $count = $feed->item_count;
print "# of Items: $count\n";

foreach my $i ( $feed->query('//item') ) {
    print $i->query('title')->text_content, "\n";
}
Sinan Ünür
  • 116,958
  • 15
  • 196
  • 339
  • 2
    "remotely resembles RSS" - undoubtedly one of the best technical specs I've read in several months... – DVK Jul 06 '10 at 15:57
  • **@DVK:** You realize that's a copy/paste from CPAN? As with my answer -- straight copy/paste. And, to give credit, the block of code is not from that CPAN link. – vol7ron Jul 07 '10 at 02:35
1

Available Perl Modules


  • XML::RSS::Tools

  • XML::RSS::Parser:

    #!/usr/bin/perl -w
    use strict;
    
    use XML::RSS::Parser;
    use FileHandle;
    
    my $p = XML::RSS::Parser->new;
    my $fh = FileHandle->new('/path/to/some/rss/file');
    my $feed = $p->parse_file($fh);
    
    # output some values 
    my $feed_title = $feed->query('/channel/title');
    print $feed_title->text_content;
    my $count = $feed->item_count;
    print " ($count)\n";
    foreach my $i ( $feed->query('//item') ) { 
       my $node = $i->query('title');
       print '  '.$node->text_content;
       print "\n"; 
    }  
    
  • XML::RSS::Parser::Lite (Pure Perl):

    use XML::RSS::Parser::Lite;
    use LWP::Simple;
    
    my $xml = get("http://url.to.rss");
    my $rp = new XML::RSS::Parser::Lite;
    $rp->parse($xml);
    
    print join(' ', $rp->get('title'), $rp->get('url'), $rp->get('description')), "\n";
    
    for (my $i = 0; $i < $rp->count(); $i++) {
       my $it = $rp->get($i);
       print join(' ', $it->get('title'), $it->get('url'), $it->get('description')), "\n";
    } 
    
  • dirtyRSS:

    use dirtyRSS;
    
    $tree = parse($in);
    die("$tree\n") unless (ref $tree);
    disptree($tree, 0);
    
vol7ron
  • 40,809
  • 21
  • 119
  • 172
  • see Sinan's answer for another example of XML::RSS::Parser - the module I recommend – vol7ron Jul 06 '10 at 18:09
  • hi, thanks. I tired installing the xml::rss module after reading this here http://articles.techrepublic.com.com/5100-10878_11-5487340.html# but the module did not install properly. I am waiting for the hosting company tech support to look at this. I will look into what you have mentioned and try out. – JDesigns Jul 07 '10 at 13:49