#php
#php
Вопрос:
У меня есть следующий PHP-код и функция, с помощью которых я вызываю URL API и возвращаю данные в виде массива, используя json_decode. Проблема в том, что возвращаемые данные разбиваются на страницы. Таким образом, в результате страницы я получаю ключ массива с именем nextPageID. Поэтому, когда я выполняю вызов с помощью функции, я могу получить только первый набор данных с первой страницы. Есть ли способ для меня выполнять функцию до тех пор, пока параметр nextPageID больше не будет определен?
$getData = getData("https://api.url/api?key=xyz");
$next_pageid = $getData['nextPageID'];
echo "<pre>";
print_r($getData);
echo "</pre>";
function getData($url){
$json = file_get_contents($url);
return json_decode($json,true);
}
Комментарии:
1. Вы смотрели документацию по API?
2. Как насчет проверки этого параметра и запуска другого вызова API?
3. «Есть ли способ» — Да. Что вы пробовали и где вы застряли? Я полагаю, что на высоком уровне вашими шагами было бы десериализовать ответ в объект и изучить его. Если это указывает на то, что доступно больше результатов, сделайте другой запрос, десериализуйте его и объедините его данные с имеющимися у вас данными.
4. Просто окружите свой код (не функцию) циклом while:
do { ....<your code> ....} while (isset($getData['nextPageID']));
И, конечно, используйте следующий индекс.
Ответ №1:
Вам нужно использовать функцию рекурсионного вызова в функции. На примере:
$api_url = "https://api.url/api?key=xyz";
function getData($api){
$json = file_get_contents($api);
$array = json_decode($json);
//This is ok ONLY if on last page nextPageID = null and for get next page you need to use parametr nextPageID in GET
if(isset($array['nextPageID']) amp;amp; $array['nextPageID'] !== null){
$array .= array_merge($array,(getData($api."amp;nextPageID=".$array['nextPageID']));
}
return $array;
}
print_r (getData($api_url));