如何通过Python调用Shopify API获取250条以上商品数据
问题分析与修复
你的代码仅返回250条数据的核心问题有两个:
- return语句位置错误:
return resources写在了while循环内部,导致第一次循环结束后直接返回结果,根本没触发后续分页请求。 - 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
相关产品推荐
相关产品推荐

