WebWost WebWostbeta

Отслеживание количества подписчиков в сообществе ВК

Описание способа отслеживания всех вступлений и выходов из сообщества

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":341874657,"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('');

}

На этом я хочу закончить данную статью :) 

0 Комментариев

Новый комментарий