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 , потому что тогда можно будет получить токены с бОльшим возможностями, чем в остальных вариантах (придётся поверить мне на слово, что это правда).
Создав приложение и перейдя на вкладку настроек, будет показано: id приложения, секретный ключ
Теперь, имея id приложения, можно получить токен доступа. Для этого нужно сформировать ссылку, подставив в неё id своего приложения.
где вместо
а в параметре scope — перечислены разрешения, которыми мы хотим наделить токен, список всех разрешений
Однако здесь, одним из самых важных разрешений является offline , которое создаёт бессрочный токен, не имеющий ограниченного времени жизни.
Если вы не хотите создавать своё приложение, то можете получить токен по ссылке
Перейдя по сформированной ссылке, откроется диалоговое окно, в которому будут зачитаны права показаны разрешения, которыми наделяется токен (чем больше указано scope свойств, тем больше будет этот список)
Подтвердив, произойдёт переадресация на страницу, в адресной строке которой будет access_token , expires_in равный нулю (что логично, учитывая, что мы указывали создание вечного токена)
Я сократил токен для сохранения читабельности. У вас он будет длиннее
Скопировав этот токен, можно делать первые запросы к API.
Как делать запросы к API
Сохраним полученный токен, потому как его нужно будет прикреплять к каждому запросу к VK API.
Для того, чтобы сделать запрос к API из PHP, нам нужна любая из доступных функций, способных совершить HTTP-запрос: file_get_contents, curl.
К слову, даже, если открыть в браузере сформированный адрес, то получим результат
Запрос к методам API состоит из шаблона: https://api.vk.com/method/
где
Зная всё это, сделаем первый запрос, на получение всех личных записей со стены. За стену отвечает сущность wall, а метод его get, который возвращает список всех записей со стены пользователя.
И, в итоге, имя метода будет сформировано в виде имени сущности (wall).имя метода (get) — wall.get
Так, первая часть URL-адреса уже сформирована: https://api.vk.com/method/wall.get
Теперь нужно определиться с передаваемыми параметрами (PARAMS). Все доступные, обязательные параметры с описанием можно посмотреть на странице метода.
Я буду передавать owner_id который соответствует id моего пользователя.
По факту же, это поле является необязательным в текущих условиях. Так как по умолчанию, ownwer_id будет проставлен id текущего пользователя.
И, можно было бы просто дописать в виде строки к существующему URL-адресу: . owner_id=120159853
Однако, если туда добавлять множество новых параметров, то в таком виде добавлять не удобно. Потому, я создам массив параметров, где ключом будет название параметра, а значение, соответственно, его значение. А с помощью функции http_build_query() можно привести массив к виду строки нужного вида:
Теперь, осталось только собрать воедино все те части, которые были разобраны выше.
Для этого, можно написать такой код:
При том, что даже токен и версию теперь можно вынести в массив $params , для более централизованной записи.
Осталось последний шаг — выполнение http-запроса. И, принимая тот факт, что данные возвращаются в виде JSON, то, результат, нужно дополнительно обернуть в функцию json_decode , которая приведёт JSON к обычному PHP-массиву. Вот так просто декодировать JSON.
В итоге, получаем обычный массив записей, который можем обработать как пожелаем
И, исходя из ответа выше, для получения записей выполним:
Резюме
Эта статья должна была показать вам, насколько просто пользоваться API, и какие преимущества открываются. Здесь было продемонстрировано, как получить токен vk, как делать запросы к 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.
ну а теперь несколько примеров работы с апи vk
Методов у апи много, так что советую читать документацию. Конечно запросы не всегда выполняются правильно и возвращают коды ошибок. Ошибки можно посмотреть здесь . Так что вот так вот просто можно подключиться к api vk и автоматизировать свои действия в контакте.
vk.com API
To use vk.com API you need an access token. There are several types of tokens, and the official documentation describes the process of obtaining each of them well. Based on our experience, we can offer you the fastest way to get a token — from the official application
Sign up in social network
Go to https://vkhost.github.io and choose any application (I prefer vk.com)
Grant access to your account and copy access_token parameter from URL
You can use methods that are prohibited by unofficial applications (messages section for example)
Как работать с vk API вконтакте
Здравствуйте, уважаемые читатели блога LifeExample, у многих из нас есть собственная страница в социальной сети вконтакте, все мы знаем, что каждый пользователь вконтке имеет возможность оставлять комментарии на стене других пользователей и различных сообществ. Сегодня я хочу показать вам как можно работать с данными этого сервиса, через предоставляемый вконтактом инструмент vk api , а именно как с помощью PHP получить все сообщения любого пользователя и его друзей.
Также в статье будет рассказано, как без использования API вконтакте осуществить автоматическую отправку текста на стену группы.
Создание приложения для получения доступа к vk API
Нас будет интересовать обращение по HTTP протоколу к адресу http://api.vk.com/api.php . На него мы будем высылать команды с определенными параметрами, а в ответ получать какие либо данные, предоставляемые сервисом вконтакте.
Самым первым делом необходимо создать новое приложения в VK.com, поскольку для работы с vk API надо иметь на это специальную подпись. Кроме того надо проштудировать всю информацию представленную в документации сервиса
Внимание! Если нам нужно только обращаться со своего сайта к API, и при этом мы совершенно не думаем о каких либо приложениях для мобильных телефонов, или декстопных приложениях,то все равно придется зарегистрировать его во вконтакте.
Чтобы создать свое приложение нужно перейти к форме создания приложения вконтакте и заполнить все необходимые поля:
После заполнения сохраняем введенные значения и получаем интересующие нас данные: id приложения и секретный ключ . Используя их мы в дальнейшем сможем работать с vk API.
После регистрации своего приложения мы сможем управлять настройками приложения созданного приложения
После этого нам потребуется класс для работы с vk API для этого скачиваем php библиотеку прямо с vk.com.
Права приложения
Для доступа к данным пользователя, приложение должно обладать набором соответствующих прав.
Предварительно, перед началом использования vkapi.class.php, надо разобраться, с тем как нашему созданному приложению, получать права для работы с тем или иным пользователем.
По умолчанию права созданного приложения — минимальны, и их не достаточно даже для того чтобы получить список друзей указанного пользователя, не говоря уже об оставлении записей на его стене.
Для всех приложений, api вконтакте предоставляет таблицу битовых масок, другими словами набор прав для приложения.
Советую вам самостоятельно ознакомиться с перечнем прав и их битовых масок.
Если Вы хотите получить права на "доступ к друзьям" и "доступ к обычным и расширенным методам работы со стеной", то ваша битовая маска будет равна: 2 + 8192 = 81924.
Если, имея битовую маску 81924, вы хотите проверить, имеет ли она доступ к расширенным методам работы со стеной, то можете сделать это таким образом:
Если права подтверждены, то 81926 & 81924 даст результат = 8192, иначе = 0
Чтобы web-приложение запросило разрешение на те или иные права, нужно дать пользователю ссылку специального формата:
- APP_ID – идентификатор вашего приложения;
- SETTINGS – запрашиваемые права доступа приложения;
- REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.
Перейдя по такой ссылке, пользователю, будет предложено авторизоваться на vk.com и подтвердить разрешение на запрашиваемые нашим приложением права.
В моем случае ссылка будет выглядеть таким образом:
Параметром scope , я запрашиваю у пользователя разрешение на использование всех имеющихся данных, перечислив все известные идентификаторы прав.
После подтверждения, vk api высылает назад на указанный redirect_uri код, по которому мы сможем в течении часа получать access_token чтобы работать с API вконтакте.
Закончив процесс получения разрешения, от пользователя на доступ к его информации, мы можем начинать работу с API вконтакте, а именно с классом vkapi.class.php
PHP Пример работы с API vkontakte
<?
$api_id = 4471324 ;
$secret_key = ‘Y1fXgdIl3aPiejBHO4g’ ;
function verRoles ( $maskBit ) {
$assocBitandRole = array (
‘1’ => ‘notify’ ,
‘2’ => ‘friends’ ,
‘4’ => ‘photos’ ,
‘8’ => ‘audio’ ,
’16’ => ‘video’ ,
’32’ => ‘docs’ ,
’64’ => ‘notes’ ,
‘128’ => ‘pages’ ,
‘256’ => ‘status’ ,
‘512’ => ‘offers’ ,
‘1024’ => ‘questions’ ,
‘2048’ => ‘wall’ ,
‘4096’ => ‘groups’ ,
‘8192’ => ‘messages’ ,
‘32768’ => ‘notifications’ ,
‘131072’ => ‘stats’ ,
‘262144’ => ‘ads’ ,
‘524288’ => ‘offline’ ,
‘1048576’ => ‘nohttps’ ,
) ;
$res = ‘<br/>Доступно:’ ;
$nores = ‘<br/>Не доступно:’ ;
foreach ( $assocBitandRole as $bit => $role ) {
if ( ( int ) ( $maskBit ) & ( int ) $bit ) {
$res .= "," . $role ;
} else {
$nores .= "," . $role ;
}
}
return $res . ‘</br>’ . $nores ;
}
if ( ! empty ( $_GET [ ‘code’ ] ) ) {
header ( ‘Location: https://oauth.vk.com/access_token?
client_id=’ . $api_id . ‘&
client_secret=’ . $secret_key . ‘&
code=’ . $_GET [ ‘code’ ] . ‘&
redirect_uri=http://moguta.ru/vk& ‘ ) ;
} else {
echo ‘<a target="_blank" href="https://oauth.vk.com/authorize?
client_id=’ . $api_id . ‘&
scope=notify,friends,photos,audio,video,docs,notes,pages,status,offers,questions,groups,notifications,stats,ads,offline,nohttps,&
redirect_uri=http://moguta.ru/vk&
response_type=code ">Разрешить приложению Moguta работать с моими данными из VK</a>’ ;
}
require ‘vkapi.class.php’ ;
$VK = new vkapi ( $api_id , $secret_key ) ;
//получить битовую маску приложения для конкретного пользователя
$resp = $VK -> api ( ‘getUserSettings’ , array ( ‘uid’ => ‘150317299’ ) ) ;
echo verRoles ( $resp [ ‘response’ ] ) ;
Результат работы скрипта должен вывести информацию о правах приложения по отношению к пользователю с id=’150317299′ . Получить битовую маску прав приложения можно командой getUserSettings .
Как видите скрипт вывел перечень доступных прав исходя из значения битовой маски. По умолчанию для каждого нового пользователя битовая маска будет равна 0, пока посетитель сайта не перейдет по указанной ссылке "Разрешить приложению Moguta работать с моими данными из VK".
Подтвердив разрешение, пользователь даст нам возможность работать с его данными и мы сможем, выполнить несколько полезных в разных задачах методов, например.