Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

Многие предпочитают не RSS, a Atom. Библиотека

rss
не умеет работать с этим форматом, но есть прекрасная (хотя и не стандартная) библиотека
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.

15.3. Обработка изображений при помощи RMagick

Последние пятнадцать лет на нас обрушивается все больше и больше графической информации. В качестве основного поставщика «услады для глаз» во всех формах компьютеры уже обогнали телевизоры. А значит, программистам приходится манипулировать графическими данными, представленными в различных форматах. На языке Ruby это лучше всего делать с помощью библиотеки RMagick, которую написал Тим Хантер (Tim Hunter).

RMagick — это привязка к Ruby библиотеки ImageMagick (или ее ветви, GraphicsMagick). Устанавливается она как gem-пакет, но для работы нужно еще установить одну из базовых библиотек (IM или GM). Если вы работаете в Linux, то, вероятно, та или другая библиотека уже имеется, а, если нет, можете загрузить ее с сайта(или.

Поскольку RMagick — лишь привязка, то спрашивать, какие графические форматы она поддерживает, — все равно что спрашивать, какие форматы поддерживает базовая библиотека. Все наиболее распространенные, в частности JPG, GIF, PNG, TIFF наряду с десятками других.

То же относится и к операциям, поддерживаемым RMagick. Они ограничены лишь возможностями базовой библиотеки, поскольку RMagick дублирует весь ее API. Кстати говоря, API не только функционально богат, но и и является прекрасным примером API «в духе Ruby»: в нем привычно используются символы, блоки и префиксы методов, так что большинству программистов Ruby он покажется интуитивно очевидным.

Заметим попутно, что API очень объемный. Ни этой главы, ни даже всей книги целиком не хватило бы для рассмотрения всех его деталей. В следующих разделах мы дадим лишь общее представление об RMagick, а полную информацию вы можете найти на сайте проекта .

15.3.1. Типичные графические задачи

Одна из самых простых и распространенных задач, связанных с графическим файлом, — получение характеристик изображения (ширина и высота в пикселях и т.д.). Посмотрим, как можно извлечь эти метаданные.

Рис. 15.1. Два примера изображений

На рис. 15.1 приведены два простых изображения, на которые мы будем ссылаться в этом и последующих примерах. Первое (smallpic.jpg) — просто абстрактная картинка, созданная в графическом редакторе; в ней присутствуют несколько оттенков серого цвета, а также прямые и кривые линии. Второе — фотография старенького автомобиля, которую я сделал в 2002 году в сельском районе Мексики. Для книги оба изображения переведены в черно-белый формат. В листинге 15.6 показано, как извлечь из соответствующих файлов необходимую информацию.

Листинг 15.6. Получение информации об изображении

гequire 'RMagick'

def show_info(fname)

 img = Magick::Image::read(fname).first

 fmt = img.format

 w,h = img.columns, img.rows

 dep = img.depth

 nc = img.number_colors

 nb = img.filesize

 xr = img.x_resolution

 yr = img.y_resolution

Поделиться:
Популярные книги

Разгон

Загребельный Павел Архипович
Проза:
современная проза
5.00
рейтинг книги
Разгон

Облава на волка

Серегин Михаил Георгиевич
Детективы:
боевики
5.00
рейтинг книги
Облава на волка

Ахтимаг

Бабкин Михаил Александрович
Фантастика:
фэнтези
детективная фантастика
7.38
рейтинг книги
Ахтимаг

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Крылатый воин

Чернобровкин Александр Васильевич
30. Вечный капитан
Фантастика:
попаданцы
5.00
рейтинг книги
Крылатый воин

Мастер 6

Чащин Валерий
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 6

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Дикарка Жасмин

Смолл Бертрис
6. Сага о Скай О`Малли
Любовные романы:
исторические любовные романы
8.90
рейтинг книги
Дикарка Жасмин

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.15
рейтинг книги
Пограничная река. (Тетралогия)

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
4.00
рейтинг книги
Я граф. Книга XII

Глаза погребенных

Астуриас Мигель Анхель
Проза:
классическая проза
5.00
рейтинг книги
Глаза погребенных

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия