You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python调用Shopify API获取250条以上商品数据

问题分析与修复

你的代码仅返回250条数据的核心问题有两个:

  1. return语句位置错误:return resources写在了while循环内部,导致第一次循环结束后直接返回结果,根本没触发后续分页请求。
  2. Link header解析逻辑有缺陷:原代码的字符串拆分方式不稳定,且未处理cursor为空的情况(比如商品总数不足250条时)。

修正后的代码

def get_all_resources(resource):
    page_info = None
    resources = []
    while True:
        # 构造请求参数,仅当page_info存在时传入
        params = {"limit": 250}
        if page_info:
            params["page_info"] = page_info
        
        # 获取当前页数据
        current_page = resource.find(**params)
        resources.extend(current_page)
        
        # 处理分页cursor
        link_header = shopify.ShopifyResource.connection.response.headers.get('Link')
        if not link_header:
            break  # 无Link header,说明没有下一页
        
        # 解析Link header,定位rel="next"的分页链接
        next_page_info = None
        for link_part in link_header.split(','):
            url_part, rel_part = link_part.split(';')
            if 'rel="next"' in rel_part:
                next_page_info = url_part.strip('<>').split('page_info=')[1]
                break
        
        if not next_page_info:
            break  # 找不到下一页标记,退出循环
        
        page_info = next_page_info
    
    return resources

products = get_all_resources(shopify.Product)

关键修复点说明

  • 调整return位置:将return resources移到while循环外部,确保所有分页数据收集完成后再返回结果。
  • 安全解析Link header:拆分Link header的各个条目,精准匹配rel="next"的链接,避免字符串拆分的不稳定问题。
  • 空值边界处理:增加link_header为空的判断,防止商品只有一页时出现索引错误。
  • 参数构造优化:初始page_info设为None,第一次请求不传入该参数,符合Shopify API的调用规范。

内容的提问来源于stack exchange,提问作者Egnar020103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:30:36