Пример работы с VK API в PHP
Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное API. При помощи методов которые предоставляет API конкретной системы, вы можете получить список пользователей, список фотографий, даже найти всех пользователей в определенной области на карте, список действий очень большой.
Однако, не каждый пользователь может получить доступ к этим данным. Большинство сервисов требуют регистрации и создания специального приложение, которое и будет работать с методами определенного сервиса.
Итак, сегодня мы рассмотрим пример работы с VK API, в котором будем получать список пользователей c именем «Маша» в городе «Москва». Будем искать Маш в Москве.:)
Первым делом нам нужно создать приложение. Для создания приложения переходим по ссылке(https://new.vk.com/dev -> Создать приложение).
Вводим название и поскольку мы разбираем пример на PHP используя веб-сервер, выбираем тип приложения — «Веб-сайт«. Указываем адрес вашего сайта и базовый домен(если делаете на локальном веб-сервере, пишем http://localhost). Нажимаем кнопку «Подключить сайт» и ваше приложение создано, часть пути пройдена.
Приступаем к программированию. Существует множество классов для работы с API сайтов, однако мы будем писать все сами, чтобы понять основные принципы работы.
Для получения доступа к методам API, нужно выполнить несколько шагов:
- Авторизировать пользователя;
- Получить ключ доступа;
- Получить access_token;
- Выполнить запрос к методу;
4 простых шага, но на деле немного сложнее.
Авторизируем пользователя:
session_start(); $client_id = '1234567'; $redirect_uri = 'http://localhost'; $display = 'page'; $scope = 'friends,groups'; $response_type = 'code'; $auth_uri = "https://oauth.vk.com/authorize?client_id=&display=& redirect_uri=&scope=&response_type=&v=5.52";
Разбираем по пунктам, что же тут написано:
- $client_id — идентификатор вашего приложения, присвоенный системой;
- $redirect_uri — страница на которую будет перенаправлен пользователь после успешной авторизации;
- $display — как отображается страница входа, в данном случае это будет отдельная страница;
- $scope — разрешения для приложения, указывать через запятую. Полный список тут;
- $response_type — тип ответа, в данном случае будет предоставлен JSON;
- $auth_uri — формируем строку для авторизации пользователя, передвая нужные параметры;
С авторизацией пользователя разобрались, теперь нужно получить acces_token. После успешной авторизации нам в get запросе передают специальный код, с помощью которого мы сможем получить токен.
Получаем access_token:
if(isset($_GET['code'])) < $code = $_GET['code']; $client_secret = 'you_application_password'; $acces_uri = "https://oauth.vk.com/access_token"; $fields = array( 'client_id' =>$client_id, 'client_secret' => $client_secret, 'redirect_uri' => $redirect_uri, 'code' => $code ); $acces_uri .= "?client_id=&"; $acces_uri .= "client_secret=&"; $acces_uri .= "redirect_uri=&"; $acces_uri .= "code="; $res = file_get_contents($acces_uri); $response_string = json_decode($res,true); $_SESSION['token'] = $response_string['access_token'];
Тут все довольно просто, записываем полученный код в переменную $code , формируем ссылку с нужными нам данными — $access_uri . Далее при помощи функции file_get_contents выполняем запрос и в ответ получаем JSON объект который сразу же декодируем в массив. В конце просто полученный токен записываем в переменную сессии. Не очень хороший подход, лучше сразу писать в базу данных, однако цель этого руководства не в этом.
$client_secret — «Защищенный ключ» вашего приложения, без него работать не будет 🙂
Вот теперь у нас уже все готово для того, чтобы получить список пользователей с определенного города. Алгоритм работы очень простой: сформировать запрос, выполнить, получить данные.
if (isset($_SESSION['token'])) < $name = 'Маша'; $url = $url = "https://api.vk.com/method/users.search?city_id=1&q=&count=1000&access_token="; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data['response']); $users_list = $users_data['response']; >
И не забываем отобразить ссылку для авторизации которая у нас сформирована и записана в переменную $auth_uri .
Данный запрос вернет нам 1000 пользователей с Москвы. На выходе мы получим количество затронутых записей и ассоциативный массив с пользователями записанный в переменную $users_list , который уже можем использовать на свое усмотрение.
Единственный нюанс в том, что API не позволяет выбрать большее количество пользователей, даже если использовать параметр offset в строке запроса. К сожалению такое ограничение в VK API.
Полный список параметров VK API для запроса можете посмотреть в документации.
Надеюсь статья была вам полезна и вы узнали что-то новое для себя, если же нет, оставляйте пожалуйста ваши комментарии.
В следующей статье разберем реальный пример в котором будут реализованы некоторые функции управления сообществом, а именно постинг записей по расписанию, удаление и т.д.
Подключение и работа с vk api
Социальные сети стали неотъемлемым инструментом продвижения сайтов. Для раскрутку сайта через соц. сети следует создать группу или страничку данного сайта. Набирать подписчиков, выкладывать новости на стену и много чего ещё (это тема отдельной заметки). Многие эти процессы можно автоматизировать используя API (интерфейс прикладного программирования) соответствующей социальной сети. В этой заметке я разберу как подключиться к vk api (вконтакте), как начать работать c вк апи, а так же приведу несколько примеров работы с api вконтакте.
Создание приложения вконтакте
И так приступим. Vk api имеет много методов, но одним из основных их различий является то, что для выполнения запросов к вк апи через некоторые методы требуется специальный ключ доступа — токен (access_token). Получить его можно создав своё приложение. Нам предлагают несколько видов приложений, но я выбираю тип Standalone. Мне его хватает. Для начала создания приложения переходим по ссылке и попадаем в следующее окно.
Здесь мы выбираем тип и название нашего приложения. Нажимаем подключить приложение и получаем на номер телефона, привязанному к аккаунту вк из которого мы создаём приложение, смс с кодом. Вводим его и переходим в следующее окно. В этом окне переходим в вкладку настройки.
В вкладке настройки мы видим поля с названием ID приложения и защитный ключ. Записываем куда нибудь эти данные. Больше ничего в вкладках я не делал. Состояние приложения оставил в положении отключено. Жмём сохранить настройки. Всё, мы создали приложение вконтакте.
Получение токена (access_token) api вк
Что бы получить токен нам нужно создать ссылку определённого типа. С помощью этой ссылки мы отправим запрос серверу вк апи, в ответе сервера мы получим нужный нам токен (access_token). Синтаксис построения ссылки.
https://oauth.vk.com/authorize?client_id=[ID приложения]&display=[вид окна]&redirect_uri=https://oauth.vk.com/blank.html&scope=[права приложения]&response_type=token&v=5.52
- client_id — ID нашего приложения, полученный раньше.
- display — вид окна, в котором будет происходить авторизация. Может быть page, popup, touch и wap
- scope — права доступа нашего приложения относительно данных пользователя. О правах поподробнее ниже.
Права приложения вк относительно заданного пользователя могут задаваться в текстовом и цифровом виде. В текстовом это будет выглядеть так scope=friends,messages,groups . Этой строкой кода мы разрешили приложению vk доступ к друзьям, сообщениям и группам пользователя. Так же права задаются и в цифровом виде. Для каждого правила есть битовая маска и сумма этих масок и будет разрешать приложению определённые действия. Например право friends(+2), messages(+4096), groups(+262144), в итоге сумма битовых масок будет 266242 и код scope=266242 будет аналогом scope=friends,messages,groups . Отдельное внимание хочу уделить праву offline . Установка этого права делает получаемый нами токен бесконечным. Если это право не задать через определённое время токен нужно будет получать снова. Подробнее о правах приложения вк можно почитать здесь . В итоге давайте составим адрес для получения токена приложению с правами доступа к друзьям, сообщениям и группам пользователя, а так же с бессмертным токеном. Id приложения пусть будет 123456. Данный адрес будет выглядеть так:
Вставляем данную ссылку в адресную строку браузера и переходим по ней. Нам открывается окно с подтверждением действия и заданными нами правами.
Подтверждаем действие и попадаем на страницу с предупреждением, из адресной строки браузера берём наш полученный токен. Это будет после #access_token= , код expires_in=0 говорит нам что токена (access_token) api вк бессмертный. Соответственно user_id= это id пользователя, для которого мы получили токен.
Зайдём в настройки аккаунта во вкладку настройки приложений и увидим наше приложение.
Теперь у нас всё готово для работы с апи вконтакте.
Примеры работы с api vk
Для работы с api вк я использую язык программирования php. Поэтому и примеры я буду приводить на php. Для того, что бы выполнить какое либо действие, нам нужно послать запрос к api vk. Запрос мы можем послать и через адресную строку браузера. Тоесть запрос это есть определённый урл адрес с заданными в нём определёнными параметрами. Синтаксис составления такого урл описан ниже.
https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]
Список методов api vk находится здесь .Больше пока заострять на этом внимания не будем, потом на реальных примерах всё станет ясно. Осталось только разобраться как запрос к апи вконтакте отправить средствами php. Для этого будем использовать php функцию file_get_contents , а так же функцию json_decode так как ответ от сервера мы получим в формате json. Вот шаблон выполнения запроса к вк на php.
$result=json_decode(file_get_contents('https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]'));
ну а теперь несколько примеров работы с апи vk
$userid=12345; $mytoken=56789; /*вернёт объект с значениями пола и дня рождения пользователя*/ $request_params = array( 'user_id' => $userid, 'fields' => 'sex', 'fields' => 'bdate' ); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents('https://api.vk.com/method/users.get?'. $get_params)); /*проверка пользователя на бан вк*/ $request_params = array( 'user_id' => $user_id, 'fields' => 'deactivated' ); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents('https://api.vk.com/method/users.get?'. $get_params)); if(isset($result->response[0]->deactivated)) < echo "Страница заморожена или удалена"; >/*отправим сообщение пользователю с user_id=222222*/ $mesage='Привет, как дела?'; //кодируем строку $msg=urlencode($mesage); $result = json_decode(file_get_contents('https://api.vkontakte.ru/method/ messages.send?user_id=222222& message='.$msg.'&access_token='.$mytoken)); /*приглосим в друзья пользователя с user_id=222222*/ $mesage='Давайте дружить'; $msg=urlencode($mesage); $result=json_decode(file_get_contents('https://api.vkontakte.ru/ method/friends.adduser_id=222222& text='.$msg.'&access_token='.$mytoken));
Методов у апи много, так что советую читать документацию. Конечно запросы не всегда выполняются правильно и возвращают коды ошибок. Ошибки можно посмотреть здесь . Так что вот так вот просто можно подключиться к api vk и автоматизировать свои действия в контакте.