readRss — local rss reader as browser extension

    Это rss читалка в виде браузерного расширения (js-приложение), которое позволяет в дальнейшем читать rss-потоки вообще без наличия интернета, даже картинки заранее скачиваются. А теперь подробнее.

    Скриншот, как это выглядит:

    image

    В недалёком 2012 году, когда GR ушёл, я стал думать, как же мне дальше читать новости. Просмотрел кучу разных читалок. Среди них были очень достойные, которыми можно пользоваться, но у них было много разных минусов — то нужно платить, то нет нужных функций, и т.д.

    Как front-end developer, я решил написать на js приложение, которое бы работало локально, подключаясь к браузеру. Это удобно в первую очередь тем, что, например, проблема авторизации уходит на второй план. Есть rss-потоки, которые работают, только если вы авторизованы на сайте. Например, тот же живой журнал. В данном случае все подзамочные записи (записи для друзей) будут отлично приходить в читалку.

    Во-вторых, это удобно тем, что браузер представляет собой как-бы платформу, основу, в которой есть много готового. Доступ к базе данных sqlite, загрузка файлов, иконка приложения.

    Интерфейс я честно подглядел у гуглридер, немного его доработал.

    В те годы я создал похожий проект для чтения форумов. Ядро было написано на php, но мне это показалось уже устаревшим и плохоразвиваемым, я сделал ставку на javascript. И я взял оформление с этого проекта, добавил ядро на js и встроил в расширение. И вот что получилось.

    Сейчас это расширение представляе собой бету-версию, с малым количеством багов и работоспособную, я ей пользуюсь для чтения RSS, поэтому когда она стала стабильной, решил поделиться с общественностью. Можете пользоваться, поставив как расширение (через папку в developer mode). Я не гарантирую супер-волшебства дизайна при работе этого расширения, но оно работает, это я могу сказать точно.

    Работают клавиши J, K, V, M


    J — следующая запись
    K — предыдущая
    V — открыть ссылку в новой вкладке
    M — пометить как непрочитанной

    Добавить поток можно тремя способами


    image

    1. Указать точный адрес потока.
    2. Указать просто url-страницы. Вам будет показан список найденных там потоков и вы можете, оставив нужные галки, подписаться.
    3. Импортировать OPML-файл. Импорт работает по очереди, поэтому запаситесь терпением.

    Тех детали


    Поддерживаются потоки разных типов — rss, atom, rdf. Поддерживается почти всё, что есть внутри — вложения, geo, категории, комментарии, автор и т.д.

    Вложения будут показаны в списке справа, и если это картинка, то показана как картинка:

    image

    Если такая картинка уже есть в тексте статьи, то будет просто название, чтобы не дублироваться:

    image

    Видео и аудио — покажется плеер. Есть список подписок и можно отписаться. Есть быстрый поиск.

    image

    Все картинки в статьях грузятся в базу и отображаются потом при просмотре. Сделано это хитро, картинка грузится из базы только если она появляется в зоне просмотра. Далее, если она уходит из зоны просмотра, она выгружается. Этим наверняка будет экономиться память.

    В дальнейшем картинка кешируется на неделю, и если больше не нужна, удаляется из базы автоматом. Папки предусмотрены в архитектуре, но пока не реализован интерфейс при добавлении потока, в какую папку добавлять. На текущий момент сделана только основа, многое не сделано, но планирую по мере сил и возможностей это добавлять.

    » Исходный код выложен на github

    По сути, интерес представляет библиотека rss-парсера. Её я создавал сам с нуля, потому что готовой нет, особенно с теми возможностями, которые я туда добавил.

    Применяется sanitize для очистки html от всего лишнего, что там не нужно для чтения.

    Конечно, мой говнокод мало будет кому интересен, но если и будете использовать, то пишите ссылку на меня, чтобы было понятно, кого бить =)

    Планы


    Планов много. Хотя и реализован минимальный алгоритм по подсчёту времени дальнейшей загрузки потока, но он очень грубый и глупый. В планах есть его сделать умным, чтобы тратилось меньше трафика на проверку. Хотя и сейчас уже применяется кеширование и выдача заголовков, так что по большей части идёт ответ 304. На первом этапе была цель оперативно поставлять информацию, без задержек.

    В планах, конечно же, добавить много интерфейсных удобных штучек — удалить поток, перенести в другую папку и т.п.

    Спасибо.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 31
    • 0
      Огромный минус локальных (в т.ч. и этот браузерный) читалок — необходимость быть онлайн для получения всех сообщений ленты. Допустим, лента отдает последние 10 записей. В день публикуется 15 записей. Тогда, если сутки не включать комп, получится, что потеряли как минимум 5 записей. Именно по этой причине серверные читалки предпочтительнее.
      • 0
        У меня в планах создать код на nodejs и поместить на сервер, чтобы работало без локали, а потом синхронизировалось. Код «серверный» менять не придётся, в этом плюс js.
        • 0

          А зачем писать свой сервер для скачивания и хранения RSS? Можно воспользоватся API Tiny Tiny RSS, в отличии от вашего решения, TT-RSS более удобный вариант, т.к. есть мобильные клиенты. А если не хватит возможностей API, можно посмотреть как работает эта программа, которая использует свой плагин для TT-RSS.

          • 0
            Скажите пожалуйста, ваш TinyTiny Rss умеет грузить картинки для локального просмотра?
            • 0

              Вы неправильно сформулировали вопрос. TT-RSS не локальная программа и соответственно для локального просмотра она ничего не грузит. Но она эти изображения кэширует у себя, и вы очень просто можете сделать клиент для нее, который будет скачивать все изображения для локального просмотра. А если вы установите этот плагин, то вы сможете не только просматривать содержимое rss ленты, но и читать полный текст статьи.

              • 0
                Понятно. То есть, без интернета я не то что картинки, но даже текст не смогу почитать. Сейчас. О боже, какой ужас.

                • –1

                  По моему Вы не понимаете что я хочу донести до вас. Ваша программа и TT-RSS не конкуренты, т.к. одна из них – серверная читалка, а другая – локальная. Но Вы написали что хотите так-же сделать сервер для скачивания статей, и вот как раз вместо того чтобы писать свое решение, ваше расширение можно прикрутить к TT-RSS, т.к. это будет куда более удобно для пользователей.
                  P.S. А FeedReader, кстати, может подключится к TT-RSS, скачать все статьи вместе с картинками, и после этого вы можете их читать без интернета, то есть, делать все то-же что вы может делать ваше расширение.

                  • 0
                    У меня совершенно нет желания пользоваться сторонними сервисами, которые могут умереть в любой погожий день.
                    • –1

                      TT-RSS не сторонний сервис, это self-hosted программа, вы можете установить её на свой сервер, и умрет она только с вашим сервером. Да, её создатель может забить на неё, но даже после этого она не не превратиться в тыкву, разве что обновляться не будет. Кстати, TT-RSS существует и поддерживается уже около 10 лет и не похоже что она скоро умрет.

                      • –1
                        TTRSS написан на PHP, а у меня ставка на JS.
                        • –1

                          А какое отношение имеет язык программирования к JSON API? Не всё ли равно?

      • +1
        Зачем? Если есть замечательный Feedly, например.
        Или локальность — самоцель?
        • 0
          Локальность — преимущество, когда нет интернета, и про это всё описано в статье =)
          • 0

            Я недавно столкнулся с такой проблемой в самолёте, когда захотелось почитать хабр. Моё мобильное приложение для чтения RSS скачивало новости только до хабраката.


            Некоторые читалки умеют скачивать ещё и статью по ссылке, но ни один из них не скачивал комментарии (которые, как известно, могут быть интереснее статьи).


            Для себя я решил проблему так: я написал и запустил на своём сервере программу, которая скачивала RSS хабра, заменяла в нём краткую версию статьи на полную, включая комментарии, и публиковала получившуюся RSS.


            RSS-потоки доступны по ссылкам: https://alexbers.com/rss/habr.rss и https://alexbers.com/rss/geektimes.rss. А исходный текст программы вот: http://pastebin.com/6tr7kzY2 (130 строк на питоне)

            • 0
              Недавно пришёл к выводу, что не каждая статья достойна, чтобы скачивать её полностью, и уж особенно читать. На том же хабре много рекламы и воды.

              Поэтому достаточно чтение заголовков.

            • 0
              А вы не рассматривали self-hosted решения? Тот же Tiny Tiny RSS довольно приятная штука. Feedly theme и плагины делают его весьма и весьма удобным. Опять же есть api для написания своих клиентов.
              • 0
                Просмотрел кучу разных читалок. Среди них были очень достойные, которыми можно пользоваться, но у них было много разных минусов — то нужно платить, то нет нужных функций, и т.д.
                • 0
                  Я просто никак не могу уловить в чём же киллер фича вашего агрегатора. Набор функций вполне стандартный, а реализация в виде расширения для браузера лишь накладывает дополнительные ограничения. По мне куда как проще добавить функционал плагином к существующей читалке.

                  То есть вам просто было в удовольствие написать свой агрегатор.
              • 0
                Но ведь RSS загружается из интернета, какой толк в RSS читалке без интернета? Архив читать?
                • 0
                  Есть места, где нет интернета. Моя читалка позволяет не только читать текст, но и картинки смотреть без интернета. Скрин:

                  image

                  При этом около картинки появляется ссылка L, она будет вести на интернет-ссылку, которая открывается в новой вкладке (чтобы отправить другому человеку, например).
              • 0
                BazQux тоже, например
              • +1
                Неустранимая проблема всего локального — синхронизация.

                В ситуации, когда у моего ноутбука внезапно умер диск, я его случайно уронил и разбил вдребезги, или банально украли — вся моя коллекция из 300+ фидов (которую я тщательно собирал и фильтровал много лет) умрет вместе с ним.
                • 0
                  Есть такая вещь — бекапы.
                • 0

                  Для меня Feedly + Pocket решают эту проблему полностью.

                  • 0
                    free — Up to 100 sources

                    а у меня намного больше потоков, около 900

                    и платить 300 руб в мес — дорого
                    • 0
                      У меня в планах создать код на nodejs и поместить на сервер, чтобы работало без локали, а потом синхронизировалось. Код «серверный» менять не придётся, в этом плюс js.


                      А за сервер платить собираешься? Или выйдет дешевле 300 руб.?
                      • 0
                        Хостинг у меня уже есть и я за него плачу деньги (мой сайт). Поэтому что-то дополнительно покупать не придётся.

                        Конечно, тем, у кого нет хостинга, приходится пользоваться сторонними сервисами.

                        Но я давно уже не пользуюсь сторонними сервисами, или стараюсь минимизировать их употребление, обязательно дублируя их на свой хостинг.

                        Помню, использовал скриншотер, а через пару лет он умер и даже не предупредил, в результате все картинки сгинули. Теперь мои скриншоты только на моём сайте http://e-ivanov.ru/p/1610/57.png (делается такая картиночка за 2 секунды)
                  • 0

                    Есть хобби проект с нужными киллер-фичами — Мегалента. Берет из рсс адреса, полноценно рендерит на сервере и присылает на ios-устройство.

                    • 0
                      Это замечательно.
                    • 0
                      Интересное решение.
                      Но для меня применимость предварительной загрузки фотографий имеет смысл только в телефоне, и для этого я использую Press (android). На быстром вай-фае загрузил все ленты и читаю себе в дороге.
                      • 0
                        Yandex-браузер сделал поддержку расширений. То есть, я могу в телефоне читать с помощью моей читалки, без интернета.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.