1

渡された「任意の」RSS フィードを解析するサブルーチンが必要です。XML::RSS:Parser をいくつかの RSS フィードに既に数回使用していましたが、Facebook では機能しません。

コード例:

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 フィードでの結果

xf@serv:/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::Parsers はルート要素から正しい名前空間を取得せず、その後何も機能しないと思います。これを解決する方法のアイデア?

XML::Simple などを使用して Facebook の RSS を解析できますが、すべての RSS フィードに対して 1 つのパーサーが必要です。

理由を見つけるために XML/RSS/Parser.pm をハッキングしますが、facebook だけのパッケージを変更するのは解決策ではありません。そして、この facebook フィードは、android の rss リーダーなどでうまく機能します。

4

1 に答える 1

2

有効な Web フィードバックを確実に取得していますか? $res->is_error返されたコンテンツを解析する前に、おそらく確認する必要があります。あなたのコードを試したところ、500 エラーが発生しました。

また、Atom フィード ( &format=atom10) を求めています。RSS パーサーで解析してもよろしいですか? XML::RSS::Parser のドキュメントには、Atom フィードで動作することについて言及しているものは何もありません。

于 2011-12-01T14:23:36.310 に答える