Как удобно читать Хабр (и не только) на электронной книге или на мобильном

в 12:01, , рубрики: Firefox, instapaper, vimperator, мобильная версия, хабрахабр, электронные книги, метки: , , , ,

Как удобно читать Хабр (и не только) на электронной книге или на мобильном

Я люблю читать Хабр (а также ЖЖ, roem.ru, новости рамблера и ещё много чего) на своей любимой электронной книге Nook и, изредка, на своём мобильном на андроиде. На читалке я читаю, чтобы не портить глаза, и не напрягаться лишний раз, сидя за компьютером, а на мобильном от безысходности стоя в какой-нибудь очереди.

Я сделал страницу readitlaterlist.com/unread (сервис из серии «прочту позже») домашней на моей читалке, поставил приложение на мой телефон, и удобно добавляю топики с Хабра (ЖЖ и прочих), которые хочу почитать на читалке, с помощью плагина для Firefox'а.

Казалось бы, всё замечательно, но вот беда: обычная версия Хабра грузится в браузере моего Нука больше минуты, притормаживает и из-за вёрстки под обычные экраны необходимо вручную центровать колонку с текстом. Впрочем, неудобства я испытывал с большинством полноразмерных страниц различных СМИ и блогов.

Я пробовал мигрировать на Instapaper, т.к. он поддерживает выгрузку в epub и mobi (можно даже слать себе на email, например, для автоподгрузки на Kindle), но и тут проблема: все сервисы при вытаскивании текста статьи с Хабра режут комментарии (Хабр без комментариев?!?!).

В конце-концов, я пришёл к тому, что перед отправкой в ReadItLater я вручную правил url поста на хабре, чтобы переключиться на мобильную версию этого поста (сейчас это лишь добавить m., а раньше приходилось удалять /<имя блога>/, ставить posts, а также добавлять m.). А на сайтах СМИ я выискивал ссылки вида «версия для печати» или «версия для PDA».

В конце-концов, мне надоело делать эту обезьянью работу и моё терпения лопнуло. Я задумал писать плагин для firefox'а. В процессе поисков я наткнулся на плагин для vimperator'а (плагин для firefox'а, затачивающий его под управление с клавиатуры, о нём на хабре: раз, два): readitlater.js. Плагин содержит ошибку в одной команде и жуткие комментарии на японском, но если вооружиться google translat'ом и разобраться, то дело своё он делает.

К тому моменту я уже подсел на vimperator (всем очень советую!) и решил допиливать именно readitlater.js.

Сам плагин добавляет несколько команд:

  1. ril a[dd] — добавить текущую страницу в ReadItLater (или ril a url title добавить произвольный url с произвольным заголовком)
  2. ril o[pen] — открыть страницу из списка непрочтённых в ReadItLater (с перебором по TAB)
  3. ril r[ead] url — удалить url из списка непрочтённых в ReadItLater (с перебором по TAB)
  4. Есть ещё ril get (вытащить список прочтённых), ril stats (посмотреть статистику)

Оказалось, что основным языков написания плагина являлся Javascript и код плагина достаточно ясен. В итоге я поработал над плагином и в дополнение к имеющимся командам я добавил команду ril m[add]. Она работает как ril a, но для ряда сайтов перед добавлением меняет url на url мобильной версии или версии для печати.

Кроме того, я поправил баг в ril get и сделал так, что ril read без url помечает прочтённой текущую страницу. Кроме того я добавил README и худо-бедно перевёл внутреннюю документацию с японского.

На данный момент плагин поддерживает следующие сайты:

  1. habrahabr.ru
  2. livejournal.com (в т.ч. темы дня)
  3. www.trud.ru
  4. lenta.ru
  5. roem.ru
  6. www.guardian.co.uk
  7. news.rambler.ru

И сейчас туда без особого труда можно добавить новые.

Уже 2 месяца пользуюсь плагином и не нарадуюсь :)

Установка очень проста:

  1. Ставим vimperator через менеджер дополнений Firefox
  2. Создаём папочку ~/.vimperator/plugin/ (или %HOME%vimperatorplugin, если вы используете Windows) и кладём в неё файл readitlater.js (при скачке выбираем ссылку RAW)
  3. Перегружаем firefox командой :restart
  4. Наслаждаемся

Результаты моих трудов можно видеть здесь: github.com/petRUShka/readitlater.js

Если кому-то хочется добавить поддержку любимых сайтов, то сделать это можно следующим образом:

  1. форкнуть мой репозиторий
  2. Добавить пару строчек в функцию addItemByArgsWithSubstitution. Пример для habrahabr'а:
    	if(url.match(/://habrahabr.ru/))
    	  args["url"] = url.replace("habrahabr.ru", "m.habrahabr.ru").replace(/.ru/.+/(d+)/, ".ru/post/$1").replace(/#habracut$/, "");
    	
  3. Сделать pull request

Если кто-то заинтересован, в том, чтобы читать статьи не онлайн, а оффлайн, то можно воспользоваться скриптом миграции из ReadItLater в Instapaper. Например, можно делать так перед выгрузкой в epub. Кстати, Instapaper не режет комментарии в мобильной версии !! Так что можно смело выгружать.

В будущем ради это функциональности я планирую добавить в плагин поддержку Instapaper. За сим откланяюсь.

Автор: mpetrunin


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js