Какая лучшая библиотека для разбора RSS/Atom в Perl?
Я заметил, что XML:: RSS:: Parser не обновлялся с 2005 года. Является ли это все еще рекомендуемой библиотекой для синтаксического анализа RSS или Atom? Есть лучший или лучший способ?
Ответы
Ответ 1
Я не уверен, что это была "рекомендуемая библиотека". Если я знаю, какой тип корма мне нужен, я использую XML:: RSS или XML:: Atom, но если (как это более вероятно), я просто знаю, что это веб-канал, я использую XML:: Поток.
Добавление примера использования XML:: Feed в соответствии с запросом.
use XML::Feed;
my $feed = XML::Feed->parse(\$string_containing_feed);
foreach ($feed->entries) {
print $_->title, "\n";
print $_->content->body, "\n";
}
Все это в значительной степени скопировано из документации модуля.
Ответ 2
Если XML:: RSS:: Parser работает для вас, используйте его. Я использовал XML:: Parser для работы с RSS, но у меня были узкие требования, и XML:: Parser уже был установлен.
Просто потому, что что-то обновлено через несколько лет, это не значит, что он больше не работает; Я не думаю, что различные спецификации RSS/Atom изменились в последнее время, поэтому нет необходимости в том, чтобы синтаксический анализатор менялся.
Ответ 3
На самом деле мне нравится избегать парсеров XML, специфичных для домена, и просто используйте XPath для всего. Таким образом, мне нужно запомнить только один API. (Если это не огромный XML, я буду использовать парсер, основанный на событиях, например XML:: Parser.)
Таким образом, используя XML:: XPath, я могу захватить кучу материала из файла RSS следующим образом:
my $rss = get_rss();
my $xp = XML::XPath->new( xml => $rss );
my $stories = $xp->find( '/rss/channel/item' );
foreach my $story( $stories->get_nodelist ) {
my $url = $xp->find( 'link', $story )->string_value;
my $title = $xp->find( 'title', $story )->string_value;
...
}
Не самый красивый код в мире, но он работает.
Ответ 4
Существует также очень хороший модуль под названием XML::FeedPP
(см. http://search.cpan.org/dist/XML-FeedPP/lib/XML/FeedPP.pm). FeedPP
не так быстро, но он написан в почти чистом Perl и имеет минималистические зависимости.