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

标签 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);

最佳答案

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

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

它是如何工作的:

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

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

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

关于php - 使用 Shopify API 获取所有产品(超过 50,000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980206/

相关文章:

api - Gulp 浏览器同步 - 通过代理重定向 API 请求

bash - curl: (26) 当文件是变量时无法打开文件

php - 使用 php volley 库从服务器获取大量 json 数据花费太多时间

PHP - Stripe 传递自定义变量

php - 如何从 preg_replace 中提取数据

php - 将新订单电子邮件通知附件添加到供应商电子邮件

node.js - Swagger 特定路径的安全性

java - 为什么在这种情况下不能使用子字符串?

来自 Node.js HTTP 服务器的 PHP curl 超时

java - 如何使用 reSTLet 对安全站点进行 POST 调用,该调用与 curl POST 配合良好