什么是在Perl中解析RSS/Atom的最佳库?

xen*_*ide 13 xml rss perl cpan atom-feed

我注意到自2005年以来XML :: RSS :: Parser尚未更新.这仍然是解析RSS或Atom的推荐库吗?有更好的方式还是更好的方式?

Dav*_*oss 14

我不确定它曾经是"推荐的图书馆".如果我知道需要解析哪种类型的feed,我会根据需要使用XML :: RSSXML :: Atom,但如果(更有可能)我只知道它是一个web feed,我使用XML :: Feed.

添加按要求使用XML :: Feed的示例..

use XML::Feed;

my $feed = XML::Feed->parse(\$string_containing_feed);

foreach ($feed->entries) {
  print $_->title, "\n";
  print $_->content->body, "\n";
}
Run Code Online (Sandbox Code Playgroud)

这些都是从模块文档中复制的.


mu *_*ort 5

如果XML :: RSS :: Parser适合您,那么使用它.我使用XML :: Parser来处理RSS,但我的要求很窄,而且已经安装了XML :: Parser.

仅仅因为某些事情在几年内得到了更新并不意味着它不再起作用; 我认为最近各种RSS/Atom规范都没有改变,所以不需要改变解析器.


fri*_*edo 5

我实际上喜欢避免使用特定于域的XML解析器,而只是使用XPath来处理所有事情.这样我只需要记住一个API.(除非它是一个巨大的XML,否则我将使用基于事件的解析器,如XML :: Parser.)

所以使用 XML :: XPath,我可以从RSS文件中获取一堆东西,如下所示:

my $rss = get_rss();
my $xp = XML::XPath->new( xml => $rss );

my $stories = $xp->find( '/rss/channel/item' );

foreach my $story( $stories->get_nodelist ) {
    my $url   = $xp->find( 'link',  $story )->string_value;
    my $title = $xp->find( 'title', $story )->string_value;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这不是世界上最漂亮的代码,但它确实有效.