Soft

12.01.2011 Автор: Евгений Петров Версия для печати

Перевод RSS-лент в формат FB2

Можно ли читать новости, обновления и посты на любимых форумах и сайтах в электронной книге? Однозначно утвердительно ответить на этот вопрос удастся через год-другой. Во всяком случае, е-ридеры последнего поколения уже научились подключаться к Интернету. К тому же не стоит забывать об iPad и подобных ему «планшетах», которые вполне способны заменить устройства категории eBook. Большинству же владельцев электронных книг подобная функциональность пока неподвластна. Впрочем, выход есть. Правда, придется примириться с тем, что без помощи компьютера нам не обойтись.


 Очевидно, ответ на поставленный вопрос кроется в способности существующего программного обеспечения преобразовать RSS-канал в понятный e-ридеру формат. Пусть в нашем эксперименте им будет популярный FB2, который при необходимости всегда можно конвертировать в любой другой при помощи соответствующих утилит.

 RSS и FB2 многое роднит, а значит, процесс превращения должен пройти с минимальными потерями. Оба представляют собой XML-файлы с определенной структурой, поэтому конвертеру эта работа не доставит особых хлопот. Но это в теории. На практике пользователь скорее всего столкнется с рядом проблем. Ведь, несмотря на то что RSS сейчас встречается на многих ресурсах, в подавляющем большинстве случаев это будут краткие ленты, содержащие лишь анонсы новых статей или заметок. Очевидно, пользы от чтения такой информации в офлайн-режиме никакой. Однако самая сложная ситуация возникает, когда любимый сайт вообще не озаботился поддержкой RSS-каналов.

 Таким образом, прежде чем получить FB2-версию избранного ресурса с последними обновлениями, сначала предстоит решить одну из двух задач. Первая: превратить короткую RSS-ленту (при ее наличии) в длинную с полными текстами статей. Вторая: самостоятельно создать RSS-ленту при ее отсутствии на сайте.

