使用 Shopify API 获取所有产品(超过 50,000)

Ruc*_*chi 3 php api curl shopify

我正在尝试使用 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);
Run Code Online (Sandbox Code Playgroud)

ale*_*aiz 5

您可能已达到 Shopify API 限制调用。所以你可能需要处理队列。以下是 Shopify API 限制计算的工作原理:

Shopify使用漏桶算法,桶大小为 40 次调用,泄漏率为每秒 2 次。

这是如何运作的:

  • 您每次调用都会将虚拟桶级别增加一级
  • 桶每半秒漏一次,当前水位减一
  • 只要存储桶有空间,您的呼叫就会立即处理,否则您会收到 429 错误
  • X-Shopify-Shop-Api-Call-Limit 标头将指示当前级别和存储桶大小为“x/40”

这对您的应用意味着什么:

  • 您可以在一秒钟内进行多达 40 个呼叫的突发。他们都会立即处理
  • 一旦达到限制,将需要 500 毫秒才能允许另一个呼叫通过
  • 只要您保持在平均每秒 2 个呼叫以下,您就不会达到限制
  • 这实际上每 5 分钟每家商店最多可调用 600 次左右