某物平台商品详情接口调用实战:嵌套 SKU 数据扁平化处理方案 前言 某物平台潮流类商品数据结构和传统电商差异较大,详情接口返回多层嵌套的 SKU、尺码、鉴别、多图信息,直接使用原始 JSON 很难入库。本文核心思路不是简单请求接口,而是增加一层数据归一化处理器,把多层嵌套字段拉平,统一输出结构化字典,同时增加限流保护、指数退避重试,适配商品批量同步业务场景。所有代码仅用于开放接口技术学习,业务接入请遵守平台开放协议。 依赖准备 Python3.8+,依赖 requests 库,执行安装: bash 完整代码实现 代码逻辑解析 会话复用:使用 Session 保持连接,减少频繁建立 TCP 连接带来的性能损耗,适合批量循环拉取商品。 指数退避重试:网络超时、连接失败自动重试,等待时间随重试次数变长,防止短时间高频请求触发接口限流。 SKU 扁平化:某物商品 SKU 嵌套层级很深,单独提取尺码、售价、库存,转为一维数组,方便直接写入数据库。 业务状态校验:同时校验 HTTP 状态码和接口业务 code,区分网络错误、参数错误、商品下架三类异常。 线上踩坑总结 第一,图片地址带有时效 token,不能直接持久化外链,需要下载转存到自有图床,否则一段时间后图片失效。
pip install requests
import requests
import time
class WuDetailApi:
def __init__(self, api_key, timeout=8):
self.api_key = api_key
self.timeout = timeout
self.base_url = "https://api-demo.example.com/wu/item/detail"
self.session = requests.Session()
def get_detail(self, item_id: str, max_retry=3):
"""获取某物商品详情,内置重试与数据归一化"""
params = {
"api_key": self.api_key,
"item_id": item_id
}
for attempt in range(max_retry):
try:
resp = self.session.get(self.base_url, params=params, timeout=self.timeout)
resp.raise_for_status()
raw = resp.json()
if raw.get("code") != 200:
return {"success": False, "msg": raw.get("msg"), "data": None}
# 数据扁平化处理
raw_data = raw["data"]
sku_list = []
for sku in raw_data.get("sku_info", []):
sku_list.append({
"sku_id": sku.get("sku_id"),
"size": sku.get("size_name"),
"price": sku.get("sale_price"),
"stock": sku.get("stock_num")
})
res = {
"success": True,
"item_id": raw_data.get("item_id"),
"title": raw_data.get("title"),
"main_img": raw_data.get("main_image"),
"brand": raw_data.get("brand_name"),
"sku_list": sku_list,
"desc": raw_data.get("desc_info"),
"sale_status": raw_data.get("status")
})
return res
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
# 指数退避
time.sleep(2 ** attempt)
continue
return {"success": False, "msg": "请求重试耗尽,接口访问失败", "data": None}
if __name__ == "__main__":
client = WuDetailApi(api_key="替换为你的key")
result = client.get_detail(item_id="12345678")
print(result)
第二,商品状态区分:在售、售罄、下架、预售,在业务中要单独做状态过滤,下架商品的 SKU 库存字段经常返回空值,代码要做默认值兼容,避免键缺失导致程序崩溃。
第三,接口 QPS 限制,批量同步时单线程每秒请求不超过 2 次,大批量任务建议加分布式限流,429 限流响应需要单独捕获处理。
第四,字段会随平台版本迭代增减,程序读取字段必须使用.get()方式,不能直接索引取值,防止新增 / 下线字段直接抛出异常。