2011-12-01 121 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

這是模塊識別的名稱空間列表,而不是列表的文件格式。 –