0

考虑到速率限制和分页因素,我很好奇如果我想将所有满足特定标准的客户或订单导出为 json 或 csv 等,那么最好的方法是什么。我猜这将是某种循环脚本,最多可以查询 250 条记录并重复该操作,直到分页完成。是否有任何代码可以显示这一点,我觉得有很多应用程序这将是有用的或需要做某些事情。这或多或少是 shopify 中的导出功能,但在您自己的应用程序中进行。

4

2 回答 2

0

Shopify 有一个很好的 Node.js API 模块。它提供了简单的分页处理和速率限制。从应用程序的角度来看,您可能会决定使用一些队列机制。由于根据订单或客户的数量,这些流程可能需要更长的时间才能完成,因此每当客户请求记录导出时,将作业推送到队列中并在完成后通知。

对于在处理速率限制的同时使用 API 获取订单或客户,Shopify API 节点文档中的以下代码就足够了。

const Shopify = require("shopify-api-node");

const shopify = new Shopify({
  shopName: "your-shop-name",
  apiKey: "your-api-key",
  password: "your-app-password",
  autoLimit: true,
});

(async () => {
  let params = { limit: 250 };
  do {
    const products = await shopify.product.list(params);
    console.log(products);
    params = products.nextPageParameters;
  } while (params !== undefined);
})().catch(console.error);

autoLimit - 可选 - 此选项允许您调节请求速率以避免达到速率限制。使用令牌桶算法限制请求。接受的值是布尔值或纯 JavaScript 对象。使用对象时,调用属性和间隔属性指定再填充率,而 bucketSize 属性指定存储桶大小。例如 { calls: 2, interval: 1000, bucketSize: 35 } 指定每秒 2 个请求的限制,突发 35 个请求。当设置为 true 时,请求会受到上述示例中指定的限制。默认为假。

完成后,您可以根据需要将它们编写为 csv 或 JSON 或其他任何内容。对于队列,您可以使用BullAgenda之类的东西。

于 2020-08-21T08:20:28.853 回答
0

获取所需数据的最佳方法是使用 GraphQL 和批量查询。您可以根据客户或订单数据指定您想要的内容。然后,您通过查询请求数据,然后 Shopify 将其全部打包到一个完整的 JSONL 文件中。你到处走,等他们完成包,此时你会得到一个下载 URL,你可以在其中拥有所有数据。

分页是一种糟糕的方式来导出数据。它确实有效,但速度很慢,并且会出现网络错误,因为任何使用过 Shopify 的人都会告诉你。

于 2020-08-22T02:22:09.087 回答