Возможно, я сильно отстал от жизни, но я практически не пользуюсь соцсетями, а собирать информацию об обновлениях интересующих меня сайтов предпочитаю через RSS. Но совсем от соцсетей не избавиться, некоторые полностью перешли туда, закинув сайты (ну или rss-каналы на этих сайтах).

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

image

Какой-то время я пользовался feed.exileed.com, но это не слишком стабильная штука была, а последнее время вообще практически перестала работать. Потому задумался о замене.
Набрёл на сервис vkrss.com, но практически одновременно увидел и php-скрипт одноимённый: https://github.com/woxcab/vkrss, что сразу заставило прекратить поиски — я любитель self-hosted решений, на сторонние сервисы по возможности стараюсь полагаться только как на резерв, а не как на основу.

Умеет данный скрипт довольно много, для меня большая часть не нужна. Но может кому-то важно будет:

  • Получение RSS-ленты открытой стены: извлечение описания из разных частей (включая вложения) и построение заголовков на основе описания.
  • Также получение RSS-ленты закрытой стены при наличии токена с правами оффлайн-доступа, привязанного к профилю, которому открыт доступ к такой стене. Ниже описан один из способов получения токена.
  • Получение RSS-ленты, содержащей записи с различных открытых стен, которые соответствуют глобальному поисковому запросу.
  • Получение произвольного количества записей со стены.
  • Получение записей, опубликованных от кого угодно, от имени сообщества/владельца страницы или ото всех, кроме сообщества/владельца страницы.
  • Фильтрация записей по наличию или отсутствию подписи.
  • Фильтрация записей по соответствию и/или несоответствию регулярному выражению в стиле PCRE.
  • При желании исключение записей в сообществе, помеченных как реклама [по умолчанию отключено].
  • Извлечение хеш-тегов в качестве RSS-категорий.
  • При желании HTML-форматирование всех видов ссылок, изображений, переносов строк [по умолчанию включено].
  • Допустимо использование HTTPS, SOCKS4, SOCKS4A или SOCKS5 прокси-сервера для запросов.
  • У каждой записи в ленте указан автор (либо тот, кто подписан или опубликовал запись, либо тот, кто подписан или опубликовал исходную запись, если конечная запись является репостом исходной).
  • Возможность задать свой собственный разделитель с подстановками между родительским и дочерним записями (репосты).

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

В недостатках только то, что для работы данный скрипт требует регистрации на vk.com, без этого не получить токен доступа даже для чтения открытых страниц.

Исключительно для того, чтобы покормить паранойю, попробовал завести свежий аккаунт, но сломался на вводе номера телефона. Попробовал несколько различных сайтов для приёма sms, но ни один не подошел. На некоторые sms просто не приходила, на некоторые vk.com отказывался их посылать, «этот номер уже использовался» или «неправильный номер». Я не говорю, что это невозможно, просто далеко не так просто. Надёжней будет добыть физическую симкарту, не привязанную к вашей личности. Да и проще, наверное.

Но я всё равно уже зарегистрирован, так что всё вышеописанное было просто развлечением.

Вводные:

Имеется сервер на Ubuntu 16.04.6 LTS, где работает ttrss. Надо транслировать туда несколько страниц с сайта vk.com.

Страницы все открытые, без паролей, никаких закрытых страниц я не читаю.

Установка:

Тут всё элементарно — если не хочется ставить git, то скачиваем архив с гитхаба да распаковываем куда-нибудь в папку к вебсерверу, чтобы можно было браузером достучаться. Системные требования минимальные, достаточно практически одного только наличия php.
PHP>=5.2.2 (в т.ч. 5.3.X, 5.4.X, 5.5.X, 5.6.X, 7.X) с установленными по умолчанию поставляемыми расширениями mbstring, json, pcre, openssl.

Скрипт предпочитает использовать встроенные в PHP возможности по отправке запросов. Если у PHP отключена встроенная возможность загрузки файлов по URL (отключен параметр allow_url_fopen в конфигурации или параметрах интерпретатора), но при этом у PHP установлено расширение cURL, то именно оно будет использоваться для загрузки данных.
Настройка:

На странице программы достаточно понятная документация имеется по всем вопросам, потому я тут только кратко про свою задачу расскажу — читать публичные страницы.

Ссылка для получения rss-ленты базово должна выглядеть так: index.php?id=<страница>&access_token=XXXXXXXXX
Допустим, мы хотим читать Хабр. Тогда ссылка должна будет выглядеть как index.php?id=habr&access_token=XXXXXXXXX
Осталось только получить токен для доступа. Для чтения открытых страниц это элементарно.

Создаёте standalone-приложение:

image

И дальше в разделе «Настройки» вас интересует поле «Сервисный ключ доступа»:

image

Это будет ваш access_token. То есть в итоге наша ссылка должна будет выглядеть как index.php?id=habr&access_token=5eb381185eb381185eb38118f95ed8e59455eb35eb3811803a40fe7530c290f98df6d0a. Ну, не забыв, конечно, имя сервера в начале подставить. Открыв ссылку в браузере, видим пригодную для скармливания RSS-читалке страницу.

image

За более подробными инструкциями советую сходить на страницу программы: https://github.com/woxcab/vkrss#rus.

