Цикл через API со смещениями

Я использую API, который ограничен возвратом 100 элементов в одном запросе - в них реализованы смещения, которые затем должны позволять проходить по нескольким запросам, но я не могу понять, как их объединить.

На данный момент я использую это, которое возвращает 100 элементов и дает мне все данные и т.д., которые мне нужны, но в общей сложности около 2000 элементов, и мне нужно зациклить их все:

try {
    $all = RestClient::all(array("limit" => 100));
    foreach($all as $entry){
        //do something
}

catch(Exception $e) {
    print $e;
}

В документации показан пример использования смещения:

$resList = RestClient::all(array('limit'=>100));    
echo $resList->nextOffset();    
if($resList->nextOffset()) {     
   $resList = RestClient::all(array("limit" => 100, "offset" => $resList->nextOffset()));    
   echo $resList->nextOffset();
}

В примере не показано зацикливание, так куда же уходит мой цикл? Мне нужно несколько петель?

Если я добавлю цикл после первого $ resList, то он будет проходить через эти 100, но не более того, хотя я предполагаю, что если я добавлю его в if, тогда он никогда не будет выполнен, так как смещение никогда не будет определено?

Как я могу использовать смещение для циклического прохождения всех элементов - по сути, объединить оба набора кода?

1 ответ

Решение
$offset = 0;
while (true) {
    $resList = RestClient::all(array('limit'=>100, , "offset" => $offset));

    foreach($resList as $entry) {
        // do something
    }
    if (!$resList->nextOffset()) {
        brake;
    }
    $offset = $resList->nextOffset();
}
Другие вопросы по тегам