Какой модуль я могу использовать для парсинга каналов RSS в Perl сценарий CGI?

Я пытаюсь найти синтаксический анализатор RSS, который может использоваться с Perl сценарий CGI. Я нашел simplepie и это - действительно легкий синтаксический анализатор для использования в сценариях PHP. К сожалению, это не работает с Perl сценарий CGI. Сообщите мне, существует ли что-нибудь, как что это просто в использовании simplepie.

Я столкнулся с этим RssDisplay, но я не уверен в использовании и также насколько хороший это.

5
задан Sinan Ünür 6 July 2010 в 15:59
поделиться

2 ответа

From CPAN : XML :: RSS :: Parser .

XML :: RSS :: Parser - это легкий либеральный парсер RSS-каналов. Этот синтаксический анализатор является «либеральным» в том смысле, что он не требует соответствия конкретной версии RSS и будет пытаться корректно обрабатывать теги, которые он не ожидает или не понимает. Единственное требование к синтаксическому анализатору состоит в том, чтобы файл был правильно сформированным XML и отдаленно напоминал 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";
}
6
ответ дан 14 December 2019 в 08:40
поделиться

Доступные Perl-модули


  • XML::RSS::Tools

  • XML::RSS::Parser:

    #!/usr/bin/perl -w
    использовать 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);
    
    # выводим некоторые значения 
    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);
    
1
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: