Столкнулся с задачей мониторинга активности пользователей всем известной социальной сети. Передо мной стояла задача собирать данные о количестве пользователей, находящихся онлайн в определенной группе или сообществе.
Инструменты
- PHP 5 (Zend Framework)
- Vk API
- Cron
Объясню свой выбор — Vk API — дело в том, что получить количество пользователей онлайн можно и без API, а спарсив страницу поиска по пользователям с фильтром сообщества и метки онлайн, однако я предпочел не возится с авторизацией и разбором тегов, а применить программный интерфейс.
Архитектура
Реализацию условно можно разделить на 2 части. Первая — скрипт, который на id группы находит количество пользователей онлайн и записывает его в БД. Вторая — админка, позволяющая добавлять новый группы для мониторинга и просматривать статистику по уже добавленным группам.
Что бы статистика была актуальна, необходимо как можно чаще мониторить состояние группы в текущий момент времени. Скрипт стоит повесить в Cron, пусть он у нас вызывается каждых 5 минут.
Раскрутка группы в ВК: Как подключить CallBack API и не потерять клиентов ВКонтакте
Обзор Vk API
Если с админкой все более-менее понятно, то вот со скриптом сбора статистики не совсем. Ознакомившись с методами, предоставляемыми API, прихожу к первому решению.
Первое решение (неверное)
С помощью методов groups.getMembers , users.get получаем список участников группы и их статус — онлайн или оффлайн. Далее считаем сколько пользователей онлайн. Все просто. Однако кажущаяся простота в результате приносит ряд проблем.
Все бы хорошо, если у Вас группы маленькой численностью (до 1000 человек). В противном случае упираемся в ограничения API — за один раз можно получить информацию только о 1000 пользователей. Что нам это ограничение — можно же вызывать метод в цикле, но нет. Производить вызовы API разрешено не чаще 3 запросов в секунду.
Посчитаем примерное количество запросов которое понадобится. Возьмем сообщество habrahabr Vk. Оно насчитывает более 40.000 пользователей, следовательно нам понадобится 40 запросов чтобы получить членов сообщества и 40 запросов — их статус.
Отправляемся искать новое решение.
Второе решение (верное)
Обнаруживаем в документации метод execute
Универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты.
Принимает он на вход строку с кодом написанным на так называемом VKScript (похож на javascript). Проблема лишь в том, что вменяемая документация по этому методу и самому языку отсутствует. Вероятно решение найдено, так что можно углубится в изучение API Vk и VKScript в частности.
Работа с API
Скачиваем класс для работы с API, предлагаемый разработчиками. Я привел его только к более приемлемому виду, чтобы он вписался в coding style применяемый в Zend Framework.
_accessToken = $accessToken; > public function api($method, $params = array()) < $params[‘access_token’] = $this->_accessToken; $query = $this->_apiUrl. $method . ‘?’ . $this->_params($params); $responseStr = file_get_contents($query); if(!is_string($responseStr)) < return null; >$responseObj = json_decode($responseStr); return $responseObj; > private function _params($params) < $pice = array(); foreach($params as $k=>$v) < $pice[] = $k.’=’.urlencode($v); >return implode(‘ > >
Аутентификацию и авторизацию я описывать не буду, так как она осуществляется через OAuth, много информации в рунете, да и на странице Vk API.
Описание и примеры работы с api вконтакте
Осуществим пробный вызов к API — получим первые 20 постов в группе habrahabr
public function wallsAction() < //. $api = new Vkapi_Model_Api($accessToken); $response = $api->api(‘wall.get’,array(‘owner_id’ => ‘-20629724’)); $this->view->walls = $response->response; >
Сейчас сделаем тоже самое, только через метод execute
public function wallsAction() < //. $api = new Vkapi_Model_Api($accessToken); $code = » var walls = API.wall.get(< owner_id : -20629724 >); return walls; «; $response = $api->api(‘execute’,array(‘code’ => $code )); $this->view->walls = $response->response; >
В итоге получаем один и тот же результат.
Одно что плохо — это то, что мы смешали код VKScript и PHP. Выглядит это очень плохо. Займемся рефакторингом.
Было бы неплохо, чтобы каждый скрипт хранился в отдельном файле и вызвать его можно было бы одной функцией. Еще необходимо предусмотреть то, что в последствии нам еще понадобится передавать какие-то данные в этот скрипт ( сейчас например owner_id жестко забит в код).
Выносим VKScript в отдельные файлы
В корне нашего модуля создадим папку с названием «vkscripts», в нее будем складывать наши скрипты (например getWalls.vks). Пропишем путь к скриптам в config-файле application.ini
vkapi.scripts.path = APPLICATION_PATH «/modules/vkapi/vkscripts»
Нам нужен класс, который был бы удобен для вызова скриптов, расположенных в этой директории. Воспользуемся возможностями PHP5, а именно магическим методом __call. По названию вызываемого метода мы будем искать скрипт с таким названием.
Исходник класса
_api = $api; > public function __call( $methodName, $arguments ) < $script = $this->_getScript($methodName); if(count($arguments))< $script = $this->_prepareParams($script, $arguments[0]); > $response = $this->_api->api(‘execute’, array(‘code’ => $script)); if( $error = $this->_getError($response) )< throw new Exception($error->error_msg, $error->error_code); > return $response->response; > private function _getError($response) < if( isset($response->error) )< $error = $response->error; return $error; > return null; > private function _getScript( $name ) < $scriptsPath = Zend_Registry::get(‘vkapi_config’)->scripts->path; $filePath = $scriptsPath . ‘/’ . $name . ‘.vks’; if(is_file($filePath)) < $script = file_get_contents($filePath); return $script; >return null; > >
Итак, давайте что-нибудь сделаем с этим классом.
В папку vkscripts кладем файл getWalls.vks с таким содержимым
var walls = API.wall.get(< owner_id : -20629724 >); return walls;
public function wallsAction() < //. $api = new Vkapi_Model_Api($accessToken); $executor = new Vkapi_Model_Executor($api); $response = $executor->getWalls(); $this->view->walls = $response->response; >
Мы получили тот же результат, только налицо существенные плюсы: мы разнесли код в отдельные файлы, сделали его более читабельным, упростили вызов execute.
Следующий шаг — добавление возможности передавать параметры в наш скрипт. Воспользуемся для этого неким представлением. В коде VKScript вначале при необходимости что-то получить на вход будем писать так:
var groupId = %GROUP_ID%; var offset = %OFFSET%; // . здесь пошел наш код
А в нашем классе будем перед вызовом api с этим кодом заменять %VAR_NAME% на значение переменной.
Допишем наш класс Executor следующим образом
Исходник доработанного класса
_getScript($methodName); if(count($arguments))< $script = $this->_prepareParams($script, $arguments[0]); > $response = $this->_api->api(‘execute’, array(‘code’ => $script)); if( $error = $this->_getError($response) )< throw new Exception($error->error_msg, $error->error_code); > return $response->response; > // . private function _prepareParams($script, $params) < foreach ($params as $key =>$value) < $script = str_replace(‘%’ . strtoupper($key) . ‘%’, $value, $script); >return $script; > >
В контроллере же при необходимости передачи параметром пишем следующее
public function wallsAction() < //. $api = new Vkapi_Model_Api($accessToken); $executor = new Vkapi_Model_Executor($api); $response = $executor->getWalls(array( ‘group_id’ => -20629724, ‘offset’ => 0 )); $this->view->walls = $response->response; >
Что соответственно подставит в наш скрипт вместо %GROUP_ID% и %OFFSET% переданные значения.
Вот как выглядит структура модуля
Получаем количество пользователей онлайн
Cуществует ограничение на вызов методов API в execute . Лимит 22 вызова (найден практически). Так же в паутине я не нашел информации о том, что и на другие операторы (например сложение, вычитание ) тоже существуют ограничения, однако они есть. Поскольку если пробегать по массиву пользователей и считать количество онлайн я получал ошибку о превышенном числе операций, то было решено возвращать из execute полный список пользователей, после чего уже на стороне моего сервера считать их количество.
Из-за ограничения в числе запросов к API в методе execute нам все равно придется выполнить как минимум 1 запрос на 10.000 участников группы, потому что для обработки 1.000 требуется 2 запроса.
Вот скрипт который получился
$count = 1; $offset = 0; $nowOnline = 0; while($count > $offset)< $users = $executor->getOnline(array( ‘group_id’ => $groupId, ‘offset’ => $offset )); $count = $users->count; $offset = $users->offset; foreach ( $users->users as $online) < if($online)< $nowOnline++; >> >
Итак протестим и увидим — данные полученные через API почти совпадают с данными с vk.com, возможно эта неточность из-за кешей, или по другой причине, не видной извне.
Замечания
VKScript не поддерживает функции, операторы инкремента, декремента.
Итог
Мы разработали инструментарий для работы с API vk.com через метод execute. С помошью его можно разрабатывать приложения сбора статистики и т.д. причем выглядеть это будет очень даже приглядно. Прикрутить к этому всему интерфейс — это уже тривиальная задача. В конце замечу, что другая социальная сеть Facebook предоставляет доступ к исполнению кода, написанного на языке называемом FQL (Facebook Query Language, схож с SQL), у которого возможностей явно побольше чем у VKScript со всеми его ограничениями.
Ссылки по теме
- Каталог программ Microsoft: Visual Studio 2012
- Купить программу Microsoft SQL Server 2012
- Каталог программ Microsoft
- Задать вопрос ONLine по покупке программ в интернет магазине ITShop
- Специальное предложение Microsoft Office! Скидки от 10% до 25%!
- Получите 10 % скидку на Oracle Database 11g
11.2012 | ||
Источник: www.interface.ru API Вконтакте: автопостинг записей в сообщество ВконтактеСегодня мы с вами рассмотрим скрипт для автопостинга записей с сайта в сообщество Вконтакте. Вы научитесь работать с API вконтакте, создавать свои приложения, писать парсеры для отправки запросов в Вконтакте. Всю работу мы будем прописывать на языке PHP. Для начала нам нужно создать приложение для настройки взаимодействия сайта через API. Ссылка на страницу с конструктором для создания приложения – https://vk.com/apps?act=manage Для связи Сайт -> API Вконтакте нам нужно создать Standalone-приложение После создания приложения вам нужно зайти в настройки созданного приложения. И выписать из настроек данные: “id приложения“, “Защищённый ключ“, “Сервисный ключ доступа“. После этого включаем наше приложение, включаем Open API и в появившихся полях указываем домен на котором будет расположен парсер. Вот так должны выглядеть ваши настройки. 1. После создания приложения нам нужно получить специальный ключ для работы интеграции.Нам нужно получить секретный ключ и настроить права. Формируем URL подставляя данные своего приложения и вставляем его в браузер. https://oauth.vk.com/authorize?client_id=ID_ПРИЛОЖЕНИЯredirect_uri=https://api.vk.com/blank.htmlresponse_type=code 2. Запрашиваем access_token . Формируем новый URL, подставив client_id , client_secret и полученный выше код. В ответе получаем access_token . https://oauth.vk.com/access_token?client_id=ID_ПРИЛОЖЕНИЯ redirect_uri=https://api.vk.com/blank.html /* токен для запросов */ public $token = «97a1b7bff17bd61309c109ac7e1231dasdfsdfe2dac84ac0254961fe8a5121e553b95eca754e8e889f7dbb4fe»; /* id приложения */ public $owner_id = -209887634; public $versionVk = «5.131»; /* ДЛЯ ОТПРАВКИ ЗАПРОСОВ */ public function sendQueryVk($method, $dataQuery) < $dataQuery[«access_token»] = $this->token; $dataQuery[«from_group»] = «1»; $dataQuery[«owner_id»] = $this->owner_id $dataQuery[«v»] = $this->versionVk; $ch = curl_init(«https://api.vk.com/method/»); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, [«Content-Type:multipart/form-data»]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo «Ошибка отправки запроса: » . curl_error($curl); return false; >else < return json_decode($html, true); >> > Теперь давайте сделаем запрос. Массив $arrQueryпередаётся в качестве второго аргумента для метода sendQueryVk. Данный метод делает API запрос, который передаёт данные на сервера Вконтакте, после чего добавляет в указанное сообщество новую запись с текстом “Тестовая запись”. $vkBot = new BotsTime_AutopostingVk(); $arrQuery = [ «message» => «Тестовая запись», ]; $dataResult = $vkBot->sendQueryVk(«wall.post», $arrQuery); Автопостинг записей с изображениями в группу ВконтактеДля автопостинга нам придётся полностью перебрать ранее изученное решение. Мы создадим дополнительные методы и перепишем уже созданные. Новое решение вы сможете использовать как для простых постов, так и постов с изображениями. Класс мы оставляем – BotsTime_AutopostingVk. В новой версии мы только переписываем методы. Отправка POST запросов в API Вконтакте/* method — название метода (информация в документации Вконтакте) dataQuery — массив с параметрами запроса */ public function sendQueryVk_POST($method, $dataQuery = array()) < /* добавляем токен в массив запроса */ $dataQuery[«access_token»] = $this->token; /* добавляем версию API вконтакте */ $dataQuery[«v»] = $this->versionVk; $ch = curl_init(«https://api.vk.com/method/»); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, [«Content-Type:multipart/form-data»]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo «Ошибка отправки запроса: » . curl_error($curl); return false; >else < return json_decode($html, true); >> Отправка GET запросов в API Вконтактеpublic function sendQueryVk_GET($method, $dataQuery = array()) < $dataQuery[«access_token»] = $this->token; $dataQuery[«v»] = $this->versionVk; $ch = curl_init(«https://api.vk.com/method/?» . http_build_query($dataQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); return $html; > Методы для отправки информации в сообщество/* ДЛЯ ПОСТИНГА ЗАПИСИ */ public function send_wall_post($dataQuery) < $dataQuery[«from_group»] = «1»; $dataQuery[«owner_id»] = $this->owner_id; return $this->sendQueryVk_POST(«wall.post», $dataQuery); > /* ДЛЯ ПОЛУЧЕНИЯ URL ДЛЯ ЗАГРУЗКИ */ public function send_photos_getWallUploadServer($dataQuery) < $dataQuery[«from_group»] = «1»; $dataQuery[«owner_id»] = $this->owner_id; return $this->sendQueryVk_POST(«photos.getWallUploadServer», $dataQuery); > /* ДЛЯ СОХРАНЕНИЯ ИЗОБРАЖЕНИЯ НА СЕРВЕРЕ VK */ public function send_photos_saveWallPhoto($dataQuery) < return $this->sendQueryVk_GET(«photos.saveWallPhoto», $dataQuery); > Автопостинг с добавлением изображения в запись сообщества ВконтактеДобавление изображений в посты для сообществ проходит в 3 этапа:
/* urlFile — ссылка на файл изображения на хостинге */ public function sendPhotoInVk($urlFile) < /* отправка запроса для получения ссылки на загрузку файла */ $arrQuery = [ «group_id» => $this->group_id, ]; $dataUploadParams = $this->send_photos_getWallUploadServer($arrQuery); $uploadUrl = $dataUploadParams[«response»][«upload_url»]; /* ——————— */ /* отправка изображения на сервер */ $curl_photo = curl_file_create($urlFile); $arrQuery = [ «photo» => $curl_photo ]; $ch = curl_init($uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, [«Content-Type:multipart/form-data»]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $dataUploadParams = curl_exec($ch); curl_close($ch); $dataImage = json_decode($dataUploadParams, true); /* ——————— */ /* получение информации о картинге с сервера */ $dataImage[«group_id»] = $this->group_id; $dataSaveParams = $this->send_photos_saveWallPhoto($dataImage); $dataImage = json_decode($dataSaveParams, true); $codeQueryImage = «photo_»; return $codeQueryImage; > Полная версия класса для автопостинга записей Вконтактеclass BotsTime_AutopostingVk < public $token = «97a1b7bff17bd61309c109a4ac02961fe8a5121e553b95eca754e8e889f7dbb4fe»; public $owner_id = -209546094; public $group_id = 209546094; public $idApp = 8054058; public $versionVk = «5.131»; /* ДЛЯ ОТПРАВКИ POST ЗАПРОСОВ */ /* method — название метода (информация в документации Вконтакте) dataQuery — массив с параметрами запроса */ public function sendQueryVk_POST($method, $dataQuery = array()) < /* добавляем токен в массив запроса */ $dataQuery[«access_token»] = $this->token; /* добавляем версию API вконтакте */ $dataQuery[«v»] = $this->versionVk; $ch = curl_init(«https://api.vk.com/method/»); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, [«Content-Type:multipart/form-data»]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo «Ошибка отправки запроса: » . curl_error($curl); return false; >else < return json_decode($html, true); >> /* ——————— */ /* ДЛЯ ОТПРАВКИ GET ЗАПРОСОВ */ public function sendQueryVk_GET($method, $dataQuery = array()) < $dataQuery[«access_token»] = $this->token; $dataQuery[«v»] = $this->versionVk; $ch = curl_init(«https://api.vk.com/method/?» . http_build_query($dataQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); return $html; >/* ——————— */ /* ДЛЯ ПОСТИНГА ЗАПИСИ */ public function send_wall_post($dataQuery) < $dataQuery[«from_group»] = «1»; $dataQuery[«owner_id»] = $this->owner_id; return $this->sendQueryVk_POST(«wall.post», $dataQuery); >/* ——————— */ /* ДЛЯ ПОЛУЧЕНИЯ URL ДЛЯ ЗАГРУЗКИ */ public function send_photos_getWallUploadServer($dataQuery) < $dataQuery[«from_group»] = «1»; $dataQuery[«owner_id»] = $this->owner_id; return $this->sendQueryVk_POST(«photos.getWallUploadServer», $dataQuery); >/* ——————— */ /* ДЛЯ СОХРАНЕНИЯ ИЗОБРАЖЕНИЯ НА СЕРВЕРЕ VK */ public function send_photos_saveWallPhoto($dataQuery) < return $this->sendQueryVk_GET(«photos.saveWallPhoto», $dataQuery); >/* ——————— */ /* ПОЛУЧЕНИЕ КОДА ДЛЯ ПОСТИНГА ИЗОБРАЖЕНИЙ */ /* urlFile — ссылка на файл изображения на хостинге */ public function sendPhotoInVk($urlFile) < /* отправка запроса для получения ссылки на загрузку файла */ $arrQuery = [ «group_id» => $this->group_id, ]; $dataUploadParams = $this->send_photos_getWallUploadServer($arrQuery); $uploadUrl = $dataUploadParams[«response»][«upload_url»]; /* ——————— */ /* отправка изображения на сервер */ $curl_photo = curl_file_create($urlFile); $arrQuery = [ «photo» => $curl_photo ]; $ch = curl_init($uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, [«Content-Type:multipart/form-data»]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $dataUploadParams = curl_exec($ch); curl_close($ch); $dataImage = json_decode($dataUploadParams, true); /* ——————— */ /* получение информации о картинге с сервера */ $dataImage[«group_id»] = $this->group_id; $dataSaveParams = $this->send_photos_saveWallPhoto($dataImage); $dataImage = json_decode($dataSaveParams, true); $codeQueryImage = «photo_»; return $codeQueryImage; >> $vkBot = new BotsTime_AutopostingVk(); /* изображение для записи */ $urlFile = $_SERVER[«DOCUMENT_ROOT»] . «/upload/resize_cache/iblock/a4b/1000_750_1a3e675aea8ae1409484d226085c41199/estvnvtyrj2z0h0kq5wghwk5yfugy1kq.jpg»; $textPost = «Описание для записи n»; /* получение данных для загрузки изображения для поста */ urlFile); /* добавление записи */ arrQuery); Источник: temofeev.ru H Оповещения о событиях в Вашей группе ВКонтакте в черновиках TutorialВ связи с введением нового дизайна ВКонтакте так же был введён новый функционал — Callback API для групп и сообществ. Сейчас я расскажу как им пользоваться. ПредысторияУ меня есть несколько групп, некоторые из которых закрытые. И мне крайне лень было каждый день заходить и смотреть в группах сообщения, заявки и прочее. И вот я обнаружил, что с введением нового дизайна так же появилась «Работа с API» для групп и решил их изучить. Настройка сервера оповещенийПереходим в управление нашей группой и заходим на вкладку «Работа с API». Там выбираем «Callback API». У нас открылась страница настроек. Нам предлагают ввести домен, куда будут отправляться запросы. Тут можно использовать любой бесплатный хостинг с php . Но я советую использовать свой VPS на Digital Ocean — регистрируйтесь по моей реферальной ссылке, и получите 10$ на своё счёт. Этого хватит на 2 месяца бесплатного использования сервера. Я не буду подробно останавливаться на настройке php и веб-сервера, приведу лишь минимальный пример index.php для проверки валидатором ВКонтакте. Вводим на странице настроек наш домен и секретный ключ (им может быть любые символы на английском языке и цифры). Далее в index.php прописываем следующие строки: > $confirmation_token = «4ds4a5asd»; // Код со страницы настроек $group_id = 12345678910; $data = json_decode(file_get_contents(‘php://input’)); if (!isset($data->secret))< if ($data->type == «confirmation») < die($confirmation_token); >else < die(«error»); >> else < // Тут будет обработка событий >?> Сохраняем файл, нажимаем в ВКонтакте кнопку «Проверить» — если всё хорошо — то ваш домен примет ВКонтакте. Выбор событий для оповещенийТеперь переходим на вкладку «Типы событий» и выбираем необходимые события. Мне хватило 3 пунктов — «Новое сообщение», «Вступление в сообщество» и «Выход из сообщества». В противном случае — у вас будет на система уведомлений, а система спама )). Настройка обработки событийОповещения будем делать через систему личных сообщений от имени группы (ЛС). Для этого нам нужен access_token . Переходим на вкладку «Ключи доступа» и создаём новый ключ. Хватит вполне прав на сообщения сообщества. Копируем ключ доступа. Открываем наш файл, и после функции check_secret дописываем функцию отправки сообщения вам в ЛС. $text, ‘user_id’ => $admin_id, // Ваш ИД ВКонтакте ‘access_token’ => $token, ‘v’ => ‘5.0’ ); $get_params = http_build_query($request_params); $a = file_get_contents(‘https://api.vk.com/method/ messages.send?’. $get_params); file_put_contents(«log.txt», json_encode($a), FILE_APPEND); > ?> Теперь в область обработки дописываем следующий код: secret); unset($data->secret); switch ($data->type) < // Новое сообщение case ‘message_new’: $user_id = $data->object->user_id; // Получаем информацию о пользователе-отправителе $user_info = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=)); $user_name = $user_info->response[0]->first_name; // Отправляем Вам сообщение send_message_to_me(«Новое сообщение в Вашей группе от пользователя — http://vk.com/id» . » https://vk.com/gim?sel=»); die(‘ok’); break; // Пользователь покинул группу case ‘group_leave’: // Получаем информацию о пользователе, который покинул группу $user_id = $data->object->user_id; $self = $data->object->self; $user_info = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=)); $user_name = $user_info->response[0]->first_name; $text = «Пользователь (http://vk.com/id) покинул Вашу группу»; $text .= $self == 1 ? «сам» : «по решению администрации»; // Отправляем Вам сообщение send_message_to_me($text); die(‘ok’); break; // Вступление в группу case ‘group_join’: // Получаем информацию о пользователе, который покинул группу $user_id = $data->object->user_id; $join_type = $data->object->join_type; if ($join_type != «approved») < // Не отправлять если это принятая Вами заявка // Получаем информацию о пользователе, который подал заявку в группу $user_info = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=)); $user_name = $user_info->response[0]->first_name; // Отправляем Вам сообщение send_message_to_me(«Пользователь (http://vk.com/id) вступил в группу Грешники»); > die(‘ok’); break; // Новая запись на стене — подойдёт для пабликов — оповещение о предложенных записях — нужно поставить соответствующую галочку в настройках типов событий case «wall_post_new»: $object = $data->object; $post_id = $object->id; $post_type = $object->post_type; if ($post_type == «suggest») < // Если это предложенная запись // Получаем информацию о пользователе, который предложил запись $user_id = $data->object->from_id; $user_info = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=)); $user_name = $user_info->response[0]->first_name; // Отправляем сообщение send_message_to_me(«новая предложенная запись от пользователя (http://vk.com/id) — http://vk.com/wall-_»); > die(‘ok’); break; default: die(‘ok’); break; > > ?> Сохраняем файл, и можем наслаждаться сообщениями от имени группы с оповещениями о событиях. Дополнительные события Вы можете подключить самостоятельно, достаточно отметить нужные галочки, и посмотреть отправляемые запросы на вкладке «Запросы». Там описаны все отправляемые параметры. Пользуйтесь. Мне очень помогает. Источник: sohabr.net |