Какая лучшая библиотека для разбора RSS / Atom в Perl? - PullRequest
13 голосов
/ 20 октября 2010

Я заметил, что XML :: RSS :: Parser не обновлялся с 2005 года. Это все еще рекомендуемая библиотека для анализа RSS или Atom?Есть ли лучший или лучший способ?

Ответы [ 4 ]

14 голосов
/ 20 октября 2010

Я не уверен, что это когда-либо была «рекомендуемая библиотека». Если я знаю, какой тип канала мне нужно проанализировать, я использую 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";
}

Все это в значительной степени скопировано из документации модуля.

5 голосов
/ 20 октября 2010

В настоящее время я предпочитаю избегать специфичных для домена парсеров 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;
    ...
}

Не самый красивый код в мире, но он работает.

5 голосов
/ 20 октября 2010

Если у вас работает XML :: RSS :: Parser, используйте его.Я использовал XML :: Parser для работы с RSS, но у меня были узкие требования, и XML :: Parser уже был установлен.

То, что что-то было обновлено за несколько лет, не означает, что онобольше не работаю;Я не думаю, что различные спецификации RSS / Atom недавно изменились, поэтому нет необходимости менять парсер.

4 голосов
/ 18 июня 2013

Существует также очень хороший модуль под названием XML::FeedPP (см. http://search.cpan.org/dist/XML-FeedPP/lib/XML/FeedPP.pm). FeedPP не так быстро, но он написан почти на чистом Perl и имеет минималистичные зависимости.

...