如何查询或导出所有有费率限制的Shopify客户或订单



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

获取所需数据的最佳方法是使用GraphQL和Bulk Queries。通过这些,您可以在客户或订单数据方面指定您想要的内容。然后,您在查询中询问数据,然后Shopify将所有数据打包到一个完整的JSONL文件中。你可以四处查看,直到他们完成包,这时你会得到一个下载URL,在那里你可以获得所有数据。

分页是导出数据的一种糟糕方法。它确实有效,但速度很慢,而且会出现网络错误,任何与Shopify合作过的人都会告诉你。

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对象。使用对象时,调用属性和interval属性指定重新填充速率和bucketSize属性bucket大小。例如{calls:2,interval:1000,bucketSize:35}指定每秒2个请求的限制35个请求的突发。当设置为true时,请求被限制为在上面的示例中指定。默认为false。

完成后,您可以根据需要将它们写为csv或JSON或任何其他形式。对于排队,您可以使用Bull或Agenda之类的东西。

最新更新