Отслеживание количества подписчиков в сообществе ВК
Описание способа отслеживания всех вступлений и выходов из сообщества
Al-Sher
Сегодня я наткнулся на API для работы с сообществом и меня это заинтересовало: Ведь некоторым пользователям было бы интересно узнавать и вести какую-то публичную статистику о кол-ве подписчиков в их сообществе. А так же меня заинтересовало то, какие методы будут доступны с access_token сообществом, но они меня, к сожалению, не сильно обрадовали...
Давайте подумаем над реализацией функционала записи юзеров сообщества в нашу БД. Конечно можно вызывать "публичный" методgroups.getById, который позволяет получатьmembers_count, каждый день, но, если стараться делать информацию актуальной, данный способ не совсем "хороший". К счастью ВКонтакте реализовалиCallback API для сообществ, позволяющий уведомлять ваш сервер о следующих событиях:
- Новое сообщение;
- Добавлена новая фотография;
- Добавлен новый комментарий;
- Добавлена аудиозапись;
- Добавлена видеозапись;
- Добавлена запись на стене;
- Добавлено новое обсуждение...
И многие другие, описывать их всех я не вижу смысла, так как для нас важны лишь следующие два события:Вступление в сообщество иВыход из сообщества.
Callback API позволит отправлять вашему серверу запрос при необходимых действиях, поэтому нам не обязательно постоянно стучаться в API и сравнивать количества пользователей.
Давайте зайдем в настройки API нашего сообщества и перейдем во вкладку "Работа с API" и выберем "Callback API".
Тут нас просят ввести адрес сервера, то есть страницы, куда будут идти запросы. Нам необходимо сначала вывести строку, которая описана в "Строка, которую должен вернуть сервер:". Заходим через FTP на наш сайт, заходим в нужный файл и вводим эту строчку. Далее нажимаем "Подтвердить" и если всё пройдет успешно, то выйдет уведомление "Адрес сервера успешно сохранён" и значит мы можем продолжать работу.
Давайте посмотрим что присылает нам ВК. Для этого пишем следующий код в наш файл:
if(isset($_REQUEST)) {
$data = file_get_contents('php://input');
$f=fopen(__DIR__.'/vk.txt','a+'); // Открываем файл для записи
fwrite($f,$data); // Записываем ответ сервера
fclose($f); // Закрываем файл
echo 'ok'; // Сообщаем серверу, что всё в порядке
}
Этот код запишет в файл vk.txt данные, отправленные сервером ВК. Давайте теперь выйдем и зайдем в наше сообщество и посмотрим ответ. В нашем файле, после проделанных действий, должно быть записано нечто такое:
{"type":"group_leave","object":{"user_id":1,"self":1},"group_id":67079968} {"type":"group_join","object":{"user_id":341874657,"join_type":"join"},"group_id":67079968}
Ну вот мы и узнали, что нам отправляет сервер, осталось лишь разобрать запрос и реализовать запись. О том, как записывать в БД, я описывать в этой статье не буду, но вот разбор запроса опишу.
Для начала, для большей безопасности, было бы хорошо записать секретный ключ, который ВК будет отправлять нам. Для этого в настройках Callback API записываем его и сохраняем.
Всё, теперь можно и начать разбор ответов ВК. Вот небольшой набросок кода, который будет осуществлять проверку на вход и выход пользователя:
if(isset($_REQUEST)) {
$data = json_decode(file_get_contents('php://input'));
if($data->secret=='Секретный_ключ') {
if($data->type=='group_join') {
// Добавляем юзера в БД
// Получить id юзера можно с помощью $data->object->user_id
} else {
// Удаляем юзера по id
// Получить id юзера можно с помощью $data->object->user_id
}
} else exit('');
}
На этом я хочу закончить данную статью :)