Потому нужен какой-то парсер, который будет брать информацию со страницы в соцсети и представлять её в виде rss-канала, который я могу отдать своей RSS-читалке.
Какой-то время я пользовался 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-приложение:
И дальше в разделе «Настройки» вас интересует поле «Сервисный ключ доступа»:
Это будет ваш access_token. То есть в итоге наша ссылка должна будет выглядеть как index.php?id=habr&access_token=5eb381185eb381185eb38118f95ed8e59455eb35eb3811803a40fe7530c290f98df6d0a. Ну, не забыв, конечно, имя сервера в начале подставить. Открыв ссылку в браузере, видим пригодную для скармливания RSS-читалке страницу.
За более подробными инструкциями советую сходить на страницу программы: https://github.com/woxcab/vkrss#rus.
Комментарии (28)
salnicoff
29.06.2019 20:09Замечательно. Еще бы получить доступ без регистрации и генерации всяких ключей-токенов…
aik Автор
29.06.2019 20:11Вон выше посоветовали rss-bridge. Непонятно, как я не вышел на него во время поисков — потому что там и фэйсбук есть, и инстаграмы всякие — что мне тоже надо читать.
salnicoff
29.06.2019 20:28Там VK нет. ;-(
aik Автор
29.06.2019 20:30github.com/RSS-Bridge/rss-bridge/tree/master/bridges — сюда нажмите, тут есть.
questor
29.06.2019 21:59+1Зашёл в комменты спросить про фейсбук, а тут уже и ответ подъехал. Сам тоже жёстко вычистил все сайты, оставил только rss для просмотра заголовков (прочитал заг — и достаточно), сам пользуюсь feedly.com
rombell
30.06.2019 05:28А умеет какое-нибудь средство не стену, а новости (vk.com/feed) с моего аккаунта в RSS?
UksusoFF
30.06.2019 12:41Тоже сначала пробовал woxcab/vkrss
Но что-то передавать токен гет параметром как-то палево.
Да и если вдруг понадобиться изменить токен, придеться переподписываться на все фиды.
Если подписок много, то упираешься в лимиты токена :(
В итоге накидал свой велосипед который хранит несколько токенов в .env и умеет кэшировать фид.
aik Автор
30.06.2019 12:44Ну тут уже вопрос паранойи и того, насколько там у вас персональные данные живут.
У меня три подписки вконтакте, так что даже переподписаться будет несложно, если вдруг что.
Vitalley
01.07.2019 15:11Сейчас Телеграм начал сильно замещать RSS, большинство информационных агенств дублируют в каналах информацию. Осталось только разделить все контакты на людей, чаты и каналы.
aik Автор
01.07.2019 15:32Я что-то не знаю тех, кто пишет вконтакте, а потом дублирует написанное в телеграм. Речь про обычных людей идёт. А «информационные агентства» во все каналы пишут, и в rss, и фэйбсук, и в телеграм, и ещё куда-нибудь…
Плюс телеграм в rss тоже не так просто конвертировать. Да и вообще там регистрироваться надо.Vitalley
01.07.2019 16:26Я не говорю что точная копия, но аналог это точно, немного усовременненный. И не именно Телеграм, а его каналы.
На счёт регистрации с вами согласен полностью
Плюс телеграм в rss тоже не так просто конвертировать.
Но возможно с помощью ботов.aik Автор
01.07.2019 16:46Для меня этот «усовремененый» телеграм в разы менее удобен, чем rss.
К примеру, нельзя скачать в оффлайн и читать там.
Систематизация никакая, всё в кучу валится. Молчу уж про древовидную структуру, но даже один уровень папок нельзя создать.
em92
01.07.2019 20:01Но возможно с помощью ботов
Публичные каналы можно без ботов. Тот-же RSS-Bridge умеет.
alexs963
Для тех кто не зарегистрирован в vk, но хочет получать rss есть rss-bridge
aik Автор
Надо будет посмотреть, мне ещё с фэйсбуком разбираться.
Но вконтакта я там в списке поддерживаемых не вижу, через плагины, возможно?
PS. github.com/RSS-Bridge/rss-bridge/tree/master/bridges — тут есть.
alexs963
Есть, его нужно включить в whitelist.txt. Можешь попробовать на моем инстансе
aik Автор
Да, я уже нашел там более развёрнутый список. Надо будет изучить, всё же один общий парсер лучше, чем под каждый сайт своё держать.
aik Автор
Развернул у себя — vk работает, а вот инстаграм и фэйсбук пока отказываются.
Инстаграм «Bridge returned error 429», фэйсбук — 404.
em92
Инстаграм часто выкидывает 429. Знаю как владелец хоста с rss-bridge. Тем не менее мост для Инстаграма работает https://feed.eugenemolotov.ru/?action=display&bridge=Instagram&context=Username&u=theromero&media_type=all&format=Html
По Фейсбуку скажу только то, что у него два моста. Facebook и FB2. Причины, почему для Фейсбука 2 реализации мне неизвестно
aik Автор
Что инстраграм вообще работает — это я в курсе, у alexs963 попробовал. Но у меня в это же время 429.
Второго фэйсбука подключил — там возможностей поменьше и пишет что-то на тему «не могу получать результаты через secure connection». А на попытку ввести имя требует ID. На попытку ввести id тоже требует id.
А багтрекер тамошний не очень сильно населён. Вопросы по bridge broken сводятся к «это всё похоже на баг 994». Даже если не похоже.