2011-12-01 157 views
0

我需要一个子程序,它应该解析传递给它的任何RSS源。我曾经使用过XML :: RSS:Parser已经有一些RSS feed,但它不适用于Facebook。XML :: RSS ::解析器和Facebook RSS源...

示例代码:

use LWP::Simple; 
use XML::RSS::Parser; 

my $url = join '', @ARGV; 
die "No URL passed" if !$url; 

# facebook does not accept default LWP user agent 
my $ua = LWP::UserAgent->new(agent => 'iGoogleBot'); 
my $res = $ua->get($url); 
my $content = $res->decoded_content; 

my $parser = XML::RSS::Parser->new; 
my $feed = $parser->parse_string($content) or die $parser->errstr; 
print "COUNT: ".$feed->item_count."\n"; 

与有线Facebook的结果提要

[email protected]:/tmp$ ./rss.pl 'https://www.facebook.com/feeds/page.php?id=19440638720&format=atom10' 
Can't call method "contents" on an undefined value at /usr/local/share/perl/5.10.1/XML/RSS/Parser.pm line 122. 

我认为,XML :: RSS ::解析器不从根元素得到正确的命名空间,之后没有任何作品。想法如何解决这个问题?

我可以使用XML :: Simple或类似的东西解析Facebook的RSS,但我想要一个解析器的所有rss提要。

我打算绕过XML/RSS/Parser.pm找到原因,但它不是解决方案,只能更改为facebook包。而这个Facebook饲料在Android rss阅读器中运行良好。

+0

当然,您可以更改useragent名称,而不意味着您与Google有关? – Quentin

+0

这只是测试代码。感谢对我的问题的贡献;-) – user1075334

回答

2

您确定要获取有效的网络反馈吗?在尝试解析返回的内容之前,您应该先检查$res->is_error。当我刚刚尝试你的代码时,我得到了一个500错误。

此外,您要求提供Atom订阅源(&format=atom10)。你确定你想用RSS解析器解析吗?我在XML::RSS::Parser documentation中看不到任何提及Atom提要的工作。

+0

它是有效的。我只是用is_error删除错误检查,以缩短示例代码。在您链接的文档页面上的“http://www.w3.org/2005/Atom”列表 – user1075334

+0

,我用其他一些原子源进行了测试 – user1075334

+0

这是模块识别的名称空间列表,而不是列表的文件格式。 –