@kolomat

Возможно ли написать какой-то callback что бы перезапускал цикл?

Заранее извиняюсь за тупость в вопросе так и не смог придумать как описать суть, в принципе так же как и решить вопрос)
Суть в чем есть API передается GET запрос выглядит приблизительно так
CURLOPT_URL => "https://public.api.openprocurement.org/api/0/plans?offset=2020-03-03",

Ответ выглядит так
stdClass Object
(
    [next_page] => stdClass Object
        (
            [path] => /api/2.5/plans?offset=2020-03-03T08%3A05%3A25.550716%2B02%3A00
            [uri] => https://public.api.openprocurement.org/api/2.5/plans?offset=2020-03-03T08%3A05%3A25.550716%2B02%3A00
            [offset] => 2020-03-03T08:05:25.550716+02:00
        )

    [data] => Array
        (
            [0] => stdClass Object
                (
                    [id] => d566f3ef3e7e4f44a2f0cb9c7cf686d2
                    [dateModified] => 2020-03-03T00:00:25.941519+02:00
                )

            [1] => stdClass Object
                (
                    [id] => bbd915a7560c47a9bd3a428aa6a50c96
                    [dateModified] => 2020-03-03T00:05:35.600237+02:00
                )

            [2] => stdClass Object
..... до сотого эллемена

Суть проблемы в чем, например если я запускаю скрипт с параметрами текущей даты, я получаю первые 100 id начиная с 12 часов ночи, для получения следующих как видите есть параметр
[offset] => 2020-03-03T08:05:25.550716+02:00
Которые надо поставить уже в URL
Проблема в том что не могу придумать как это зациклить, например так что бы Получил первые 100,записал, получил ссылку на следующиие 100, подключился,записал и так далее пока не дойдет до страницы меньше на которой будет меньше ста. Тоесть если бы например при подключении они бы отдавали что то типа total
[offset] => 750
Можно было бы написать условие для for. А как можно поступить в конкретных условиях?
Заранее спасибо за любое мнение и совет
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Смысл в том что мы объявляем переменную $offset, а запрос помещаем в бесконечный цикл
Первый запрос пройдёт с вашим значением $offset. Далее Смотрим ответ, и если там есть другой next_page->offset то изменяем стартовое значение $offset на новое.
Цикл повторяется, но в url уже подставится изменённый $offset;

<?php
$offset = '2020-03-03';
while(true)
{
    //CURLOPT_URL => "https://public.api.openprocurement.org/api/0/plans?offset={$offset}",
   //обработали ответ curl

   //смотрим есть ли next_page->offset в ответе
   if(isset($object->next_page->offset))
   {
        if($object->next_page->offset != $offset)
        {
             $offset = $object->next_page->offset;
             continue; //возвращаемся в начало while но запрос уже будет с новым $offset
        }
   }

    break; //прерываем while так как нету next_page->offset
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
если фронт, то js цикл с ajax вызовами, если бэк - задание по крону либо просто консольный скрипт
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы