Разбор RSS-элемента с двоеточием в теге с Ruby?
Я пытаюсь проанализировать информацию из RSS-канала, который имеет эту структуру тегов:
<dc:subject>foo bar</dc:subject>
использование встроенной библиотеки Ruby RSS. Очевидно, делая item.dc:subject
бросает ошибки, но я не могу понять, как вытащить эту информацию. Есть ли способ заставить это работать? Или это возможно с другой библиотекой RSS?
3 ответов
теги с': 'в них действительно XML-теги с пространством имен. У меня никогда не было хороших результатов с помощью модуля RSS, потому что форматы каналов часто не соответствуют спецификациям, заставляя модуль сдаваться. Я настоятельно рекомендую использовать Nokogiri для анализа фида, будь то RDF, RSS или ATOM.
Nokogiri имеет возможность использовать XPath accessors или CSS accessors, и оба поддерживают пространства имен. Последние две строки будут эквивалентны:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::XML(open('http://somehost.com/rss_feed'))
doc.at('//dc:subject').text
doc.at('dc|subject').text
при работе с пространствами имен вам нужно будет добавить объявление в метод доступа XPath:
doc.at('//dc:subject', 'dc' => 'link to dc declaration')
см. раздел "пространства имен" для получения дополнительной информации.
без URL или лучшего образца я не могу сделать больше, но это должно заставить вас указать в лучшем направлении.
пару лет я написал большой агрегатор RSS для своей работы, используя Nokogiri, который обрабатывал RDF, RSS и ATOM. Библиотека Руби РСС не задача, но nokogiri По был потрясающим.
Если вы не хотите ролл твой собственный,Feedzirra пола Дикса хороший камень для обработки.
на RSS-канал модуль, похоже, имеет возможность делать эти атрибуты пространства имен XML, т. е. <dc:date>
такой:
feed.items.each do |item|
puts "Date: #{item.dc_date}"
end