Получить все продукты (более 50000), используя Shopify API

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

Вот что я имею до сих пор:

$ch = curl_init();
for ($i=1; $i<=1000; $i++)
{
curl_setopt($ch, CURLOPT_URL, "https://API:PASS@store/products.json?page=$i");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
$res = curl_exec($ch);
$res=json_decode($res, true);
foreach($res as $products) { // A different example
foreach($products as $product) {
$title=$product['title'];
}
}
sleep(1);
}
curl_close($ch);

2

Решение

Вы, вероятно, достигаете предельного вызова Shopify API. Так что вам, вероятно, нужно работать с очередями. Вот как работают расчеты лимита API Shopify:

Shopify использует алгоритм сегмента утечки с размером сегмента 40 вызовов и скоростью утечки 2 в секунду.

Как это работает:

  • Каждый сделанный вами вызов увеличит уровень виртуального сегмента на один
  • Каждые полсекунды ведро протекает, уменьшая текущий уровень на единицу
  • Ваши звонки обрабатываются немедленно, пока в корзине есть место, в противном случае вы получите ошибку 429
  • Заголовок X-Shopify-Shop-Api-Call-Limit будет указывать текущий уровень и размер корзины как ‘x / 40’

Что это значит для вашего приложения:

  • Вы можете делать пакеты до 40 звонков в секунду. Все они будут обработаны немедленно
  • Как только вы достигнете предела, пройдет 500 мс, прежде чем будет разрешен другой вызов
  • Пока вы держите в среднем 2 звонка в секунду, вы не достигнете предела
  • Это на самом деле максимально до 600 звонков в магазине за 5 минут
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]