Комментарии (28)


  1. alexs963
    29.06.2019 20:04

    Для тех кто не зарегистрирован в vk, но хочет получать rss есть rss-bridge


    1. aik Автор
      29.06.2019 20:06
      +1

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

      PS. github.com/RSS-Bridge/rss-bridge/tree/master/bridges — тут есть.


      1. alexs963
        29.06.2019 20:09
        +1

        Есть, его нужно включить в whitelist.txt. Можешь попробовать на моем инстансе


        1. aik Автор
          29.06.2019 20:12
          +1

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


        1. aik Автор
          30.06.2019 20:23

          Развернул у себя — vk работает, а вот инстаграм и фэйсбук пока отказываются.
          Инстаграм «Bridge returned error 429», фэйсбук — 404.


          1. em92
            30.06.2019 20:57

            Инстаграм часто выкидывает 429. Знаю как владелец хоста с rss-bridge. Тем не менее мост для Инстаграма работает https://feed.eugenemolotov.ru/?action=display&bridge=Instagram&context=Username&u=theromero&media_type=all&format=Html


            По Фейсбуку скажу только то, что у него два моста. Facebook и FB2. Причины, почему для Фейсбука 2 реализации мне неизвестно


            1. aik Автор
              30.06.2019 21:21

              Что инстраграм вообще работает — это я в курсе, у alexs963 попробовал. Но у меня в это же время 429.
              Второго фэйсбука подключил — там возможностей поменьше и пишет что-то на тему «не могу получать результаты через secure connection». А на попытку ввести имя требует ID. На попытку ввести id тоже требует id.

              А багтрекер тамошний не очень сильно населён. Вопросы по bridge broken сводятся к «это всё похоже на баг 994». Даже если не похоже.


  1. salnicoff
    29.06.2019 20:09

    Замечательно. Еще бы получить доступ без регистрации и генерации всяких ключей-токенов…


    1. aik Автор
      29.06.2019 20:11

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


      1. salnicoff
        29.06.2019 20:28

        Там VK нет. ;-(


        1. aik Автор
          29.06.2019 20:30

          github.com/RSS-Bridge/rss-bridge/tree/master/bridges — сюда нажмите, тут есть.


        1. alexs963
          29.06.2019 20:30

          1. salnicoff
            29.06.2019 20:37

            Упс… А в описании не указан.


            1. aik Автор
              29.06.2019 21:00

              Там под списком есть ссылка «And many more, thanks to the community!»
              Я тоже сперва не заметил. :)


  1. questor
    29.06.2019 21:59
    +1

    Зашёл в комменты спросить про фейсбук, а тут уже и ответ подъехал. Сам тоже жёстко вычистил все сайты, оставил только rss для просмотра заголовков (прочитал заг — и достаточно), сам пользуюсь feedly.com


  1. SlavikF
    29.06.2019 23:44
    +1

    А нет ли какого-нибудь решения, чтобы можно было указать на статическую HTML страницу, и все измения страницы стримились в RSS?

    Раньше был такой сервис Page2Rss. Потом закрылся…


    1. alexs963
      30.06.2019 04:23
      +1

      Попробуй politepol.


  1. rombell
    30.06.2019 05:28

    А умеет какое-нибудь средство не стену, а новости (vk.com/feed) с моего аккаунта в RSS?


    1. DnAp
      30.06.2019 09:39

      У меня есть такая штука github.com/DnAp/VkToRSS
      Уже много лет пользуюсь.


      1. rombell
        30.06.2019 13:53

        Спасибо, похоже, это именно то, что надо. А фильтровать там записи можно? По источнику/признакам/ещё как-нибудь?


        1. DnAp
          30.06.2019 17:22

          Нет, я фильтрую средствами VK.
          Там код простой, можно свои фильтры в районе feed.php:68 написать.


  1. UksusoFF
    30.06.2019 12:41

    Тоже сначала пробовал woxcab/vkrss
    Но что-то передавать токен гет параметром как-то палево.
    Да и если вдруг понадобиться изменить токен, придеться переподписываться на все фиды.


    Если подписок много, то упираешься в лимиты токена :(


    В итоге накидал свой велосипед который хранит несколько токенов в .env и умеет кэшировать фид.


    1. aik Автор
      30.06.2019 12:44

      Ну тут уже вопрос паранойи и того, насколько там у вас персональные данные живут.
      У меня три подписки вконтакте, так что даже переподписаться будет несложно, если вдруг что.


  1. Vitalley
    01.07.2019 15:11

    Сейчас Телеграм начал сильно замещать RSS, большинство информационных агенств дублируют в каналах информацию. Осталось только разделить все контакты на людей, чаты и каналы.


    1. aik Автор
      01.07.2019 15:32

      Я что-то не знаю тех, кто пишет вконтакте, а потом дублирует написанное в телеграм. Речь про обычных людей идёт. А «информационные агентства» во все каналы пишут, и в rss, и фэйбсук, и в телеграм, и ещё куда-нибудь…

      Плюс телеграм в rss тоже не так просто конвертировать. Да и вообще там регистрироваться надо.


      1. Vitalley
        01.07.2019 16:26

        Я не говорю что точная копия, но аналог это точно, немного усовременненный. И не именно Телеграм, а его каналы.
        На счёт регистрации с вами согласен полностью

        Плюс телеграм в rss тоже не так просто конвертировать.

        Но возможно с помощью ботов.


        1. aik Автор
          01.07.2019 16:46

          Для меня этот «усовремененый» телеграм в разы менее удобен, чем rss.
          К примеру, нельзя скачать в оффлайн и читать там.
          Систематизация никакая, всё в кучу валится. Молчу уж про древовидную структуру, но даже один уровень папок нельзя создать.


        1. em92
          01.07.2019 20:01

          Но возможно с помощью ботов

          Публичные каналы можно без ботов. Тот-же RSS-Bridge умеет.