Json 获取所有Shopify产品

Json 获取所有Shopify产品,json,http,axios,shopify,Json,Http,Axios,Shopify,我正在尝试从Shopify商店获取所有产品的JSON。我一直在向警察局提出GET请求 {storeurl}/products.json 终点。但最终只展示了商店提供的一部分产品(很多,但不是全部)。当我将参数更改为: {STORE URL}/products.json?limit=20000000 我得到了更多的产品,但仍然不是全部。我怀疑网站销售的产品超过2000万件。顺便说一句,我也在使用Axios。如果您知道发生这种情况的原因,以及如何获得产品、变体等的完整列表,请告诉我。您不能通过Sho

我正在尝试从Shopify商店获取所有产品的JSON。我一直在向警察局提出GET请求

{storeurl}/products.json

终点。但最终只展示了商店提供的一部分产品(很多,但不是全部)。当我将参数更改为:

{STORE URL}/products.json?limit=20000000


我得到了更多的产品,但仍然不是全部。我怀疑网站销售的产品超过2000万件。顺便说一句,我也在使用Axios。如果您知道发生这种情况的原因,以及如何获得产品、变体等的完整列表,请告诉我。

您不能通过Shopify的单个请求获得超过250种产品

请参阅此处的文档:(其中限制最大值可为250)

为了获得250多个产品,您需要使用递归函数并使用
page\u info
参数进行分页请求。有关这一问题的更多信息,请参见:

当您发出请求并进行分页时,shopify将返回与此类似的标题:

Link: "<https://{shop}.myshopify.com/admin/api/2019-07/products.json?page_info=vwxyzab&limit=6>; rel=next"
链接:“rel=next”
为了向第二个页面发出请求,您需要抓取链接并向其发出请求,这同样适用于您发出请求时,如果有更多页面,则会有相同的标题,以此类推

因此,您需要从中获取响应头和链接,并使其递归:

function makeRequest(nextLink = '{STORE URL}/products.json?limit=250'){
  return new Promise((resolve, reject) => {
    fetch(nextLink).then(r => {
      const headerLink = r.headers.get('link');
      const match = headerLink.match(/<[^;]+\/(\w+\.json[^;]+)>;\srel="next"/);
      const nextLink = match ? match[1] : false;
      if(nextLink){
        makeRequest(nextLink)
      } else {
        resolve();
      }
    })
  })
}
函数makeRequest(nextLink='{STORE URL}/products.json?limit=250'){
返回新承诺((解决、拒绝)=>{
获取(nextLink)。然后(r=>{
const headerLink=r.headers.get('link');
const match=headerLink.match(/;\srel=“next”/);
const nextLink=match?match[1]:false;
如果(下一个链接){
makeRequest(nextLink)
}否则{
解决();
}
})
})
}