Читаем вконтакте через RSS
Возможно, я сильно отстал от жизни, но я практически не пользуюсь соцсетями, а собирать информацию об обновлениях интересующих меня сайтов предпочитаю через RSS. Но совсем от соцсетей не избавиться, некоторые полностью перешли туда, закинув сайты (ну или rss-каналы на этих сайтах).
Потому нужен какой-то парсер, который будет брать информацию со страницы в соцсети и представлять её в виде 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.