Как стать автором
Обновить

Создание FB2 версии свежего номера журнала/газеты

Время на прочтение3 мин
Количество просмотров7.6K

Предыстория


Последнее время всё больше журналов и газет выкладывают свои свежие номера в сеть (Ведомости, Эксперт, Esquire и т.п.). Все хорошо с этими номерами за одним исключением — что бы их читать нужен интернет.
С интернетом проблема в том что он не везде есть (метро) и не каждое устройство его видит (большинство e-ink ридеров).
В связи с этим родилась мысль о том что не плохо бы делать копии периодики в виде электронных книжек (например в FB2 формате).

Задача


Создать решение, позволяющее генерировать файл FB2 формата из куска сайта, содержащего нужный выпуск журнала (например Эксперт №32 за 2010 год).
Файл должен содержать картинки и желательно оглавление с перечнем статей.
Создание файла с новым номером должно происходить в (полу)автоматическом режиме, занимать не больше 5-10 минут и не требовать серьёзной ручной обработки.

Поиск решения


Конвертер Что-То->FB2


Как оказалось конвертеров HTML->FB2 кот наплакал. А таких, которые в автоматическом режиме могут обработать пачку html страничек и корректно составить оглавление и прописать ссылки, нет вообще. Хотя может быть я плохо искал или не разобрался в возможностях того, чего нашел.
Для начала я попробовал все редакторы описанные в обзоре компьютерры.
  • «Any to FB2» — напрочь убивал кирилицу (скорее всего из за кривых рук) и заточен под работу с одной страницей.
  • «FictionBook Designer» — мощная штука, но не имеет (не нашел) функции автоконвертации.
  • Web2FB2 — ближе всего желаемому но имеет ограничение в 10 страниц и валит всё в одну кучу без оглавления

Дальнейший поиск вывел на замечательный сервис FeedConverter (об этом сервисе на хабре уже писали).
Тестирование на первом попавшемся русском RSS потоке показало что сервис:
  • справляется с кириллицей
  • генерирует оглавление в виде перечня записей
  • принимает картинки
Т.е. теперь, для того что бы получить результат достаточно скормить на вход этому сервису фид, в котором будут полнотекстовые статьи номера.

Полнотекcтовый RSS feed


Рассматриваемый сайт не поставляет полнотекстового RSS с данными номеров. Только анотации последнего номера.
Для создания Full Text RSS удобно использовать Yahoo Pipes. Скармливаем ему наш поток, и в цикле подгружаем полный текст статьи — http://pipes.yahoo.com/pipes/pipe.edit?_id=661b8231fa3df88317939d452e772c10. В случае, если сайт не предоставляет RSS потока вообще, а только публикует статьи (как например Esquire) механизм Yahoo Pipes позволяет отпарсить содержимое страницы, достать от туда ссылки и выкачать нужные статьи. Для этого я создал pipe http://pipes.yahoo.com/pipes/pipe.edit?_id=85427a7ff66aa7c06a1fa8da677fbd25
У данного механизма есть плюс в том, что он позволяет достать любой номер, а не только последний.
Для этого в строке вызова надо лишь поменять параметр, отвечающий за год и номер внутри года http://pipes.yahoo.com/pipes/pipe.run?_id=85427a7ff66aa7c06a1fa8da677fbd25&_render=rss&number=31&year=2010.

Итого

Финальный алгоритм создания FB2 версии периодики следующий:
  1. Находим сайт с информацией
  2. Берем RSS или индексную страницу
  3. Парсим страницу в Yahoo Pipes и подтягиваем полный текст статей
  4. Скармливаем выдачу пайпа FeedConverter-у и забираем FB2 книжку
  5. ??????
  6. PROFIT!
При однажды настроенном пайпе получение нового номера в FB2 виде будет заключаться заходе на сайт FeedConverter-а и нажатия кнопки генерации.

Ложка дегтя

  • В связи с тем, что Yahoo Pipes работает не слишком быстро, генерация может не пройти с первой попытки. Надеюсь создатели FeedConverter-а сделают что-нибудь с этим.
  • У Yahoo Pipes есть ограничения по тому, сколько процессорного времени может съедать один пайп. В связи с этим некоторые объемные выпуски журнала не укладываются в прокрустово ложе и вылетают с ошибкой (например Эксперт №1 за 2010 г.). Что делать с этим пока не понятно. Возможно стоит разнести парсинг и подгрузку текстов в разные пайпы.
    Подгрузку полных статей можно вынести на ReadBox.info (см ниже)

Update 1: Ниже в комментариях подсказали отличный сервис для создания полнотекстовых версий — ReadBox.info. Для того что бы получить FullText feed на вход нужно скормить RSS поток и XPath блока с текстом. Таким образом функцию подгрузки текста можно убрать из Y!P, что позволит ей работать более стабильно.
Собственно теперь процесс можно сделать таким:
  1. Находим сайт с информацией
  2. Берем RSS или индексную страницу
  3. Оставляем только нужные статьи или парсим индексную страницу в Yahoo Pipes
  4. Подтягиваем полный текст статей с помощью ReadBox.info
  5. Скармливаем RSS FeedConverter-у и забираем FB2 книжку
  6. ??????
  7. PROFIT!

Update 2: Для тех кто не испугается ковыряния в конфигах и курения мануалов есть отличная программа для нашей цели — nmdparser. Вот пример того, как её можно настроить для получения в FB2 архивной копии Авторевью.
Теги:
Хабы:
Всего голосов 78: ↑76 и ↓2+74
Комментарии50

Публикации