【问题标题】:Fetch all the products (more than 50,000) using the Shopify API使用 Shopify API 获取所有产品(超过 50,000 个)
【发布时间】:2015-03-11 06:47:03
【问题描述】:

我正在尝试使用 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);

【问题讨论】:

  • Shopify 可以选择增加和改进 API 调用。此选项适用于 Shopify Plus 帐户。您与 shopify 客户经理联系以改进 API 调用。

标签: php api curl shopify


【解决方案1】:

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

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

它是如何工作的:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多