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

时间:2015-03-11 06:47:04

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

1 个答案:

答案 0 :(得分:4)

您可能正在接触Shopify API限制电话。所以你可能需要使用队列。以下是Shopify API限制计算的工作原理:

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

这是如何运作的:

  • 您进行的每次通话都会将虚拟存储桶级别提高一级
  • 每半秒钟一桶漏水,将当前水平降低一个
  • 只要存储空间有空间,您的电话就会被立即处理,否则会出现429错误
  • X-Shopify-Shop-Api-Call-Limit标头将指示当前级别和铲斗尺寸为“x / 40”

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

  • 您可以在一秒钟内拨打最多40个电话。它们都将立即处理
  • 一旦达到限制,将需要500毫秒才能通过
  • 进行另一次通话
  • 只要您平均每秒停留2次,就不会达到上限
  • 实际上,每5分钟每个商店最多可拨打600个电话