Работа с реальным API на PHP

Содержание
Введение
Реальный пример работы с API
Похожие статьи

Введение

В этой статье вы можете изучить пример выполнения и обработки запроса к реальному API с помощью средств PHP.

Для лучшего понимания полезно владеть материалом статьи json_decode

Реальный пример

Сайту HeiHei.ru нужно получить информацию о пробках на границе с Финляндией.

Для этого он обращается к API сайта narganitse.ru. Который выглядит следующим образом

[ { // Из России "1": { // Торфяновка "number": "12", // Число машин "date": 1325513571, // UNIX-время, когда было получено сообщение "comment": "", // Комментарий "changes": -11, // Изменение относительно предыдущего сообщения "author": "test", // Имя автора комментария "url": "", "waiting": 15 // Примерное время ожидания }, "2": { // Брусничное "number": "0", "date": 1303291117, "comment": "", "changes": -55, "author": "***0606", "url": "", "waiting": 0 }, "3": { // Светогорск "number": "35", "date": 1303287127, "comment": "машин не много: 30-35. только подъехали и пока стоим.", "changes": -20, "author": "Explorer002", "url": "", "waiting": 42 } }, { // В Россию "1": { "number": "13", "date": "1326638542", "comment": "", "changes": -32, "author": "***2117", "url": "", "waiting": 16 }, "2": { "number": "60", "date": 1303294658, "comment": "", "changes": 40, "author": "granitsa-online.com", "url": "http://granitsa-online.com", "waiting": 72 }, "3": { "number": "0", "date": 1303279308, "comment": "", "changes": -12, "author": "Logan", "url": "", "waiting": 0 } } ]

Этот API актуален по крайней мере на февраль 2020-го года. Последняя версия доступна на сайте

$api_address = "http://api.nagranitse.ru/data.json"; $json_border = file_get_contents($api_address); if ($json_border != NULL) { $border_obj = json_decode($json_border,true); } else { $border_obj = array("FATAL", "API is not responding"); }

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

echo $json_border;

Теперь применим json_decode

$border_obj = json_decode($json_border,true);

С помощью функции gettype() убедимся, что это массив.

echo(gettype($border_obj));

array

И посмотрим содержимое. С помощью

var_dump($border_obj);

Массив содержит два вложенных массива - это мы видим из array(2) в самом начале.

Первый найти легко: [0]=> array(6)

Второй начинается в середине: [1]=> array(6)

array(2) { [0]=> string(5) "FATAL" [1]=> string(21) "API is not responding" }

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

Так как waiting является необязательным полем, которое многие не заполняют - сделаем проверку перед выводом.

echo $border_obj[0][1]["number"]; echo $border_obj[0][1]["date"]; echo $border_obj[0][1]["comment"]; echo $border_obj[0][1]["changes"]; echo $border_obj[0][1]["author"]; if (isset($border_obj[1][6]["waiting"])) { echo $border_obj[1][6]["waiting"]; };

FATALAPI is not responding

Комментарий пуст.

Дата дана в формате epoch time. Подробнее можете прочитать в моей статье Epoch Time

Теперь повторим, но для Светогорска и на въезд в Россиию.

echo $border_obj[1][6]["number"]; echo $border_obj[1][6]["date"]; echo $border_obj[1][6]["comment"]; echo $border_obj[1][6]["changes"]; echo $border_obj[1][6]["author"]; if (isset($border_obj[1][6]["waiting"])) { echo $border_obj[1][6]["waiting"]; };

FATALAPI is not responding

Для лучшей читаемости, сконвертируем время из Epoch Time в обычную дату.

И пройдёмся циклом по всем сообщениям о въезде в Россию

FATALAPI is not responding
Похожие статьи
Программирование на PHP
Массивы в PHP
Циклы в PHP
Дата и время в PHP - основы
Как отобразить время различных часовых поясов PHP
Как вставить переменную в ссылку PHP
gettype(): определить тип переменной PHP
json_decode
Как получить ширину экрана с помощью PHP
Вызов функции из другого файла
Premature end of chunk coded message body: closing chunk expected
Сгенерировать неповторяющиеся случайные числа PHP
Узнать свой HTTP_USER_AGENT
Сравнить две даты
Классы в PHP 8
Комментарии в PHP
substr: обрезать строку
Запросы к REST API на PHP
$_SERVER['REQUEST_URI']: текущая url
Работа с базами данных
Работа с cookies
PHP sessions
Аутентификация и авторизация в PHP 8
Тернарный оператор
try catch
PHP_errors.log Beget
Разбор ошибок