Предыстория
Последнее время всё больше журналов и газет выкладывают свои
свежие номера в сеть (Ведомости, Эксперт, 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 версии периодики следующий:
- Находим сайт с информацией
- Берем RSS или индексную страницу
- Парсим страницу в Yahoo Pipes и подтягиваем полный текст статей
- Скармливаем выдачу пайпа FeedConverter-у и забираем FB2 книжку
- ??????
- PROFIT!
При однажды настроенном пайпе получение нового номера в FB2 виде будет заключаться заходе на сайт FeedConverter-а и нажатия кнопки генерации.
Ложка дегтя
- В связи с тем, что Yahoo Pipes работает не слишком быстро, генерация может не пройти с первой попытки. Надеюсь создатели FeedConverter-а сделают что-нибудь с этим.
- У Yahoo Pipes есть ограничения
по тому, сколько процессорного времени может съедать один пайп. В
связи с этим некоторые объемные выпуски журнала не укладываются в
прокрустово ложе и вылетают с ошибкой (например Эксперт №1 за 2010 г.). Что делать с этим пока не понятно. Возможно стоит разнести парсинг и подгрузку текстов в разные пайпы.