Pull to refresh

Читаем хабр, xkcd и rss на kindle

Reading time3 min
Views23K
С появлением электронной книги захотелось каждый день получать на неё пачку новостей, чтобы прочитать их по дороге на работу. Казалось бы, инструменты уже есть: бери и пользуйся. Но, как всегда, трудности в деталях:
  • Статьи надо посылать по расписанию
  • Надо посылать только новые статьи
  • Для разных сайтов нужны разные настройки
  • Картинки бывают не только в jpeg
  • Для xkcd надо уметь рендерить latex
  • На хабре статей много, а отсылать на книгу надо только избранные

Существующие решения

Send to kindle и Push to kindle

Достоинства: простота. Одним нажатием ставится дополнение к браузеру. Вторым нажатием отправляем страницу на читалку.
Недостатки: простота. Ну нельзя этим утилитам объяснить, что комментарии тоже интересно почитать и их надо включать в статью. Также нет периодического сбора статей.

Calibre

Достоинства: мощный конфигурируемый открытый инструмент. Можно заставить его делать именно то, что нужно.
Недостатки: чтобы он делал именно то, что нужно, требуется доработка рашпилем. Об этом и статья.

Требования

  1. Раз в день надо собирать накопившиеся статьи и отправлять на читалку.
  2. Во многих rss лентах записей не много, поэтому вариант с отдельной книгой на каждую ленту не рассматривался. Тем более, что в kindle обнаружилась удобное двухуровневое оглавление.
  3. Современные читалки поддерживают не только jpeg. Черно-белые png комиксы не надо пережимать, особенно не надо прозрачный фон заменять на черный: прямоугольники — это концептуально и стильно, но не совсем то, что я хочу рассматривать каждое утро.
  4. Нужна возможность отмечать статьи, которые я хочу прочитать на книжке. Их и только их надо переносить.
  5. Статьи желательно скачивать непосредственно перед отправкой, чтобы к ним накопилось побольше комментариев.
  6. 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 нужно установить эту библиотеку.

Статьи с хабра

Выкачиванеи всего хабрахабра на читалку — это не то, что бы я хотел. Мне нужно откладывать отдельные длинные статьи, чтобы потом, когда будет настроение, их прочитать. Для этого я установил на свой хостинг простейший скрипт, отдающий rss ленту по GET запросу и добавляющий в неё ссылки по POST запросу. Количество выдаваемых результатов ограничено, старые записи выкидываются. Авторизации никакой нет, но и адрес скрипта я не скажу. Желающие могут установить его у себя, предварительно переименовав. К серверному скрипту прилагается greasemonkey userscript, работающий в firefox и opera и добавляющий к постам кнопку 2kindle:
            
При нажатии на неё пост добавляется в ленту и с утра, перед тем, как я выйду из дома, 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

Нереализованные хотелки

Конечно скрипт не универсален и его можно расширять. Так, по аналогии с хабром, хочется иметь возможность отправлять посты из ЖЖ, произвольные страницы или выделенные фрагменты. Но я не уверен, что мне это настолько нужно, чтобы начать это делать.
Tags:
Hubs:
Total votes 9: ↑9 and ↓0+9
Comments13

Articles