Работа с реальным 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
в обычную дату.
И пройдёмся циклом по всем сообщениям о въезде в Россию