XML :: RSS :: Parser и Facebook RSS-канал ... - PullRequest
1 голос
/ 01 декабря 2011

Мне нужна подпрограмма, которая должна анализировать "любой" канал 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 или что-то похожее на парсинг RSS Facebook, но я хочу один парсер для всех RSS-каналов.

Я собираюсь взломать XML /RSS / Parser.pm, чтобы найти причину, но это не решение изменить пакет только для Facebook.И этот канал Facebook работает хорошо в т. Е. Android RSS Reader.

1 Ответ

2 голосов
/ 01 декабря 2011

Вы уверены, что получаете верный веб-канал?Вам, вероятно, следует проверить $res->is_error, прежде чем пытаться проанализировать возвращаемое содержимое.Когда я только что попробовал ваш код, я получил ошибку 500.

Кроме того, вы запрашиваете канал Atom (&format=atom10).Вы уверены, что хотите разобрать это с помощью парсера RSS?Я не вижу ничего в XML :: RSS :: Parser документации , где упоминается, что она работает для каналов Atom.

...