淘宝商品详情接口:面向 ERP 入库的数据校验与容错实现

110
Category: 
开发交流

网上多数淘宝详情接口示例,只完成调用接口打印返回结果,很少考虑真实业务场景:大促接口抖动、部分规格字段缺失、图片数组空值、sku 列表顺序错乱等问题。直接把原始返回入库,会出现部分商品数据残缺、SKU 与价格不匹配的线上故障。本文侧重业务校验层,对淘宝开放平台 taobao.item.get 接口做二次封装,增加字段合法性校验、空值兜底、SKU 数据对齐逻辑,输出标准化结构体,适配商品同步、库存价格拉取的业务场景。
前置准备
登录淘宝开放平台创建应用,获取 appkey、appsecret,申请 taobao.item.get 接口权限。接口调用需要生成签名,入参需要传入商品 num_iid。调用存在流量配额,大促时段错误码高频,需要做好重试策略。
依赖:requests,pip install requests

图片.png
点击获取key和secret

`python
import requests
import time
import hashlib

class TaobaoDetailClient:
def init(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.gateway = "https://gw.api.taobao.com/router/rest"

def _make_sign(self, param_dict):
    sorted_items = sorted(param_dict.items())
    raw = self.app_secret + "".join([f"{k}{v}" for k, v in sorted_items]) + self.app_secret
    return hashlib.md5(raw.encode("utf-8")).hexdigest().upper()

def get_std_item_detail(self, num_iid):
    params = {
        "method": "taobao.item.get",
        "app_key": self.app_key,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "format": "json",
        "v": "2.0",
        "num_iid": num_iid,
        "fields": "num_iid,title,price,nick,num,sku,item_img,outer_id"
    }
    params["sign"] = self._make_sign(params)
    try:
        resp = requests.get(self.gateway, params=params, timeout=12)
        resp.raise_for_status()
        data = resp.json()
    except requests.exceptions.RequestException as e:
        return {"success": False, "error": f"网络异常:{str(e)}"}

    if "error_response" in data:
        return {"success": False, "error": data["error_response"].get("msg","接口返回错误")}
    item_raw = data.get("item_get_response",{}).get("item",{})

    # 业务层校验兜底
    sku_list = item_raw.get("skus",{}).get("sku",[]) if item_raw.get("skus") else []
    img_list = [x.get("url") for x in item_raw.get("item_imgs",{}).get("item_img",[]) if x.get("url")]

    res = {
        "success": True,
        "num_iid": item_raw.get("num_iid"),
        "title": item_raw.get("title",""),
        "shop_nick": item_raw.get("nick",""),
        "price": float(item_raw.get("price",0)),
        "stock_num": int(item_raw.get("num",0)),
        "main_images": img_list,
        "sku_data": [{"sku_id":s.get("sku_id"),"price":s.get("price"),"stock":s.get("quantity")} for s in sku_list],
        "outer_id": item_raw.get("outer_id","")
    }
    return res

if name == "main":
client = TaobaoDetailClient(app_key="your_key",app_secret="your_secret")
result = client.get_std_item_detail(num_iid=700000000000)
print(result)`
代码核心解析

  1. 签名内部封装:内部实现 MD5 签名逻辑,不用依赖第三方 SDK,方便项目迁移。
  2. 分层异常拦截:区分网络异常、平台返回业务错误,错误信息统一封装,上层业务直接读取 error 字段。
    3.SKU、图片做过滤清洗:过滤空图片地址,规整 SKU 列表,避免空数组直接入库造成字段异常。
  3. 输出轻量化:剔除大量无用业务扩展字段,只保留 ERP 同步必需字段,减少存储压力。
    对接踩坑要点
    1.fields 参数按需填写,不要一次性拉取全部字段,会增大接口响应耗时,还容易触发流量限制。
  4. 商品下架、删除时接口会返回业务错误码,业务代码需要做捕获,标记商品状态。
    3.SKU 数组有可能为空,无规格商品不能直接遍历 sku_data,要增加判空逻辑。
  5. 大促期间网关抖动,短时间连续报错不要高频重试,建议间隔 1‑3 秒。
Comments 0
/ 1000
0
0
Favorite