Пример работы с VK API в PHP. Что такое API ВКонтакте и зачем оно нужно

Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное API . При помощи методов которые предоставляет API конкретной системы, вы можете получить список пользователей, список фотографий, даже найти всех пользователей в определенной области на карте, список действий очень большой.

Однако, не каждый пользователь может получить доступ к этим данным. Большинство сервисов требуют регистрации и создания специального приложение, которое и будет работать с методами определенного сервиса.

Итак, сегодня мы рассмотрим пример работы с VK API, в котором будем получать список пользователей c именем «Маша» в городе «Москва». Будем искать Маш в Москве.:)

Первым делом нам нужно создать приложение. Для создания приложения переходим по ссылке (https://new.vk.com/dev -> Создать приложение ).

Вводим название и поскольку мы разбираем пример на PHP используя веб-сервер, выбираем тип приложения — «Веб-сайт «. Указываем адрес вашего сайта и базовый домен(если делаете на локальном веб-сервере, пишем http://localhost ). Нажимаем кнопку «Подключить сайт» и ваше приложение создано, часть пути пройдена.

Приступаем к программированию. Существует множество классов для работы с API сайтов, однако мы будем писать все сами, чтобы понять основные принципы работы.

Для получения доступа к методам API, нужно выполнить несколько шагов:

  1. Авторизировать пользователя;
  2. Получить ключ доступа;
  3. Получить access_token;
  4. Выполнить запрос к методу;

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={$client_id}&display={$display}& redirect_uri={$redirect_uri}&scope={$scope}&response_type={$response_type}&v=5.52";

Разбираем по пунктам, что же тут написано:

  • $client_id — идентификатор вашего приложения, присвоенный системой;
  • $redirect_uri — страница на которую будет перенаправлен пользователь после успешной авторизации;
  • $display — как отображается страница входа, в данном случае это будет отдельная страница;
  • $scope — разрешения для приложения, указывать через запятую. Полный список ;
  • $response_type — тип ответа, в данном случае будет предоставлен JSON;
  • $auth_uri — формируем строку для авторизации пользователя, передвая нужные параметры;

Получаем 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={$fields["client_id"]}&"; $acces_uri .= "client_secret={$fields["client_secret"]}&"; $acces_uri .= "redirect_uri={$fields["redirect_uri"]}&"; $acces_uri .= "code={$fields["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={$name}&count=1000&access_token={$_SESSION["token"]}"; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data["response"]); $users_list = $users_data["response"]; }

Данный запрос вернет нам 1000 пользователей с Москвы. На выходе мы получим количество затронутых записей и ассоциативный массив с пользователями записанный в переменную $users_list , который уже можем использовать на свое усмотрение.

Единственный нюанс в том, что API не позволяет выбрать большее количество пользователей, даже если использовать параметр offset в строке запроса. К сожалению такое ограничение в VK API.

Полный список параметров VK API для запроса можете посмотреть в

Доброго времени суток, друзья!

Очень часто вижу, что многие начинающие Зенщики смотрят в сторону API & POST/GET и правильно делают. Ведь нет ничего лучше POST/GET для уменьшения жора ресурсов шаблонами, ну а API для того и сделано, что бы быстро получать конкретные результаты.

Примером я выбрал именно VK.COM потому что мне он привычней и понятней.

Для работы нам понадобится текстовый редактор и сниффер.

Текстовый редактор я использую Notepad ++ , а сниффер – HTTP Analyzer . Все это легко гуглится, но если будут какие то проблемы с поиском, то смело пишите в личку, помогу.

Рассматривать текстовый редактор мы не будем, а вот на сниффере остановимся по подробнее.

Общий вид рабочего окна сниффера HTTP Analyzer : ​


Я не буду останавливаться на том, что Вы уже активировали данную программу удобным Вам способом или используете триальную версию. У меня уже активирована и поэтому выглядит окно именно так.

Изначально программа всегда запускается на стопе. Нам нужно ее запустить, нажав на Start :

Далее программа начнет перехватывать трафик и группировать его по приложениям. Поэтому я ее и использую. Так как удобней чем у того же фидлера и не нужны танцы с бубнами как с виршарком.

Есть один лайфхак – после первого запуска зайдите в Viewи выберите LocalTime :

Теперь каждый запрос будет отображаться во времени, что очень удобно.

Теперь давайте рассмотрим более внимательно рабочую область программы:

В основном мы будем работать с двумя зонами, которые на картинке выше обозначаются 1 и 2 соответственно. Где показано время сделанного запроса, метод запроса так же указано на картинке.

В зоне 1 у нас время запроса, метод запроса и сам запрос, откуда мы его можем скопировать, но об этом позже.
В зоне 2 у нас будет слева то, что мы отправляем на сервер, а справа то, что получим в ответ от сервера.

Данную программу мы используем для работы с POST/GET запросами. Алгоритм тут простой – сделали в браузере нужное действие – посмотрели что перехватила программа.
Повторили тоже самое в шаблоне. Все. Ничего сложного.
Ну а дальше нужно набивать руку и глаз.

Теперь давайте разберемся как нам работать с API Vk .

Четкое и полное описание работы с API можно найти на сайте - https://vk.com/dev/main

Для работы с методами API нам нужно авторизоваться. Авторизуясь раз, мы получаем токен, который потом можем постоянно использовать для отдельно выбранного аккаунта (пока сами не сменим токен или не забанят аккаунт).

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

Вот таким запросом:

    https://oauth.vk.com:443/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username={-Variable.username-}&password={-Variable.password-}&captcha_key={-Variable.captcha_key-}&captcha_sid={-Variable.captcha_sid-}

client_id и client_secret могут быть от Вашего приложения.
Можете использовать и мои данные, но сами понимаете, вероятность того что что то может пойти не так - огромная. Мало ли кто там в каких целях будет использовать это приложение?
Раз сделали, а потом не волнуетесь. Удобно же!

Вернемся к теме разговора.
Рассматривать мы будем именно клиентскую, так как она требует подтверждение прав от авторизованного аккаунта.
На примере авторизации в vk.com я Вам покажу как работать с HTTP Analyzer , обрабатывая запросы и куки.

Лично я для работы с ВК выделяю отдельно ЮзерАгенты в файл, а так же работаю через прокси. Поэтому все мои шаблоны заточены под них. Прокси использую с привязкой по IP.

Что бы начать с чем либо работать, изначально нужно понять точный порядок действий.
Для авторизации в ВК он будет такой:
1. Открываем vk.com
2. Вводим логин и пароль.
3. Вводим капчу при авторизации, если необходимо.
4. Отправляем данные логина и пароля на сервер ВК.
5. Проверяем - прошла ли авторизация на сервере.

Вроде ничего сложного. Начнем разбираться!

Первым делом в наш шаблон нужно добавить System.Web . Делается это так:
1. Переходите в расширенный редактор.
2. Ищите "Ссылки из GAC "
3. Добавляете (перетаскиваете) на панель внизу (смотрите скрин)
4. Дважды кликаете по появившемуся ярлыку с "книжками"
5. В всплывшем окне жмете "Добавить..." и в следующем вводите System.Web.
6. Выбираете под Вашу систему - 64 или 32 битную. Кликом выбираете.
Все.

Это делается для того, что бы можно было кириллические буквы перевести в читаемые сервером вк данные.

Делаем заготовки:
Тут мы берем прокси и помещаем в переменную {- Variable .proxy -}

Здесь берем ЮзерАгента и помещаем в переменную {- Variable .useragents -}

Потом нам нужно взять строчку с данными аккаунта и разделить на логин и пароль.

Работаю в основном с текстовыми данными, а не табличными, так как продают их именно в таком виде.
Далее есть проверка на разделитель, так как у разных продавцов бывает по разному. У кого то разделитель ": ", а у кого то - "; "

Следующим шагом устанавливаем прокси и смотрим нет ли русских букв в пароле:

Делаю я это через обработку текста с взятием регулярки и проверяю, пустая ли переменная или нет.
Если не пуста, то кириллица есть и ее надо обработать.
Для этого использую сниппет C# :

    return System.Web.HttpUtility.UrlEncode(project.Variables["password"].Value, Encoding.GetEncoding("windows-1251"));

Именно в кодировке windows-1251!

Все, на этом этап подготовки завершается и мы начинаем делать саму авторизацию через POST/GET .

Я делаю так:
1. Запускаю HTTP Analyzer
2. Проверяю его работоспособность обновлением страницы в браузере.
3. Удаляю куки и кэш в браузере
4. Произвожу необходимые мне действия (в нашем случае – перехожу на https://vk.com и совершаю авторизацию)

Вот что выдает Аналайзер:

Кучу разной информации. Львиная доля нам не нужна.
Вот тут и нужен навык отбирать то, что нам нужно, а то что нет – удалять.
На первых этапах не советую удалять, так как Вы можете случайно удалить то, что Вам будет необходимо, да и порой кой какие переменные и куки появляются при загрузке изображений. Это я сейчас не про ВК, а в общем о сайтах.

Вот что осталось после очистки не нужных строк (удалил всякие картинки и прочие не нужные джава скрипты):

В итоге у меня получилось 6 действий. Не было капчи и мы ее не разгадывали.
К сожалению, из тех акков, что у меня сейчас есть, не получилось поймать капчу на авторизации. да я и особо не старался. В шаблоне у меня этот момент есть и, те кто заинтересуются как решается капча, могут спокойно это там посмотреть.

Теперь покажу как это все берется, откуда и куда помещается:

Выделяем первую строку, простым нажатием левой кнопки мыши на нее.
Определяем какой это метод (смотрим какая запись находится в этой строке в столбце "Method "). В данном случае это GET . Затем идем в закладку RawStream, именно от туда все необходимые данные я, как правило, и беру.
Дальше мы берем и копируем сам запрос и делается это так:

Нажимаем право кнопкой мыши на интересующую нас строку и в выпадающем меню выбираем «CopyCell ».
К получится, что мы скопируем текст - https://vk.com/
Это очень удобно.

Теперь более подробно рассмотрим как и что мы добавляем в наш экшин.

На картинке ниже, в левой стороне расположена часть из HTTP Analyzer "а – Закладка "RawStream ", а справа экшин GET запроса из ПроджектМэйкера:

Тут мы это экшин заполняем следующим образом:
URL – мы вставляем то, куда хоти обратиться (в нашем случае это https://vk.com)
Referer – берем из RawStream (на картинке выделили данный момент)
Кодировка windows-1251 (так как работаем с Русскоязычной частью ВК)
Таймаут я советую ставить более 300 на проксях. На хороших или на своем IP можно оставить и 30.
Далее всегда выбираем в «Загружать » - Заголовки и содержимое, так как часто использую проверку - какой пришел ответ от сервера.
И объявляем переменную. Для GET запросов я всегда использую переменную {- Variable .get_info -} . Так понятнее для меня. Вы можете называть и обзывать ее как Вам угодно.

Следующая картинка будет из закладки «Дополнительно » того же экшина:

Ставим галочку Редирект, которая означает, что если там есть переход на следующую/другую странице, то он выполнит соответствующий запрос автоматически (по крайней мере я это так понимаю). Иногда нужно отключать! Но так, вообще полезная штука - сокращает кол-во запросов.

В поле UserAgent первой строчкой ставим нашу переменную {- Variable .useragents -}, так как мы ранее в эту переменную поместили данные нашего ЮзерАгента.
Далее вставляем выделенный синим текст. По сути, так делаем всегда, при составлении GET и POST запросов.
Дальше там уже появится строка с куками, но ее мы будем помещать в окно Cockie , что ниже.
Вообще я всегда делаю так:
1. Выделяю все (в программе HTTP Analyzer в закладке Raw Stream ), что слева до первой строки и копирую в ProjectMaker в экшин (POST или GET ) в закладку "Дополнительно ".
2. Вставляю это все в поле UserAgent в закладке "Дополнительно " экшина.
3. В вставленном тексте нахожу строку начинающуюся с Cookie и вырезаю ее в поле ниже, которое так и называется "Cookie: ".
4. Удаляю от туда "Cookie: " из текста и оставляю пока данные куков и возвращаюсь к ЮзерАгенту.
5. Удаляю там строку с ЮзерАгентом, так как вместо него у нас там стоит переменная.
6. Удаляем так же строку Content-Lenght
7. Cтроку с Refferer переносим в первую часть экшина - "Основные " и вставляем в соответствующее поле.
8. Удаляем начало - "Refferer: ".
Если в рефферере используются какие либо параметры, то используем соотвествующие этим параметрам наши переменные. Если таковые имеются. Если нет, то нужно найти заранее, взять и объявить такие переменные.
Так же поступаем и с Cookie . Все должно быть через переменные.

Теперь нам нужно посмотреть, что пришло в ответ.
Смотрим ответ в правой части RawStream :

Как видим, тут мы уже получили наши первые куки.

Вот тут то нам и пригодится текстовый редактор. Я беру все, что лежит в ответе на наш запрос и копирую в текстовый редактор, а просматриваю уже там.

В общем нам тут интересны куки и еще две переменные:

Всего мы ищем такие параметры - "ip_h ", "remixlang ", "lg_h " и "remixlhk ". Для удобства я их называю так же - {- Variable .ip_h -} , {- Variable .remixlang -} , {- Variable .lg_h -} , {- Variable .remixlhk -}

Вот так это будет выглядеть в шаблоне:

Так же делаю простенькую проверку – нашлось ли во ответе на GET запрос ip_h .
Если нет, значит что то не то с проксей или просто подзависло. Если нашлось то все в порядке.

В общем там, как правило все хорошо и те данные, что мы ищем, находятся.

Кстати, наличие remixlhk в данных, в свое время и послужило причиной того, что большинство софта работающего с ВК перестало работать. Именно поэтому, лучше иметь открытый шаблон для ЗенноПостера, где такие казусы быстро можно исправить.

Теперь нам нужно отправить на сервер данные для авторизации – логин и пароль.
Работаем со следующей строкой:

Как видим, это уже POST запрос и мы будем тогда использовать другой экшин.

Как и в предыдущем примере – копируем ячейку и это будет URL’ом нашего будущего POST запроса:

Все то же самое. Так же проставляем Рефферера обязательно!

Данные берем так же из RawStream :

Content-Type: application/x-www-form-urlencoded определяет тип данных.
Именно поэтому urlencoded!

Данные выглядят так (на картинке выше в красном прямоугольнике и с текстовым указанием "ДАННЫЕ "):

    act=login&role=al_frame&expire=&captcha_sid=&captcha_key=&_origin=http%3A%2F%2Fvk.com&ip_h=4be754765f3544efab&lg_h=526aa8a2bec4cc5c0a&email=79998015427&pass=yEWwLdH

Думаю углубляться не стоит как все мы это заменяем? С нашими переменными станет уже так:

    act=login&role=al_frame&expire=&captcha_sid={-Variable.captcha_sid-}&captcha_key={-Variable.captcha_key-}&_origin=http%3A%2F%2Fvk.com&ip_h={-Variable.ip_h-}&lg_h={-Variable.lg_h-}&email={-Variable.login-}&pass={-Variable.password-}

Как правило я стараюсь называть переменные как и параметры в запросах - так проще потом вставлять.
Переменные начинающиеся с captcha – это то что мы берем, если есть капча.

В дополнительных настройках экшина у нас будет так:

Не ставил галку у редиректа, так как так и не разобрался, почему иногда не происходит корректный редирект в рамках POST запроса именно при авторизации.

Далее я проверяю наличие куков remixq_
Данные куки появляются при авторизации в аккаунте. Если не появились, значит что то пошло не так. Тогда проверяем на капчу. Если и капча не выскочила, то тут уже проблемы с самим аккаунтом.

Получение AccessTokenVK.COM бессрочный


Данный вид токена (при получение его для правильного standalone-приложения ) дает доступ к абсолютно всем функциям, которые имеет аккаунт в вк. Этот вид токена я рекомендую всегда получать, что бы потом не сталкиваться с проблемой, когда упрощенного токена не хватает прав для задуманных Вами действий.

Для получения токена, нам необходимо получить куки, что мы уже имеем делать из первой части и всего два GET –запроса! Хотя, упрощенный - всего один экшин. =)

Давайте посмотрим первый запрос.
Запрос делаем без редиректа!
В URL вставляем строку:
{-Variable .client_id-} - Это ID приложения, которое Вам нужно найти или самим создать тут:
https://vk.com/apps?act=manage
Ну или пользуйтесь моим, что я не советую.

Настройки приложения можете посмотреть на этом скрине:

А права доступа расписаны здесь – https://vk.com/dev/permissions

Если мы ничего не упустили, то в ответ на GET -запрос придет ссылка для получения токена.

Изначально я всегда проверяю – пришел ли правильный ответ. В данном случае я проверяю есть ли полученном ответе «grant_access_title ».

Это правильный ответ и тут имеются необходимые нам данные.
Далее мы парсим ссылку для подтверждения запроса, которую мы помещаем в переменную {- Variable .Location -}

И делаем последний запрос, так же без редиректа!

На скрине показан запрос и по вкладкам.
Обратите внимание, что у ВК практикуется такая тема, что на определенные действия используются определенные куки и не стоит, все куки пихать в запрос.
На некоторых запросах данный момент реально критичен!

Если и в этот раз ничего не упустили и не напутали, то в ответе будет нужный нам токен:

Отсюда мы его и парсим.

НА СКРИНЕ ПРИВЕДЕН ПРИМЕР С ПРАВАМИ НА «постинг без HTTPS»!
Отличается он тем, что в конце добавляется параметр – secret .
Более подробно прочитать можете тут - https://vk.com/dev/api_nohttps
Я же не беру такие токены, так как пока не было необходимости получать такой токен и что бы потом не генерировать переменную sig .

По сути любые действия с загрузками выглядят именно так – в три этапа. Принцип везде один и тот же. Если разберетесь с одним из самых сложных моментов – загрузкой фотографий, то сможете делать все!

И так вернемся к загрузке

Будем рассматривать на примере загрузки фотографии в фотоальбом какой либо группы. Для этого нам нужно кроме токена еще {- Variable .group_id -} и {- Variable .album_id -}

{- Variable .group_id -} – ID группы

{- Variable .album_id -} - ID фотоальбома в этой группе.

Где и как Вы их брать будете, я не буду рассматривать. В моем примере, данные переменные я ввожу в шаблон через InputSettings :

Плюс работы с API заключается в том, что для работы нам нет нужды ни в куках ни в юзерагентах.

Первый запрос будет POST и выглядит он так:

В поле URL помещаем код:

    https://api.vk.com:443/method/photos.getUploadServer

Так как мы загружаем фотографию, то и используем Метод работы с фотографиями.
В частности - https://vk.com/dev/photos.getUploadServer
Со всеми возможными методами можно ознакомиться тут - https://vk.com/dev/methods

Запрос практически всегда формируется так - https://api.vk.com:443/method/ + выбранный метод .

Метод (какой текст присоединять к запросу) берем отсюда:

Данные будут такие:

    group_id={-Variable.group_id-}&album_id={-Variable.album_id-}&access_token={-Variable.access_token-}

Откуда мы все это взяли? Все просто! Смотрим внимательно на описание метода и видем такую часть - Параметры:

В данном случае тут присутствуют такие параметры как album_id и group_id . Они обязательны и нужны для правильного формирования запроса.

Строка запроса формируется как – необходимые параметры соединенные через “& ” и access_token в конце. Можно и версию API ставить.

В моем случае, album_id и group_id уже заданы, а access_token получен.
Где и как Вы будите брать album_id и group_id это уже решать Вам.

Тип данных – urlencode. Данный тип всегда используется, за исключением случаев, когда что то загружаем !
Так же напомню, что если сомневаетесь в типе данных, то посмотрите какой content-type используется.

В данном случае на скрине у меня почему то стоит загрузить – только содержимое.

Видимо ошибка, так как я использую всегда – Заголовки и содержимое, так удобнее – всегда можно проверить пришел ли ответ или он был пустой.

В общем при правильных данных и рабочем токене мы получим следующий ответ:

  1. Content-Type: application/json; charset=utf-8

    Content-Length: 202

    Connection: keep-alive

    X-Powered-By: PHP/3.19487

    Pragma: no-cache

    Cache-control: no-store

    Content-Encoding: gzip

    {"response":{"upload_url":"http:\/\/cs631229.vk.com\/upload.php?act=do_add&mid=187638093&aid=221646126&gid=103611875&hash=9a8b2772a9ceabc1821aee59faa2bc72&rhash=3c6d36c299672e7d8b3412029acef606&swfupload=1&api=1","aid":221646126,"mid":187638093}}

Рассматриваем данный ответ.
Есть указание – response и он не пустой.
"aid " и "mid " нас не интересуют это id фотоальбома группы и id анкеты, загружающей фотографию. Да, да. Везде все палится.

Нас тут интересует "upload_url ", его мы и парсим, так же обрабатываем текст – заменяем "\/ " на "/ " все и помещаем в переменную {- Variable. upload_url -}

Всем привет!

Захотелось мне тут поработать с API Вконтакте чтобы можно было полноценно управлять своим аккаунтом и группами/пабликами прямо из скриптов. И причем все на PHP. К слову сказать для Ruby есть подходящий Gem, а для PHP куча статей половина из которых уже содержит неактуальные сведения. И что же делать?

Как говорится тот кто ищет тот всегда найдет. На просторах GitHub нашелся подходящий проект - vkPhpSdk который довольно сильно упрощает работу с этой соцсетью

Для начала отмечу что тут есть два варианта для работы:

2) С созданием приложения и последующей пользовательской авторизации для работы.

Вкратце объсню в чем различия. В первом случае можно просто делать запросы к API без всякой авторизации и получать различные данные. К примеру список друзей определенного пользователя, сообщения со стенки и прочее. Практически все get-функции доступны без access_token. Поэтому всякие различные парсеры и прочие штуки можно пилить уже так.

Второй же вариант предполагает также возможность публикации записей, загрузки медаконтента и вообще полноценное управление аккаунтом (даже статусы можно выставлять, лол). Но тут также необходимо создать Standalone-приложение (Приложение для Web-сайта не выбирайте, из него нет возожности делать set-запросы) и получить для него определенные права у пользователя.

Итак. Давайте посмотрим на примере из vkPhpSdk:

api("getProfiles", array("uids" => $vkPhpSdk->getUserId(), "fields" => "uid, first_name, last_name, nickname, screen_name, photo_big",)); echo "My profile:{br/}"; echo "{pre}"; //тут просто парсер на сайте корежит, думаю догадаетесь что надо сделать =) print_r($result); echo "{/pre}"; ?>

Тут мы просто получаем данные о пользователе. Поля прописаны в запросе.

authorize() === true) { // Init vk.com SDK $vkPhpSdk = new VkPhpSdk(); $vkPhpSdk->setAccessToken($oauth2Proxy->getAccessToken()); $vkPhpSdk->setUserId($oauth2Proxy->getUserId()); // API call - wall post $result = $vkPhpSdk->api("wall.post", array("owner_id" => $vkPhpSdk->getUserId(), "message" => "Wellcome to vkPhpSdk!",)); echo "Wall post response: {br /}"; echo "{pre}"; print_r($result); echo "{/pre}"; } else echo "Error occurred"; ?>

А вот уже тут мы постим пользователю сообщение на стенку. После того как он зайдет на страницу с этим кодом то появится запрос прав от приложения. Если пользователь соглашается то на стене у него постится запись.

Client_id и client_secret можно получить при создании приложения

В параметре scope передаются функции разрешение выполнения которых требует приложение

В данном примере я записал все функции, включая offline. Особенность этой функции такая что получив один раз access_token можно просто запихнуть его в $vkPhpSdk->setAccessToken и Oauth2Proxy даже не вызывать. В итоге приложение будет работать с правами одного авторизованного пользователя до тех пор пока он не сменит пароль. Это пригодится если вы напишете бота и один раз его авторизовав будете рулить им из скрипта.

Ну вот как то так. Как видите все на самом деле очень просто. Удачи! =)

Социальные сети стали неотъемлемым инструментом продвижения сайтов. Для раскрутку сайта через соц. сети следует создать группу или страничку данного сайта. Набирать подписчиков, выкладывать новости на стену и много чего ещё (это тема отдельной заметки). Многие эти процессы можно автоматизировать используя 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 и автоматизировать свои действия в контакте.

Тем, кто решил заняться разработкой приложений для ВКонтакте рано или поздно придется столкнуться с таким понятием как API (application programming interface), что в дословном переводе означает интерфейс прикладного программирования.


Более просто – API это целый комплекс разнообразных готовых функций, готовых классов, констант и т.д., которые можно использовать в сторонних . API ВКонтакте постоянно дорабатывается и сегодня это – уже полнофункциональный набор дополнений, позволяющий .

Подробно ознакомиться с документацией вы можете вот .
Последнее глобальное преобразование этой среды разработки было проведено еще в апреле 2009 года. Конечно, и после этого сайт постоянно модифицировался. Отметим основные возможности API ВКонтакте

  1. На API был реализован доступ приложений к друзьям, их фото, видеозаписям. Приложения сейчас могут самостоятельно создавать альбомы, размещать в них информацию . Ранее такого не было. Что важно, пользователь при установке такого приложения сам решает, открывать ему доступ к личным данным или нет.
  2. Рассылка приложениями уведомлений. Да, это порой надоедливое всплывающее уведомление в левой нижней части экрана также реализовано на API.
  3. Приглашать друзей в приложения стало проще также благодаря интерфейсу прикладного программирования , на котором была реализована данная функция массового приглашения. Впоследствии эти приглашения стали использоваться и для рекламы.
  4. Со страниц приложений исчезла реклама от ВК. Теперь разработчик игры или программы для ВК сам решает, нужна ли ему в его «флешке» реклама. Если да – он вправе разместить собственную и получать с нее 100% прибыль .
  5. Как назвали это разработчики ВК, пользователи, интегрирующие приложения, получили доступ к внутренней экономике сети. Проще говоря, стало доступным API позволяющее использовать ВКонтакте в качестве внутренних расчетов .
  6. Возможность запуска приложений в полноэкранном режиме . Увеличение максимального размера фрейма дало возможность для размещения дополнительных баннеров с рекламой, так что сегодня разработка приложений для ВК – это не просто удовольствие, а довольно прибыльное занятие при решении заняться рекламой, продажей баннеров с него.
  7. Сторонние приложения распространяются сейчас и через ленту новостей . Это еще один шаг для их популяризации. Кроме того (пусть уже и было это давно, приложению доступной стала миниатюрная иконка).
  8. Порядок вывода приложений также реализован на API. Сегодня по умолчанию, те игры, которые запускаются чаще всего – находятся у вас на первых позициях. Которыми давно не пользовались – найдете в конце списка.
  9. Благодаря API стала доступна и подробная встроенная статистика. Сегодня вы легко можете посчитать посетителей, просмотры страниц, пол, возраст, местонахождение пользователя приложения. Вся информация представляется максимально наглядный образом, в виде flash графиков, которые строятся моментально. Сделано это в первую очередь для рекламы (продажи рекламных площадей). Вы получаете статистику, видите что приложение используют десятки тысяч людей. Показываете это рекламодателю, который наверняка захочет оплатить баннер именно в таком приложении.
  10. Для самых популярных приложений стала возможна регистрация коротких поддоменов (например chat.vk.com и аналогичных) для простого запоминания и быстрого доступа.
  11. Ну и, наконец, появилась возможность вывода информации на личных страницах пользователей .


Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: