Работаем с VK API из PHP. Что такое 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 Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.

Так уж сложилось, что API Вк, реализован довольно хорошо, за исключением некоторых не логичных моментов, о которых я упомяну позднее. Но речь, сегодня не о качестве, а о конкретном применении.

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

  • Серверная авторизация(т.н. авторизация сайтов)
  • Клиентская авторизация(Standalone)
  • Авторизация сервера приложения
Самое интересное для разработчика, представляют первые два. Первый, позволяет авторизовать пользователя на сайте и получить его ключ доступа, второй позволит авторизовать ваше приложение, например Dekstop или Mobile. Забегая, вперёд, второй вариант предоставляет нам огромные возможности, а первый, лишь малую их часть.

Алгоритм получения в первом случае сводится к выполнению следующих пунктов:

  • Мы выводим ссылку для авторизации пользователя, которую форматируем в соответствии с документацией
  • Пользователь переходит по ней и авторизуется
  • Пользователя перенаправляют на 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), метод

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

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

  1. Найти документацию по нужному API .
  2. Посмотреть примеры подключения к API . Тут могут быть разные варианты. Например, на одном сервисе потребуют секретный ключ, выдаваемый после регистрации. На втором сервисе, все запросы не требуют секретных ключей. На третьем сервисе, есть и с секретным ключом, и без варианты работы. Иногда, секретный ключ называют токеном .
  3. Скопировать простой готовый код с сайта документации и проверить его работу. Если не работает, то ищите ошибку у себя, так как едва ли она будет у сервиса.
  4. Найти в документации метод , который решает Вашу задачу.
  5. Используя примеры и описание метода, отправить правильный запрос к API .
  6. В зависимости от формата ответа, разобрать его на "составные части ", а дальше уже делать то, что требуется - вывести пользователю, сохранить в файл, отправить в базу данных и тому подобное.

А в качестве примера следования данной инструкции мы разберём API ВКонтакте . Итак:

  1. Ссылка на документацию .
  2. В данном случае есть методы, которые общедоступны, а потому не требуют токена, а есть методы, требующие его.
  3. В данном случае, примеров на конкретном языке я не нашёл. Возможно, они есть, но явно не на виду. Обычно же, у API для каждого метода есть примеры на разных языках.
  4. Мы хотим вывести 5 последних записей со стены конкретного пользователя, а затем вывести их у себя на сайте . Нужный нам метод .

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

$wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5");
print_r($wall);
?>

В данном случае, я использую API 5.3 (v=5.3 ), вывожу все записи независимо от автора (filter=others ) со своей страницы (domain=myrusakov ) в количестве 5 штук (count=5 ). Думаю, что здесь всё очень прозрачно.

Мы получили ответ в формате JSON , и теперь нам нужно перейти к последнему пункту - разобрать ответ на "составные части ". Дальше мы с Вами выведем записи со стены в более-менее читабельном виде на странице нашего сайта. Результирующий PHP-код :

$wall = file_get_contents("http://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5"); // Отправляем запрос
$wall = json_decode($wall); // Преобразуем JSON-строку в массив
$wall = $wall->response->items; // Получаем массив комментариев
for ($i = 0; $i < count($wall); $i++) {
echo "

".($i + 1).". ".$wall[$i]->text."
".date("Y-m-d H:i:s", $wall[$i]->date)."

"; // Выводим записи
}
?>

Как видите, всё очень просто. Самая сложная часть - разобрать на составные элементы. Я предпочитаю выводить результат от API через print_r , а уже затем писать обработку этого. Хотя можно посмотреть пример ответа в описании метода, а дальше уже написать парсер.

Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное 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 – это внешний интерфейс программирования приложения, обращения к сайтам по определённому протоколу для получения информации и упрощенной разработки программ, связанных с внутренними сервисами.

Что значит API

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

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

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

Плюсы:

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

Минусы:

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

Примеры API

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

VKAPI

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

Все запросы осуществляются к адресу https://api.vk.com/method/

После слэша идёт наименование используемого API-метода и передаются GET-параметры запроса. Ответ так же приходит по HTTPS в формате JSON.

TELEGRAM BOT API

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

Запросы осуществляются по адресу https://api.telegram.org/bot0000000:token/

Где вместо bot0000000 ставится уникальный идентификатор вашего бота, а token выражает секретный ключ.

Запросы посылаются через HTTPS соединения, название метода указывается через слэш к основному адресу. Ответ приходит в формате JSON.

OPEN WEATHER MAP API

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

Формат работа: HTTP передача по api.openweathermap.org/data/2.5/weather?id= c указанием идентификационного номера желаемого города. Ответ сервера: JSON.

GOOGLE MAPS API

Что может быть приятнее, чем интерактивная карта мира на сайте? Особенно, если это не шаблонная вставка из Google Maps, а ваша персональная редакция популярной карты с личными кластерами маркеров. Карта будет взаимодействовать с другими скриптами на сайте, посылая информацию о кликах и координатах.

Подобные возможности предлагает JavaScript API Google Maps. Модуль полностью скриптовой и работает на стороне браузера, поэтому HTTP-запросы из PHP и формирование заголовков на стороне сервера, как было в других API, нам не нужно.

Например, выставление метки на карте будет выглядеть так:

var mark = new google.maps.Marker({
position: myPOS,
map: map,
title:"Hello!"
});

Для чего нужно и чем полезно использование API

Полезных функций довольно много.

Первый аспект

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

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

Второй аспект

Если вы владелец сложных вычислительных мощностей, популярного сервиса или хранилища данных для открытого или полуприватного доступа, то хорошим ходом будет поднять собственное API. Что это даст:

  • Большой поток клиентов.
  • Упрощенный доступ к вашим услугам для партнеров.
  • Удобство статистического анализа использования сервиса.

Третий аспект

Почти тот же, что и второй. Но без необходимости реализовывать API для открытого доступа. Если у вас есть портал, и вы хотите создать под него мобильное приложение на Android/IOS, то переписать систему под единое API – лучшее решение. Вся структура данных систематизируется. Сайт и приложение будут работать через единые каналы данных.