Книга из длинной ленты

 Первая задача, понятно, проще. Благо сообщество программистов озаботилось облегчением участи рядовых пользователей. Причем, если повезет с грамотным кодом целевых страниц, на которые ведут ссылки с RSS-ленты, можно обойтись вообще без таких «страшных» понятий, как командная строка, регулярные выражения, парсинг и т.д.

 Для начала неискушенному в программировании человеку достаточно перейти на сайт специальной службы, занимающейся конвертированием коротких RSS в длинные. Нам приглянулась русскоязычная Feedex (http://feedex. net), предлагающая ввести в строку адрес исходного новостного канала. После нажатия кнопки Go! сервис последовательно проходится по заголовкам введенного RSS и загружает полный контент каждой статьи по соответствующим ссылкам, содержащимся в ленте. По окончании работы (а весь процесс занимает считанные секунды) выдается линк, который можно использовать в дальнейшем для регулярного получения полноформатных новостей с конкретного сайта.

 Если результат работы Feedex не удовлетворит, можно поэкспериментировать с аналогичными сервисами — например, WizardRSS (www.wizardrss.com), Owagu (http://owagu.com/fulltextrss) и др. Однако нужно иметь в виду, что некоторых из них могут иметь проблемы с кириллической кодировкой, требовать плату за сервис или накладывать ограничения на количество обрабатываемых новостей в ленте.

 После генерирования длинного RSS остается получить файл формата FB2 с сохранением структуры текста, изображений и даже с оглавлением. И для этого тоже существуют автоматические средства — в частности, онлайн-сервис Feedconverter (http://appfactory.ru/projects/feedconverter). Достаточно скопировать адрес RSS-ленты в отведенное для этого поле и нажать кнопку запуска, как через некоторое время пользователю будет предложен результат преобразования по ссылке «Скачать». Сервис позволяет также конвертировать подписку из нескольких лент, хранящуюся в стандартном OPML-файле и выбирать предпочтительный формат книги на выходе (FB2, EPUB, PDF, TXT и др.).

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

Офлайн-решение

 Локальный преобразователь в этом смысле надежнее. Он всегда под рукой и его настройки в любой момент можно изменить для достижения желаемого результата. Правда, придется разобраться с его параметрами, XML-разметкой и XPath-запросами (см. врезку).

 Пожалуй, самым продвинутым из готовых решений является приложение nmdParser ://sites.google.com/site/nmdparser), (http: созданное Игорем Усенко. Оно поставляется в виде ZIP-файла и не требует установки — достаточно распаковать содержимое архива на жесткий диск. Программа работает из командной строки и ее исполняемый файл nmd.exe находится в директории bin.

 Изменить целевую папку, в которую сохраняются FB2-файлы, можно с помощью редактирования установок (по умолчанию результаты преобразования попадают в директорию workarea\root). Для этого следует в текстовом редакторе открыть файл workarea\etc\defaults.properties и добавить в него строчку:

default.storage.root=<путь к выбранному каталогу>

 Вообще, nmdParser позволяет выполнять различные операции, но для быстрого решения поставленной задачи нас интересует команда:

nmd -cb <пользовательское имя папки с шаблонами> <адрес короткого RSS>

 Параметр -cb (create brief) предназначен для создания шаблонов обработки короткой RSS-ленты. После указания узнаваемого имени программа сама подготовит папку с аналогичным названием и поместит ее в директорию workarea\workspaces\sam-ple\locator. Здесь автоматически сформируются XML-файлы, необходимые для дальнейшей работы с RSS и содержащие указание на источник (source.xml), схему преобразования контента (content.xml), имя конечного документа (output.xml) и т.д. Самое главное удобство такого подхода — возможность в любой момент отредактировать тот или иной параметр в случае, например, изменения исходного адреса RSS-канала или структуры контент-страниц.

 Далее выполняется команда:

nmd -ua <пользовательское имя конечной папки с FB2-файлом>

 Параметр -ua (update all) указывает на необходимость обновления ленты и формирование FB2-файла в папке с указанным именем (она появится в директории, указанной выше в файле настроек defaults.properties). По умолчанию все статьи будут склеены в один документ (параметр many-to-one в соответствующем шаблоне output.xml).

 При периодическом выполнении вышеупомянутой команды содержимое конечного FB2-файла будет пополняться новыми статьями при сохранении старых. Однако дополнительно можно добавить ключ -f, который в случае необходимости позволит полностью перезаписать FB2-до-кумент:

nmd -ua <пользовательское имя папки с FB-2-файлом> -f

 Следует помнить, что работа nmdParser иногда длится до 5–10 мин в зависимости от источника и количества новостей, а также их содержимого (прежде всего присутствия большого объема графики). Результатом станет FB2-файл — обычно с приемлемым форматированием и наличием сопутствующей графики. Более того, программа сформирует правильное содержание, посредством которого можно быстро перейти от одной новости или статьи к другой.

 Еще одно важное замечание касается удаления мусора. По умолчанию через шаблон content.xml отбирается весь контент, заключенный между тегами html-страницы с полной версией новости или статьи:

 /body

 Однако внимательно проштудировав HTML-код оригинальной страницы, можно существенно снизить количество лишних элементов. Например, для раздела «Обзоры» сайта www.hardnsoft.ruподойдет такое выражение на XPath (см. врезку):

 

 

//td[@class='article']

 В результате произойдет отбор только целевой информации, содержащейся в теге td с атрибутом class="article", а остальное будет отрезано.

Создаем RSS-канал с нуля

 Если готового RSS на сайте не предусмотрено, придется прибегнуть к самостоятельному парсингу то есть разбору исходного HTML-кода. По счастью, и для таких случаев существуют средства автоматизации. А в качестве примера мы опять возьмем раздел «Обзоры» с сайта нашего журнала — здесь как раз до сих пор отсутствует RSS-канал (есть, над чем работать).

 Вообще, разбирать HTML-код можно и средствами все того же nmdParser. Однако, на субъективный взгляд автора, более удобным является онлайн-сервис feed43.com. Хотя, конечно, мы попадаем в дополнительную зависимость от провайдера, преимущества данного ресурса перевешивают недостатки.

 Итак, Feed43 позволяет создать RSS-канал из обычной HTML-страницы. Орудовать придется всего двумя операторами — {%} (значимый контент) и {*} (остановка парсинга). После загрузки исходной страницы нам предлагается внимательно просмотреть ее код и понять, где находится интересующее нас содержимое. Сначала задается глобальный шаблон, сразу отсекающий ненужный контент. В нашем примере он выглядит так:

OB30PbI{%}  1  

 Это означает, что значимое содержимое лежит в области между словом ОБЗОРЫ и началом счетчика страниц. Далее руками разбираем любой из десяти анонсов, которые обычно фигурируют на первой странице раздела нашего сайта:

 У нас получилось три значимых элемента {%}: первый {%1} — ссылка на основную статью, второй {%2} — заголовок статьи, третий {%3} — краткий анонс. Нажимаем кнопку «Извлечь», и сервис выдает аккуратно сформированную ленту из 10 блоков искомой информации. Предпоследним шагом расставляем в правильной последовательности значимые элементы по соответствующим полям, присваиваем ленте удобоваримое имя и, вуаля, — в нашем распоряжении оказывается краткий RSS-канал с постоянным адресом http://feed43. com/hnsreviews.xml, которым, кстати, могут воспользоваться все желающие.

 Собственно, подобные трюки можно вытворять почти с любым сайтом, изготавливая RSS-ленты на свой вкус.

 Для получения конечного FB2-файла вновь обращаемся к nmdParser и по изложенной выше схеме конвертируем короткий RSS в готовый документ, понятный электронной книге.

 Всю описанную последовательность команд можно записать в bat-файл и запускать его по мере необходимости для обработки избранных новостных лент и обновлений соответствующих FB2-файлов. По окончании процедуры останется лишь синхронизировать е-ридер с компьютером.

Автоконвертеры

 Особо ленивым можно предложить ресурс http://web2fb2.net. По этому адресу расположен автоматический парсер HTML-страниц, который сразу выдает на-гора FB2-файл. За качество разбора, конечно, никто не ручается. Однако вполне вероятно, что некоторые страницы будут преобразованы в удобоваримый документ.

 Правда, ни о каком накопительном обновлении конечного FB2-файла речи здесь не идет. Пользователю каждый раз придется скачивать отдельный документ с преобразованной новостью или статьей для чтения в электронной книге.

Уборка силами XPath

 Беда в том, что из оригинальной страницы в полный текст статьи попадает много мусора — реклама, панели и меню навигации, счетчики и прочая атрибутика любого веб-сайта. В книге вся эта информация ни к чему, поэтому для получения более чистых результатов желательно вырезать лишний контент. Это позволяет сделать XPath и регулярные выражения, которые способны отделить зерна от плевел. Конечно, в небольшой заметке описать такой огромный пласт знаний, как XPath, невозможно. Однако указать на его существование будет явно нелишним.

 XPath (сокращенно от XML Path Language) — язык запросов к XML-документу для выбора требуемых узлов и вычисления различных значений. Он позволяет указывать программе-трансформатору на то, какие части исходного документа (страница с новостью или статьей) следует поместить в итоговый файл (электронную книгу).

 Исчерпывающая информация о синтаксисе и возможностях XPath опубликована на сайте консорциума W3C (http://www.w3.org/TR/xpath).

 У нас получилось три значимых элемента {%}: первый {%1} — ссылка на основную статью, второй {%2} — заголовок статьи, третий {%3} — краткий анонс. Нажимаем кнопку «Извлечь», и сервис выдает аккуратно сформированную ленту из 10 блоков искомой информации. Предпоследним шагом расставляем в правильной последовательности значимые элементы по соответствующим полям, присваиваем ленте удобоваримое имя и, вуаля, — в нашем распоряжении оказывается краткий RSS-канал с постоянным адресом http://feed43. com/hnsreviews.xml, которым, кстати, могут воспользоваться все желающие.

 Собственно, подобные трюки можно вытворять почти с любым сайтом, изготавливая RSS-ленты на свой вкус.

 Для получения конечного FB2-файла вновь обращаемся к nmdParser и по изложенной выше схеме конвертируем короткий RSS в готовый документ, понятный электронной книге.

 Всю описанную последовательность команд можно записать в bat-файл и запускать его по мере необходимости для обработки избранных новостных лент и обновлений соответствующих FB2-файлов. По окончании процедуры останется лишь синхронизировать е-ридер с компьютером.


Назад в раздел

Текст сообщения*
Защита от автоматических сообщений

Читайте также