powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Просьба глянуть, нет ли ошибки в алгоритме
1 сообщений из 1, страница 1 из 1
Perl: Просьба глянуть, нет ли ошибки в алгоритме
    #39910727
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть скрипт, который работает с веб-сервисом (REST JSON).
У API есть два входных параметра: limit и start. Первый указывает, сколько строк вернуть в ответе, второй указывает номер строки, с которой будет возвращаться ответ (нумерация строк начинается с нуля), по умолчанию они равны 50 и 0 соответственно.
То есть чтобы получить все строки, мне нужно указывать в первом запросе start=0, во втором start=50 и т.д.
API возвращает следующую структуру:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
{
  "data": [
    {
      "start": "2019-11-01T00:00:00+0300",
      "stop": "2019-11-08T00:00:00+0300",
      "tarif": 24,
      "id": 19596,
      "account": 16657,
      "tarif_dto": null,
      "account_dto": null
    }
  ],
  "total": 1,
  "start": 0,
  "limit": 50
}


start и limit повторяют входные параметры запроса, total содержим общее количество строк результата (без учета limit), а в data содержится массив с результатами (с учетом limit).
Если задать limit=0, тогда пейджинг не производится и веб-сервис возвращает весь результат в одном ответе. Но веб-сервис плохо работает в таком режиме (начинаются ошибки 500), поэтому в рабочих скриптах я всегда использую пейджинг.

У меня используется следующий код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        my $self = shift;
        my $n = $cfg->{'api'}->{'batch'};
        my $i = 0;
        my @ret;
        while (1)
        {
                my $res = $self->query('account_subscriptions', 'GET', [{'limit'=>$n, 'start'=>$i}]);
                return $res unless (ref($res));
                my $c = $res->{'total'};
                $res = $res->{'data'};
                last unless (@$res);
                @ret = (@ret, @$res);
                last if ($n == 0);
                $i += $n;
                last if ($i >= $c);
        }
        return \@ret;



Но он иногда не возвращает некоторые строки.
Я подозреваю, что это глюк на стороне веб-сервиса.
Но вначале хотелось бы быть полностью уверенным, что на моей стороне алгоритм правильный и эти строки не выпадают из-за того, что я неправильно вычисляю start.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Просьба глянуть, нет ли ошибки в алгоритме
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]