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