/ php

VK API. Основы. Получение токена. Первые запросы к API

VK.com предоставляет многофункциональный и удобный API, который позволяет делать всё, что приходит на ум программисту, и даже, немного больше.
API позволяет отправлять сообщения, получать и публиковать записи на стену, производить абсолютно любые действия, которые существуют в VK, от имени пользователя, кому был сгенерирован токен. Разобравшись с API на примере ВК, в будущем, вы безпроблемно сможете быстро вникать в API любых других сайтов. И, ввиду того, что 90% всех API имеют схожую реализацию, то понимание этой статьи будет для вас отличным стартом, и хорошей школой освоения "взрослых игрушек".

В недавней статье было рассмотрено, что такое REST API. Почитайте информацию по ссылке - это точно будет полезно.

План

ВК-API блиц

ВК предоставляет несколько реализаций API:

  • Streaming/Long Poll - позволяет получить данные в реальном времени. Сразу же, при обновлении данных в ВК, мы получаем актуальную информацию, без обновления страницы. Streaming и Long Poll реализуют разные подходы, но суть их одинаковая.
  • Виджеты для сайта - здесь всё просто: скопировал код, без хитрых настроек, и у тебя рабочий виджет на сайте.
  • Open API - работает на клиенте. Так же просто настраивается и используется. Преимуществом является то, что не обязательно иметь сервер для выполнения запросов. Будет работать в обычном HTML + JS.
  • Callback API - позволяет получать данные от самомого ВК, не выполняя запрос. В случае обновления данных, ВК сам нам присылает новые данные. Например, пользователь подписался на нашу группу, и ВК, автоматически пришлёт информацию об этом пользователе нашему скрипту.
  • REST API - позволяет взаимодействовать с данными ВК из скрипта. Позволяет автоматизировать любые пользовательские действия.

Для нас, как для программистов, на данном этапе - интересен REST API. Который позволяет взаимодействовать с пользователями, группами, рекламой, и прочими сущностями. Подробнее, обо всех доступных методах можно почитать здесь.

Для получение доступа к REST API, необходимо иметь специальный ключ vk api token. Это уникальное значение, аналогично логину и паролю - идентифицирует пользователя, от имени которого выполняются запросы.

Как гласит 2 правило проектирования REST API - между запросами не должно сохраняться состояния. Система по определению не может использовать сессии, потому применение токена актуально для идентификации пользователя.

Как получить токен VK.COM

Получение токена состоит из двух частей: регистрации своего приложения и получение токена в этом приложении.

Создать приложение можно на странице. Указав название приложения, и выбрав его тип.
Я выбираю Standalone, потому что тогда можно будет получить токены с бОльшим возможностями, чем в остальных вариантах (придётся поверить мне на слово, что это правда).
create_app

Создав приложение и перейдя на вкладку настроек, будет показано: id приложения, секретный ключ
vk-api-config

Теперь, имея id приложения, можно получить токен доступа. Для этого нужно сформировать ссылку, подставив в неё id своего приложения.

https://oauth.vk.com/authorize?client_id={CLIENT_ID}&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,notify,photos,wall,email,mail,groups,stats,offline&response_type=token&v=5.74

где вместо {CLIENT_ID} нужно вставить id своего приложения.
а в параметре scope - перечислены разрешения, которыми мы хотим наделить токен, список всех разрешений
Однако здесь, одним из самых важных разрешений является offline, которое создаёт бессрочный токен, не имеющий ограниченного времени жизни.

Если вы не хотите создавать своё приложение, то можете получить токен по ссылке

Перейдя по сформированной ссылке, откроется диалоговое окно, в которому будут зачитаны права показаны разрешения, которыми наделяется токен (чем больше указано scope свойств, тем больше будет этот список)
auth
Подтвердив, произойдёт переадресация на страницу, в адресной строке которой будет access_token, expires_in равный нулю (что логично, учитывая, что мы указывали создание вечного токена)
token

Я сократил токен для сохранения читабельности. У вас он будет длиннее

Скопировав этот токен, можно делать первые запросы к API.

Как делать запросы к API

Сохраним полученный токен, потому как его нужно будет прикреплять к каждому запросу к VK API.

Для того, чтобы сделать запрос к API, нам нужна любая из функций, способных совершить http-запрос: file_get_contents, curl...

К слову, даже, если открыть в браузере сформированный адрес, то получим результат

Запрос к методам API состоит из шаблона: https://api.vk.com/method/{METHOD_NAME}?{PARAMETERS}&access_token={ACCESS_TOKEN}&v={V}
где {METHOD_NAME} - имя метода
{PARAMETERS} - параметры, индивидуальные, в зависимости от метода
{ACCESS_TOKEN} - ранее сохранённый токен
{V} - версия API (на момент написания статья = 5.78)

Зная всё это, сделаем первый запрос, на получение всех личных записей со стены. За стену отвечает сущность wall, а метод его get, который возвращает список всех записей со стены пользователя.
И, в итоге, имя метода будет сформировано в виде имени сущности (wall).имя метода (get) - wall.get

Так, первая часть URL-адреса уже сформирована: https://api.vk.com/method/wall.get

Теперь нужно определиться с передаваемыми параметрами (PARAMS). Все доступные, обязательные параметры с описанием можно посмотреть на странице метода.
api-method-params
Я буду передавать owner_id который соответствует id моего пользователя.

По факту же, это поле является необязательным в текущих условиях. Так как по умолчанию, ownwer_id будет проставлен id текущего пользователя.

И, можно было бы просто дописать в виде строки к существующему URL-адресу: ...?owner_id=120159853

Однако, если туда добавлять множество новых параметров, то в таком виде добавлять не удобно. Потому, я создам массив параметров, где ключом будет название параметра, а значение, соответственно, его значение. А с помощью функции http_build_query() можно привести массив к виду строки нужного вида:

$params = [
'owner_id' => 120159853,
//params2 => 'value2',
];

http_build_query($params); //owner_id=120159853&params2=value2...

Теперь, осталось только собрать воедино все те части, которые были разобраны выше.
Для этого, можно написать такой код:

$method = 'wall.get';
$token = '38fa46d4c0c10bab105c760cc44ed373c0bc6a34405931f34c765ea';
$version = 5.78;

$params = http_build_query([
    'owner_id' => 120159853,
    'access_token' => $token,
    'v' => $version
    //...
]);

$url = "https://api.vk.com/method/{$method}?{$params}&access_token={$token}&v={$version}";
//https://api.vk.com/method/wall.get?owner_id=120159853&access_token=38fa46d4c0c10bab105c760cc44ed373c0bc6a34405931f34c765ea&v=5.78

При том, что даже токен и версию теперь можно вынести в массив $params, для более централизованной записи.

Осталось последний шаг - выполнение http-запроса. И, принимая тот факт, что данные возвращаются в виде JSON, то, результат, нужно дополнительно обернуть в функцию json_decode, которая приведёт JSON к обычному PHP-массиву. Вот так просто декодировать JSON.

$result = json_decode(file_get_contents($url), true);

В итоге, получаем обычный массив записей, который можем обработать как пожелаем
resule-json

И, исходя из ответа выше, для получения записей выполним:

//все записи
$orders = $result['response']['items'];
//первая запись
$order = $result['response']['items'][0];

Резюме

Эта статья должна была показать вам, насколько просто пользоваться API, и какие преимущества открываются. Здесь было продемонстрировано, как получить токен vk, как делать запросы к vk api, на примере получения последних записей со стены пользователя.
И уже имея токен и полученные в этой статье знания - можете работать с любыми методами ВК. Удачи!