С появлением электронной книги захотелось каждый день получать на неё пачку новостей, чтобы прочитать их по дороге на работу. Казалось бы, инструменты уже есть: бери и пользуйся. Но, как всегда, трудности в деталях:
- Статьи надо посылать по расписанию
- Надо посылать только новые статьи
- Для разных сайтов нужны разные настройки
- Картинки бывают не только в jpeg
- Для xkcd надо уметь рендерить latex
- На хабре статей много, а отсылать на книгу надо только избранные
Существующие решения
Send to kindle и Push to kindle
Достоинства: простота. Одним нажатием ставится дополнение к браузеру. Вторым нажатием отправляем страницу на читалку.
Недостатки: простота. Ну нельзя этим утилитам объяснить, что комментарии тоже интересно почитать и их надо включать в статью. Также нет периодического сбора статей.
Calibre
Достоинства: мощный конфигурируемый открытый инструмент. Можно заставить его делать именно то, что нужно.
Недостатки: чтобы он делал именно то, что нужно, требуется доработка рашпилем. Об этом и статья.
Требования
- Раз в день надо собирать накопившиеся статьи и отправлять на читалку.
- Во многих rss лентах записей не много, поэтому вариант с отдельной книгой на каждую ленту не рассматривался. Тем более, что в kindle обнаружилась удобное двухуровневое оглавление.
- Современные читалки поддерживают не только jpeg. Черно-белые png комиксы не надо пережимать, особенно не надо прозрачный фон заменять на черный: прямоугольники — это концептуально и стильно, но не совсем то, что я хочу рассматривать каждое утро.
- Нужна возможность отмечать статьи, которые я хочу прочитать на книжке. Их и только их надо переносить.
- Статьи желательно скачивать непосредственно перед отправкой, чтобы к ним накопилось побольше комментариев.
- Latex формулы надо рендерить в png, а не рисовать с помощью JavaScript
Решение
Конвертация
Для скачивания и конвертации статей используется command-line версия calibre. Нужно использовать версию не менее 0.8.51, так как она поддерживает опцию --mobi-keep-original-images. К сожалению, конвертация в mobi, это не единственное место где картинки принудительно сохраняются в jpeg. Нужно отучить RecursiveFetcher, загружающий ленты новостей, от этой вредной привычки. Другая проблема заключается в том, что единицей конфигурации в calibre является книга целиком. Мне же надо было иметь разные настройки конвертации для разных лент. Это решается созданием новой сущности FeedFetchSettings и написанием специального MultiFeedRecipe, конфигурируемого этими настройками. Все эти модификации можно найти на гитхабе. Также MultiFeedRecipe умеет запоминать, какие статьи он уже загружал, и при следующем запуске он их пропускает.
latex
Я люблю читать What If, но для отрисовки формул автор использует JavaScript библиотеку, которая, естественно, в читалке не работает. Поэтому вместо неё я использую утилиту texvc из пакета mediawiki-math-texvc, генерирующую html для простых формул и картинки для сложных. Поэтому, чтобы работал экпорт What If нужно установить эту библиотеку.
Статьи с хабра
Выкачиванеи всего хабрахабра на читалку — это не то, что бы я хотел. Мне нужно откладывать отдельные длинные статьи, чтобы потом, когда будет настроение, их прочитать. Для этого я установил на свой
При нажатии на неё пост добавляется в ленту и с утра, перед тем, как я выйду из дома, calibre по крону загрузит статьи на устройство.
Доставка на читалку
В calibre есть утилита calibre-smtp, которую я и использую для того, чтобы отправить готовые книги на адрес kindle. А amazon, получив это письмо, отправляет файл по WiFi на читалку.
Настройка
Берете example.recipe, копируете в укромное место. Настраиваете ограничения на количество и возраст статей, а также путь до файла, в котором сохранять список загруженных статей. В свойстве feed_settings перечисляются настройки для каждого из источников статей. Можно указывать лишние настройки. А в свойстве feeds перечисляются названия источников и адреса лент в том порядке, в котором они должны быть в оглавлении.
В зависимости от ваших предпочтений можно либо настроить периодическую генерацию книг в calibre, либо делать это из командной строки:
ebook-convert example.recipe news.mobi --no-inline-toc --mobi-keep-original-images --output-profile=kindle
Нереализованные хотелки
Конечно скрипт не универсален и его можно расширять. Так, по аналогии с хабром, хочется иметь возможность отправлять посты из ЖЖ, произвольные страницы или выделенные фрагменты. Но я не уверен, что мне это настолько нужно, чтобы начать это делать.
Автор: kibergus