Книга: Программирование на языке Ruby
15.2.2. Библиотека feedtools
15.2.2. Библиотека feedtools
Библиотека feedtools
(распространяемая в виде gem-пакета) — плод работы Боба Амана (Bob Aman). Она более или менее единообразно работает с обоими форматами RSS и Atom и сохраняет все данные в общем внутреннем формате (основанном преимущественно на Atom). В нее встроены собственные средства для работы с IRI, так что явно включать библиотеки net/http
или open-uri
не требуется.
Вот простой пример, эквивалентный первому примеру из предыдущего раздела:
require 'feed_tools'
URL = "http://www.marstoday.com/rss/mars.xml"
feed = FeedTools::Feed.open(URL)
puts "Description: #{feed.title}n"
feed.entries.each_with_index {|x,i| puts "#{i+1} #{x.title}" }
Этот вариант короче и яснее предыдущего. Некоторые вещи не так очевидны, например у объекта feed
нет явного метода channel
. Однако такие методы, как title
и description
можно вызывать непосредственно для объекта feed
, поскольку канал может быть только один.
Ниже показано, как читать новости из канала в формате Atom:
require 'feedtools'
URL = "http://www.atomenabled.org/atom.xml"
feed = FeedTools::Feed.open(URL)
puts "Description: #{feed.title}n"
feed.entries.each_with_index {|x,i| puts "#{i+1} #{x.title}" }
Обратите внимание — изменился только сам URL! Это замечательно, поскольку мы можем обрабатывать каналы независимо от формата. Результат, естественно, похож на то, что мы видели раньше:
Description: AtomEnabled.org
1 AtomEnabled's Atom Feed
2 Introduction to Atom
3 Moving from Atom 0.3 to 1.0
4 Atom 1.0 is Almost Final
5 Socialtext Supports Atom
Хочу еще раз предостеречь вас: не тратьте впустую ресурсы сервера, принадлежащего поставщику канала. Реальное приложение должно кэшировать содержимое канала, а если вы занимаетесь просто тестированием, лучше создайте собственный канал. Библиотека feedtools
поддерживает довольно развитый механизм кэширования в базе данных, которого должно хватить для большинства применений.
А теперь добавим к предыдущему примеру еще две строки:
str = feed.build_xml("rss",2.0)
puts str
Мы только что преобразовали канал Atom в канал RSS 2.0. А можно было бы вместо этого указать RSS 0.9 или RSS 1.0. Возможно и преобразование в обратном направлении: прочитать новости из RSS-канала и записать их в Atom-канал. Это одна из сильных сторон библиотеки.
Во время работы над книгой текущей версией библиотеки feedtools
была 0.2.25. Вероятно, со временем изменится и набор возможностей, и API.
- 17.2.1. Библиотека setup.rb
- 15.2.1. Стандартная библиотека rss
- Библиотека Ext Core
- А.2.4. Библиотека ccmalloc
- 13.2. Локали и библиотека С
- 15.5.1. Библиотека dbug — усовершенствованный printf()
- Клиентская библиотека Firebird
- Стандартная библиотека ввода
- API, POSIX и библиотека С
- Библиотека Oracle XDK
- Управление библиотеками общего доступа
- 15. Библиотека языка Си и файлы ввода-вывода