【问题标题】:Get ALL Shopify Products获取所有 Shopify 产品
【发布时间】:2020-09-28 01:14:53
【问题描述】:

我正在尝试从 Shopify 商店获取所有产品的 JSON。我一直在向

发出 GET 请求

{STORE URL}/products.json

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

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

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

【问题讨论】:

    标签: json http axios shopify


    【解决方案1】:

    通过 Shopify 的一次请求,您无法获得超过 250 种产品。

    请参阅此处的文档:https://shopify.dev/docs/admin-api/rest/reference/products/product?api[version]=2020-04(其中限制最大值可以是 250)

    为了获得超过 250 种产品,您需要创建一个递归函数并使用 page_info 参数进行分页请求。更多关于此事的信息可以在这里看到:https://shopify.dev/tutorials/make-paginated-requests-to-rest-admin-api

    当您发出请求并且有分页时,shopify 会返回与此类似的标头:

    Link: "<https://{shop}.myshopify.com/admin/api/2019-07/products.json?page_info=vwxyzab&limit=6>; 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();
          }
        })
      })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多