Какая лучшая библиотека для разбора RSS / Atom в Perl?
Я заметил, что XML::RSS::Parser не обновлялся с 2005 года. Это все еще рекомендуемая библиотека для разбора RSS или Atom? Есть ли лучший или лучший способ?
4 ответа:
Я не уверен, что это когда-либо была "рекомендуемая библиотека". Если я знаю, какой тип канала мне нужно разобрать, я использую XML:: RSS или XML::Atom, но если (что более вероятно) я просто знаю, что это веб-канал, я использую XML::Feed.
Добавление примера использования XML:: Feed по запросу..
use XML::Feed; my $feed = XML::Feed->parse(\$string_containing_feed); foreach ($feed->entries) { print $_->title, "\n"; print $_->content->body, "\n"; }
Все это в значительной степени скопировано из документации модуля.
Если XML:: RSS:: Parser работает для вас, то используйте его. Я использовал XML:: Parser для работы с RSS, но у меня были узкие требования, и XML::Parser уже был установлен.
Просто потому, что что-то было обновлено в течение нескольких лет, не означает, что это больше не работает; я не думаю, что различные спецификации RSS/Atom изменились недавно, поэтому нет необходимости в изменении синтаксического анализатора.
На самом деле мне нравится избегать специфичных для домена 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; ... }
Есть также очень хороший модуль под названием
XML::FeedPP
(см. http://search.cpan.org/dist/XML-FeedPP/lib/XML/FeedPP.pm).FeedPP
не так быстро, но он написан на почти чистом Perl и имеет минималистичные зависимости.