Социальные сети стали неотъемлемым инструментом продвижения сайтов. Для раскрутку сайта через соц. сети следует создать группу или страничку данного сайта. Набирать подписчиков, выкладывать новости на стену и много чего ещё (это тема отдельной заметки). Многие эти процессы можно автоматизировать используя API (интерфейс прикладного программирования) соответствующей социальной сети. В этой заметке я разберу как подключиться к vk api (вконтакте), как начать работать c вк апи, а так же приведу несколько примеров работы с api вконтакте.
Создание приложения вконтакте
И так приступим. Vk api имеет много методов, но одним из основных их различий является то, что для выполнения запросов к вк апи через некоторые методы требуется специальный ключ доступа - токен (access_token). Получить его можно создав своё приложение. Нам предлагают несколько видов приложений, но я выбираю тип Standalone. Мне его хватает. Для начала создания приложения переходим по ссылке и попадаем в следующее окно.
Здесь мы выбираем тип и название нашего приложения. Нажимаем подключить приложение и получаем на номер телефона, привязанному к аккаунту вк из которого мы создаём приложение, смс с кодом. Вводим его и переходим в следующее окно. В этом окне переходим в вкладку настройки.
В вкладке настройки мы видим поля с названием ID приложения и защитный ключ. Записываем куда нибудь эти данные. Больше ничего в вкладках я не делал. Состояние приложения оставил в положении отключено. Жмём сохранить настройки. Всё, мы создали приложение вконтакте.
Получение токена (access_token) api вк
Https://oauth.vk.com/authorize?client_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. Данный адрес будет выглядеть так:
Https://oauth.vk.com/authorize?client_id=123456&display=page&redirect_uri=https://oauth.vk.com/blank.html& scope=friends,messages,groups,offline&response_type=token&v=5.52
Подтверждаем действие и попадаем на страницу с предупреждением, из адресной строки браузера берём наш полученный токен. Это будет после #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->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 и автоматизировать свои действия в контакте.
6 мая 2014 в 16:12Правильный подход к использованию API Вконтакте
- PHP ,
- Вконтакте API
Привет, Хабр!
В своё время, бороздя просторы интернета на предмет рационального использования API Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.
Так уж сложилось, что API Вк, реализован довольно хорошо, за исключением некоторых не логичных моментов, о которых я упомяну позднее. Но речь, сегодня не о качестве, а о конкретном применении.
Сразу необходимо сделать оговорку, помимо описания, я буду приводить куски рабочего кода к моей библиотеке, ссылку на которую я приведу в конце статьи. Библиотека работает на последней стабильной версии 5.5, если вырезать генераторы из пакетного получения, то должно работать на 5.4.
- Серверная авторизация(т.н. авторизация сайтов)
- Клиентская авторизация(Standalone)
- Авторизация сервера приложения
Алгоритм получения в первом случае сводится к выполнению следующих пунктов:
- Мы выводим ссылку для авторизации пользователя, которую форматируем в соответствии с документацией
- Пользователь переходит по ней и авторизуется
- Пользователя перенаправляют на REDIRECT_URI нашего приложения с GET параметром code
- Наше приложение должно выполнить запрос к API содержащий code, чтобы получить ключ доступа пользователя
- API отвечает, либо с объектом, содержащим ключ доступа, либо ошибкой.
Пример кода, с помощью которого можно провернуть это не хитрое дело.
$auth = getjump\Vk\Auth::getInstance(); $auth->setAppId("3470411")->setScope("SCOPE")->setSecret("SECRET CODE")->setRedirectUri("http://localhost/test.php"); $token=$auth->startCallback(); printf("LINK", $auth->getUrl());
Предполагается, что наш домен это localhost, а текущий файл test.php. Если, всё прошло хорошо, то в нашей переменной $token, будет содержаться ключ доступа пользователя, который прошёл авторизацию.
С момента, когда мы имеем ключ доступа, мы можем выполнять запросы к API . Общая логика запросов проста, вы передаёте специально сформированный запрос на URL API. Запрос должен содержать, название метода и аргументы.
api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN
Список методов , это одна из богатых вещей API. В нём вы можете встретить методы, которые не требуют ключ доступа для своей работы, следовательно вызывать их вы можете, не получая его.
При использовании библиотеки нам необходимо создать базовый объект, например так:
$vk = getjump\Vk\Core::getInstance()->apiVersion("5.5")->setToken($token);
Пара примеров запросов с использованием библиотеки:
Через анонимную функцию в each, пройдёт ровно 100 объектов, содержащих данные о пользователях от 1 до 100. Заметьте, если мы уберём вызов функции, то не произойдёт никакого запроса, всё потому что вернётся объект, у которого переопределены магические методы __call и __get, что позволяет нам делать запрос, когда нам это действительно необходимо.
$vk->request("users.get", ["user_ids" => range(1, 100)])->each(function($i, $v) {
if($v->last_name == "") return;
print $v->last_name . "
";
});
Одна из вещей, что открывает, нам использование генераторов - пакетное получение. То есть, мы получаем данные только тогда, когда они нам нужны. Следующий пример, позволит нам получить ВСЕ наши сообщения, запросами по 100. Будьте внимательны, метод требует от вас прав для messages, Standalone приложения, такой-же авторизации и соответственно передачи ключа доступа.
foreach($vk->request("messages.get")->batch(100) as $data)
{
$data->each(function($i, $m) {
if(isset($m->body)) print $m->body . PHP_EOL;
});
}
Хороший метод, который можно отыскать в API - execute . Он принимает параметр code в качестве аргумента, code - некий псевдо JavaScript, который позволяет нам выполнять наш код на стороне сервера, так-же он позволяет выполнять хранимые процедуры, которые мы можем создать при редактировании нашего приложения.
Эту вещь я не смог обойти стороной и реализовал её в библиотеке. В двух словах, она позволяет выполнить несколько запросов, как один. Смотрите следующий пример кода.
$js1 = $vk->request("messages.get", ["count" => 200, "offset" =>0 * 200])->toJs(); // Вернёт объект типа VkJs $js2 = $vk->request("messages.get", ["count" => 200, "offset" =>1 * 200])->toJs(); $js3 = $vk->request("messages.get", ["count" => 200, "offset" =>2 * 200])->toJs(); $js4 = $vk->request("messages.get", ["count" => 200, "offset" =>3 * 200])->toJs(); $js1 ->append($js2) // Мы прибавляем js2 к js1 ->append($js3) ->append($js4) ->execute() // Мы хотим выполнить это(на самом деле это вернёт RequestTransaction) ->response //Запрос исполнится только сейчас ->each(function($i, $v) //Первая анонимная функция нужна для обхода всех элементов массива полученного от execute(массив из 4 элементов, 4 запроса) { $v->each(function($c, $d) { // Следующая для прохода всех 200 сообщений в каждом массиве if(isset($d->body)) print $d->body; //Выведем сообщение если такое поле присутствует }); });
Как и обещал, одно из тех недоразумений, которое вы можете встретить в текущей версии API(5.21), метод
Соцсети уже прочно вошли в наш быт и собрали миллионы пользователей. И нашему брату флэшеру открылись новые области для творчества. В частности - Flash-приложения сетевого проекта ВКонтакте , для которых создан специальный API, позволяющий легко интегрировать приложение в систему ВКонтакте.
Итак, что же нам предлагает API ВКонтакте - давайте разберемся.
Обзор
Как обычно, для начала почитаем, что об этом пишут наши коллеги.
Однако, никаких вразумительных статей, кроме материалов в рамках самого "ВКонтакте" найти не смог. Если кто-нибудь видел таковые - пожалуйста, киньте ссылочку в комменты. Итак:
Возможности API ВКонтакте
Попробуем выявить возможности приложений ВКонтакте, проанализировав функции API.
Работа с пользовательскими данными
Приложение имеет доступ к следующим данным:
- Установил ли пользователь, который просматривает приложение себе на страницу данное приложение
- Данные по любому пользователю, на основании его ID:
- имя,
- фамилия,
- псевдоним,
- пол,
- дата рождения,
- город,
- страна,
- часовой пояс,
- url-адреса фото малого, среднего и большого размеров,
- известен ли его мобильный телефон,
- рейтинг - Баланс пользователя на счету приложения
- Доступ к данным пользователя, просматривающего приложение:
- разрешить отправлять ему уведомления,
- доступ к друзьям,
- доступ к фотографиям,
- доступ к аудиозаписям,
- доступ к предложениям,
- доступ к вопросам,
- доступ к wiki-страницам,
- доступ к меню слева,
- публикация на стенах пользователей. - Список групп, в которых состоит пользователь с общей информацией о каждой группе.
У каждого пользователя ВКонтакте есть друзья - другие пользователи ВКонтакте. Доступные данные друзей пользователя:
- Список друзей текущего пользователя.
- Список друзей текущего пользователя, которые уже установили данное приложение.
Приложение может так же осуществлять следующие действия:
- Поднять рейтинг пользователя от имени приложения
- Если пользователь установил приложение в меню слева, приложение может задать краткое имя приложения, а так же вывести счетчик рядом с названием приложения - например, счетчик уведомлений.
- Устанавливать и считывать строку статуса приложения.
Работа с фотографиями пользователя
Пользователь ВКонтакте может создавать множество альбомов с фотографиями в разделе "Мои Фотографии". API предоставляет широкий выбор возможностей по работе с альбомами и фотографиями.
Фотографии должны иметь формат JPG, PNG или GIF.
Приложение может получить:
- Список фото-альбомов с общими данными о каждом альбоме.
- Список фотографий из какого-либо альбома (или непосредственно по ID фотографии) с набором ссылок на изображения различных размеров и качества.
Приложение может осуществлять следующие действия с альбомами и фотографиями:
- Создавать альбом (с описанием и контролем доступа к нему).
- Редактировать данные существующего альбома.
- Изменять порядок в списке альбомов.
- Изменять порядок фотографий в альбоме.
- Переносить фотографии из альбома в альбом.
- Делать фотографию обложкой альбома.
- Загружать фотографии на сервер ВКонтакте, на стену пользователя, на страницу пользователя.
Работа с аудиозаписями пользователя
Пользователь может загружать аудиозаписи и прослушивать их в разделе "Мои Аудиозаписи".
Аудиозапись должна быть в формате MP3, не превышать 10Мб и не нарушать авторских прав.
API предоставляет широкий выбор возможностей для работы с аудиозаписями:
- Получать список аудиозаписей пользователя или группы с общей и подробной информацией о каждой записи.
- Получать текст песен аудиозаписей.
- Осуществлять поиск по аудиозаписям.
- Загружать, удалять, восстанавливать удаленные аудиозаписи.
- Редактировать данные аудиозаписи.
- Добавлять аудиозапись на страницу пользователя или группы.
- Менять порядок следования аудиозаписей.
Работа с видеозаписями пользователя
API позволяет получать список видеозаписей пользователей, групп с общей информацией о каждой видеозаписи.
Стена пользователя
Приложение может выводить на стену пользователя запись, содержащую текст, а так же изображение из альбома пользователя или только что загруженное на сервер ВКонтакте изображение.
API предоставляет приложению доступ к следующим функциям:
- Получить платежный баланс (количество голосов) приложения.
- Получить платежный баланс (количество голосов) пользователя.
- Перевести голоса со счета приложения на счет пользователя.
- Перевести голоса со счета пользователя на счет приложения.
- Перевести голоса со счета пользователя на счет другого пользователя в рамках приложения.
- Просмотр историй транзакций по переводу голосов между пользователями и приложением
Работа с SMS
Приложение ВКонтакте может задействовать столь мощные сервисы, как отправка и прием SMS:
- Отправка SMS-уведомления. При этом со счета приложения списывается 0.1 голоса.
- Просмотр списка SMS-сообщений, полученных от пользователей приложением.
- Просмотр истории SMS-уведомлений, посланных приложением.
Работа с сервисом "Предложения"
С помощью сервиса "Предложения", пользователь получает возможность создать свое уникальное предложение. Это предложение смогут увидеть все пользователи ВКонтакте -этот сервис независим от личной странички. Любое предложение начинается со слов "Хотели бы Вы", далее следует сам текст, а в конце уже стоит вопросительный знак. Пользователи могут посматривать предложения других пользователей, принимать чужое предложение нажатием варианта «Да, конечно» или отказываться нажатием варианта «Нет».
Итак, функции для работы с предложениями:
- Редактировать, открыть для общего доступа, и закрыть предложение пользователя, просматривающего приложение.
- Просматривать, искать предложения пользователей.
- Принимать и отклонять предложения пользователей.
- Просматривать ответы на предложение пользователя.
- Получать список ответов на предложения, принятые пользователем.
- Удаление и пометка о прочтении ответов пользователей.
Работа с сервисом "Вопросы"
Аналогичный предыдущему сервис, позволяющий задавать вопросы и получать на них ответы от других пользователей. В API так же есть всё необходимое для управление этим сервисом из приложений.
Работа с Wiki-страницами
Пользователям предоставляется система редактирования страниц, которая позволяет участникам групп совместно создавать бесконечное количество страниц с перекрестными ссылками. Таким образом, пользователи могут создавать в группах библиотеки или мини-энциклопедии. Кроме того, пользователи могут использовать особую wiki-разметку для оформления страниц.
Приложения имеют возможность работать с Wiki-страницами:
- Получать текст и полную информацию о wiki-странице.
- Редактировать и сохранять текст и настройки wiki-страницы.
- Получать список wiki-страниц в группе.
- Транслировать wiki-разметку в html-разметку.
Организация чата
API позволяет создавать в приложении чат, используя очередь сообщений - 127 сообщений. Для этого предусмотрены функции добавления сообщения в очередь и просмотра всей очереди сообщений.
Сохранение игровых рекордов
API предусматривает специальные функции для сохранения результатов игры пользователя и получения списка результатов.
Работа с переменными
Для хранения данных, API предоставляет каждому приложению 4096 уникальных переменных по 255 байт.
Причем, переменные распределяются по следующим диапазонам:
- Глобальные переменные: могут использоваться для данных, которые общие для всех экземпляров данного приложения, например, это таблица рекордов игрового приложения.
- Переменные пользователя: эти переменные уникальны для каждого пользователя данного приложения и могут служить, к примеру, для сохранения игры пользователя.
Примерно к половине переменных предоставляется доступ другим пользователям. Часть переменных является зарезервированной для разных нужд. - Переменные сессии: при работе с переменными, в запросе можно задавать идентификатор сессии (сеанса или комнаты). Таким образом, переменные этого диапазона будут общими для всех пользователей, которые в данный момент просматривают приложение. Соответственно, приложения могут осуществлять многопользовательское общение в реальном времени - чаты, многопользовательские игры и прочее.
- Переменные, содержащие временные данные, которые уникальны для текущего просматриваемого приложения, и при его закрытии пропадут.
Однако, количество переменных не велико - всего по 1024 переменные на диапазон, и это без учета зарезервированных переменных.
Работа с удаленным сервером разработчика
Приложение ВКонтакте является обычным Flash-приложением и обладает одним большим недостатком. Его нельзя считать защищенным от взлома. Точнее говоря, затраты на взлом flash-приложения не столь велики как, к примеру взлом сервера. Существует достаточное количество программ SWF-декомпиляторов, при помощи которых можно легко получить исходный программный код, выяснить логику приложения и подтасовать запросы к API.
Поэтому, некоторые функции, которые были перечислены выше, работают только с удаленного сервера разработчика, минуя flash-приложение, а именно:
- Работа с рейтингом пользователя
- Вывод короткого статуса пользователя в приложении на его главной странице
- Отправка уведомлений пользователя (только пользователям, которые установили себе данное приложение)
- Работа с голосами (платежные операции)
- Установка счетчика на приложение и работа с строкой статуса приложения
- Отправка и просмотр SMS-уведомлений
Таким образом, чтобы иметь возможность осуществлять эти операции, приложение должно не напрямую обращаться к API, а запрашивать свой специально предусмотренный сервер-прослойку, который в свою очередь будет общаться с API ВКонтакте и выдавать приложению полученные данные.
А вообще, конечно, для крупных проектов, работающих в формате приложений ВКонтакте, безусловно, именно этот специальный сервер и должен являться "мозгом", отрабатывающим всю логику приложения. Flash-приложение в этом случае всего лишь "тонкий клиент", который лишь красиво отображает результат работы сервера.
Локализация приложений
Разработчики приложений имеют возможность переводить свои приложения на более чем 50 языков, используя платформу переводов ВКонтакте . В данный момент платформа на этапе тестирования и применима только для приложений с большим количеством пользователей.
Использование Flash-контейнера приложения
Альтернативный способ внедрения flash-приложения в страницу ВКонтакте - через Flash-контейнер.
Flash-контейнер предоставляет следующие возможности для приложения:
Особенности API ВКонтакте
Итак, мы ознакомились со всеми возможностями, которые предоставляет API ВКонтакте. Хочется выделить особенности (скорее недостатки) API, с которыми мне пришлось столкнуться:
Итог
Flash-приложения ВКонтакте обладают достаточно мощным API, который решает основные задачи, и может полностью обеспечить проекты средней сложности. Все остальные потребности, разработчик может решить, используя свой веб-сервер.
Для начала, давайте определимся, что же такое VK API и какие возможности он нам предоставляет. API Вконтакте — позволяет разработчику взаимодействовать напрямую с базой данных вконтакте при помощи специальных http запросов. Чем нам, как разработчикам это может быть полезно? При помощи API мы можем извлекать самую различную информацию о пользователях, группах, записи со стены, фотографии и многое другое. Само собой, сервис имеет определенные ограничения, об этом подробнее под катом.
Предупреждаю сразу, статья не для новичков и некоторые моменты я пояснять не буду, так как статья получится очень длинной. Данными статьями я хочу лишь показать принцип работы с VK API и примеры кода. И конечно же код будет доступен на github .
Основная информация
Первое, что нам нужно для создания нашего приложения, это перейти по адресу https://vk.com/dev . Далее переходим в «Мои приложения» и нажимаем кнопку «Создать приложение» . Вконтакте позволяет регистрировать 3 типа приложений, краткое описание каждого:
- Standalone-приложение - это для мобильных клиентов, десктопных программ и сайтов на которых взаимодействие с API будет вестись из Javascript.
- Веб-сайт - если вы хотите написать скрипт для веб сайта, который будет использовать API указывайте этот вариант.
- IFrame/Flash приложение - игры в вконтакте и т.д.
Пишем имя приложения, тип выбираем «Веб-сайт», в адрес сайта и базовый домен указываем собственно адрес вашего сайта и домен. Если разрабатываете локально, можно указывать http://localhost .
Создание приложения
Наше приложение создано, теперь в разделе редактирования, переходим в «Настройки». На этой странице будут нужные нам данные, а именно id , защищенный ключ и сервисный ключ . Все это нужно для авторизации пользователя. Алгоритм взаимодействия с API очень простой:
- Пользователь авторизирует учетную запись ВК в приложении.
- Получает специальный токен.
- Выполняет запросы к API.
Теперь нужно собственно написать код, который позволит нам взаимодействовать с API. Писать мы будем на PHP с подключением некоторых библиотек. Нам понадобится composer , если у вас не установлен, то можете скачать его перейдя по этой ссылке .
В папке проекта создаем файл composer.json и записываем в него следующее:
{ "require": { "slim/slim": "^3.0", "twbs/bootstrap": "4.0.0-alpha.6", "illuminate/database": "^5.4", "slim/twig-view": "^2.2", "guzzlehttp/guzzle": "~6.0" } }
Сохраняем файл, открываем консоль и переходим в папку с нашим проектом в котором есть созданный нами файл. Выполняем команду composer install .
Этой командой мы установили мини фреймворк Slim, Bootstrap для быстрой верстки, пакет для работы с базой данных и шаблонизатор.
Структура приложения
Структура очень проста и включает в себя несколько файлов и папок.
- app — для настроек приложения, в этой папке будем держать маршруты, классы и прочие файлы настроек.
- public — основная папка в которой содержится файл index.php и файлы стилей
- resources — папка для представлений(views)
Создаем файлы
public/index.php
run();В этом файле мы только запускаем наше приложение, все настройки будем производить в других файлах. Это наша точка входа.
app/app.php
include "../vendor/autoload.php"; // Debug $config = [ "settings" => [ "displayErrorDetails" => true, "LogLevel" => "debug", "vk" => [ "client_id" => "ID ВАШЕГО ПРИЛОЖЕНИЯ", "client_secret" => "СЕКРЕТНЫЙ КЛЮЧ ВАШЕГО ПРИЛОЖЕНИЯ", "redirect_uri" => "http://vk-tutor.com/authorize", "display" => "popup", "scope" => "friends,wall,offline", "response_type" => "code" ] ], ]; $app = new Slim\App($config); // DI for twig view $container = $app->getContainer(); $container["view"] = function ($container) { $view = new \Slim\Views\Twig("../resources/views", [ "cache" => false ]); $basePath = rtrim(str_ireplace("index.php", "", $container["request"]->getUri()->getBasePath()), "/"); $view->addExtension(new Slim\Views\TwigExtension($container["router"], $basePath)); return $view; }; include "classes/VK.php"; // Routes require "routes.php";Не пугайтесь, сложного нет ничего. Просто подключаем загрузчик, внедряем зависимость для применения Twig и подключаем файл с маршрутами.
app/routes.php
get("/", function ($request, $response) { $vk = new VK($this->get("settings")["vk"]); if (isset($_SESSION["vk"])) { if (!isset($_SESSION["account"])) { // Устанавливаем токен $vk->accessToken = $_SESSION["vk"]->access_token; // Получаем информацию о текущем пользователе // Записываем всю информацию в сессию $_SESSION["account"] = $vk->getAccountInfo($_SESSION["vk"]->user_id); } return $this->view->render($response,"index.html", ["vk" => $vk, "account" => $_SESSION["account"]->response]); } return $this->view->render($response,"index.html", ["vk" => $vk]); }); $app->get("/authorize", function ($request, $response) { // Проверяем, есть ли в адресной строке код if ($request->getQueryParam("code") != NULL) { $vk = new VK($this->get("settings")["vk"]); // Получаем токен $_SESSION["vk"] = $vk->getAccessToken($request->getQueryParam("code")); } return $response->withStatus(302)->withHeader("Location", "../"); });Теперь наше приложение полностью готово к использованию. Для рендеринга страницы, нужно поместить шаблон в директорию resources/views . Можем приступать к написанию самого кода, который позволит нам взаимодействовать с API вконтакте. Поскольку нам нужно будет выполнять HTTP запросы к API, я установил Guzzle. Это HTTP клиент который позволит нам очень просто выполнять HTTP запросы к vkontakte.
Класс для работы с VK API
client_id = $params["client_id"]; $this->client_secret = $params["client_secret"]; $this->redirect_uri = $params["redirect_uri"]; $this->display = $params["display"]; $this->scope = $params["scope"]; $this->response_type = $params["response_type"]; } public function getLoginLink() { $params = [ "client_id" => $this->client_id, "redirect_uri" => $this->redirect_uri, "scope" => $this->scope, "response_type" => $this->response_type ]; return $this->loginUrl . http_build_query($params); } public function getAccessToken($code) { $client = new \GuzzleHttp\Client(); $response = $client->request("POST", $this->queryUrl, [ "form_params" => [ "client_id" => $this->client_id, "client_secret" => $this->client_secret, "redirect_uri" => $this->redirect_uri, "code" => $code, ], "verify" => false, ]); $data = json_decode($response->getBody()); return $data; } public function getAccountInfo($id) { $url = "https://api.vk.com/method/users.get"; $client = new \GuzzleHttp\Client(); $response = $client->request("POST", $url, [ "form_params" => [ "user_ids" => $id, "fields" => "photo_50,counters", "name_case" => "Nom", "access_token" => $this->accessToken ], "verify" => false ]); $data = json_decode($response->getBody()); return $data; } }Я написал небольшой класс, который пока еще умеет только авторизировать пользователя.
Метод getLoginLink() генерирует ссылку для авторизации, метод getAccessToken() запрашивает токен для доступа и последний метод getAccountInfo() загружает информацию об авторизованом пользователе.
На этом логика приложения завершена и при авторизации пользователя мы получим в сессии массив с данным пользователя и можем отобразить это.
Поскольку я подключил Twig
шаблонизатор, шаблоны у меня записываются в html файлы, но вы можете использовать и обычные php файлы или другой шаблонизатор.
Код файла для отображения информации.
{% extends "layout/app.html" %} {% block content %}
Учетная запись
{% for acc in account %}
Друзей: {{ acc.counters.friends }}
Подписчиков: {{ acc.counters.followers }}
Авторизировать пользователя
Авторизация {% endif %}
Фреймворк slim очень хорошо подходит для создания небольших приложений и API для своих проектов, поэтому я его и использовал в этой статье и будем продолжать использовать далее. В следующей статье посмотрим как можно достать посты со стены в группе и обработать их.