Блок API

API — (программный интерфейс приложения, интерфейс прикладного программирования) (англ. application programming interface) — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.


Блоку API задается имя, опции (стартовое сообщение, дождаться ответа удаленного сервиса). Настройки заголовков, параметров (переменных, постоянных).

Пример

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

Самый простой для доступа к API — сервис погоды openweathermap.org.

Регистрируемся и получаем ключ приложения (APPID) по ссылке. Обычно ключ дублируется в email письме подтверждения.

Тестируем наш запрос в браузерной строке с городом Москва. Он выглядит так: http://api.openweathermap.org/data/2.5/weather?q=Москва&APPID=c12618e22638e74315c4cb17c85896d7

Ответ от сервера получаем такой


Блок api

Для удобства копируем код запроса в json валидатор, например https://jsonlint.com/ и смотрим структуру запроса. Она выглядит так:


Блок api1

Температура находится в строке 14, параметр main.temp и равна 273,15 (Температура по Фаренгейту). С запросами к сервису погоды разобрались. Переходим к настройке отправки запроса от бота и вывод в чат. Создаем группу сообщений, добавляем 3 блока сообщений, 1 блок API, 1 условный блок. Цепочка выглядит так:


Блок api2

Переходим в блок сообщения под именем «Название города» и смотрим, что внутри.

Блок api3

Этот блок является стартовым сообщением, с опцией «подождать ответ». Cохраняем ответа от пользователя в контекстную переменную «city». Текстом сообщения: «Введите город» и ссылкой по умолчанию на блок «API».

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


Блок api4

Включена опция «Дождаться ответа удаленного сервиса». Означает что запросы будут отправляться до тех пор, пока не получится результат. Положительный или отрицательный.

В поле «Ссылка» копируем http запрос к API сервиса погоды. Ссылка выглядит так: http://api.openweathermap.org/data/2.5/weather


Тип запроса – get.
Заголовки
Добавляются в http запрос переменные и постоянные. Слева название заголовка, справа значение. В примере использовать не будем.


Параметры

Параметры можно передавать в http запрос, переменные и постоянные. Слева название параметра, справа значение. В нашем примере используем опцию.

Параметр «q» - передается в http запросе и соответствует контекстной переменной «city». Является переменным параметром, так как от каждого подписчика получаем запросы к разным городам. Полученная информация от подписчика подставляется в запрос к API погоды.

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

Сохранение результатов

Данные которые получим при ответе на http запрос должны быть в json. Сохраняем в контекстную переменную. Слева имя контекстной переменной, справа путь к данным, которые сохраняем.

При ошибке, значение «cod» будет 404 и сохранится в переменную «error». Полученная температура имеет путь main.temp, значение сохраняем в переменную «temp».

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

Блок api5

Условие Context.error!="404" означает, что при коде ошибке НЕ РАВНОМ 404 происходит переход в блок «Успех».

Условие Context.error=="404" означает, что при коде ошибке 404 происходит переход в блок «Повторный запрос».
Переходим в блок «Успех»

Блок api6

Текст сообщения: «Погода в Context.city Context.temp градусов». Вместо переменных подставляются полученные значения от сервера и финальный ответ выглядит так: Погода в Москве 274.72 градусов.

Блок api7

Переходим в блок «Повторный запрос»

Блок api8

Текст сообщения: «Не верно. Введите заново город». Ответ от пользователя сохраняем в переменную «city» и происходит переход в блок «API» для нового запроса к серверу.

Остались вопросы? Напишите нам в техническую поддержку, в сообщения сообщества во Вконтакте, Telegram и в онлайн чат