Задать вопрос
@arsenaljek

Как вывести больше 100 номенклатур посредством curl в php?

Подскажите как заставить curl выполнятся несколько раз?
Есть код
$chphoto = curl_init('https://suppliers-api.wildberries.ru/content/v2/get/cards/list');
curl_setopt($chphoto, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
        'Host: suppliers-api.wildberries.ru',
        'Authorization: '.$GLOBALS['TokenWBContent']));
curl_setopt($chphoto, CURLOPT_POST, 1);
curl_setopt($chphoto, CURLOPT_POSTFIELDS, '{
          "settings": {
        "cursor": {
            "limit": 100
          },
          "filter": {
            "withPhoto": -1
            }
          }
        }');
curl_setopt($chphoto, CURLOPT_RETURNTRANSFER, true);
curl_setopt($chphoto, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($chphoto, CURLOPT_HEADER, false);
$resultWB3photo1 = curl_exec($chphoto);
curl_close($chphoto);
$resultWB3photo1 = json_decode(json_encode(json_decode($resultWB3photo1)), True);

Он выводит только 100 номенклатур WB. По факту номенклатур больше 1000. В инструкции API Wildberries сказано

spoiler
Порядок работы с get/cards/list:
Чтобы получить полный список номенклатур, если их больше 100, необходимо воспользоваться пагинацией.

Cделать первый запрос (все указанные ниже параметры обязательны):

{
              "settings": {
                "cursor": {
                  "limit": 100
                },
                "filter": {
                  "withPhoto": -1
                }
              }
            }


Пройти в конец полученного списка номенклатур, скопировать из cursor две строки:
"updatedAt": "***",
"nmID": ***,
Вставить скопированные строки в cursor запроса, повторить вызов метода.
Повторять пункты 2 и 3, пока total в ответе не станет меньше чем limit в запросе.
Это будет означать, что Вы получили все карточки.


Как заставить curl отработать в цикле нужно кол-во раз? Можете привести хотя бы пример на php?
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Adamos
@Adamos
Рабочий код:
public function getCards2024(): array
    {
        $cards = [];
        $limit = 100;
        $cursor = [
            'limit' => $limit
        ];
        do {
            $res = $this->curlQuery(
                self::API_SUPPLIERS,
                self::METHOD_POST,
                'content/v2/get/cards/list',
                [
                    'settings' => [
                        'sort' => [
                            'ascending' => false
                        ],
                        'cursor' => $cursor,
                        'filter' => ['withPhoto' => -1]
                    ]
                ]
            );
            if(!is_array($res) || !isset($res['cards'])) {
                throw new \ErrorException('WB returns wrong answer');
            }
            $cards = array_merge($cards, $res['cards']);
            $cursor['updatedAt'] = $res['cursor']['updatedAt'];
            $cursor['nmID'] = $res['cursor']['nmID'];
        } while($res['cursor']['total'] >= $limit);
        return $cards;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@psiklop
Цикл обычный.
$page = 0;
while(++$page) {

тут break по условию (конец пагинации или ошибки и тп)
}

Там должен быть еще параметр page или offset (не только limit)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