×

义乌购商品 ID 查询详情接口实战:批发类商品多规格数据归一化方案

Ace Ace 发表于2026-10-09 17:40:01 浏览12 评论0

抢沙发发表评论

前言

义乌购作为小商品 B2B 批发平台,商品详情存在多 SKU 区间价、起批量、档口信息等特有字段,和零售电商结构差异很大。常规接口调用 Demo 大多只做简单请求打印,忽略批发业务核心的数据规整。本文从业务落地角度,封装根据商品 ID 拉取详情的调用类,重点解决多规格价格扁平化、空字段兼容、请求异常重试,适配进销存、比价系统的数据同步场景。

前置准备

开发环境:Python3.8+,依赖 requests 库。调用前需要平台接口访问凭证,接口请求需要携带 token 做身份校验,接口入参核心为商品唯一 ID。批发商品存在阶梯价格、最小起订量,返回 JSON 结构嵌套层级深,直接解析容易出现键不存在导致程序崩溃。

点击获取key和secret

完整代码示例

python

import requests
import time

class YiwugoDetailApi:
    def __init__(self, token: str):
        self.token = token
        self.base_url = "https://api.yiwugo.com/goods/detail"
        self.session = requests.Session()
        self.session.headers.update({
            "User-Agent": "Mozilla/5.0",
            "Authorization": f"Bearer {self.token}"
        })

    def get_detail_by_id(self, goods_id: str, retry=2):
        """根据商品ID获取详情,自动重试,清洗批发规格数据"""
        params = {"goodsId": goods_id}
        for _ in range(retry):
            try:
                resp = self.session.get(self.base_url, params=params, timeout=10)
                resp.raise_for_status()
                res_data = resp.json()
                if res_data.get("code") != 200:
                    return {"status": False, "msg": res_data.get("msg"), "data": None}
                raw = res_data["data"]
                # 批发数据扁平化处理
                result = {
                    "goods_id": raw.get("goodsId"),
                    "title": raw.get("title"),
                    "shop_name": raw.get("shopName"),
                    "min_order": raw.get("minOrderNum"), #最小起订
                    "price_list": []
                }
                sku_list = raw.get("skuList", [])
                for sku in sku_list:
                    result["price_list"].append({
                        "spec_name": sku.get("specName"),
                        "price": sku.get("price"),
                        "stock": sku.get("stockNum")
                    })
                return {"status": True, "msg": "success", "data": result}
            except Exception as e:
                time.sleep(1)
        return {"status": False, "msg": "请求超时/接口异常", "data": None}

if __name__ == "__main__":
    api = YiwugoDetailApi(token="你的访问凭证")
    ret = api.get_detail_by_id(goods_id="YI20250612001")
    print(ret)

代码核心解析

封装类采用 Session 复用连接,减少 TCP 握手开销。核心逻辑不是单纯打印原始返回值,而是对 B2B 批发字段做扁平化处理,提取标题、店铺、起订量、SKU 规格库存价格。增加重试机制,应对平台接口瞬时限流。很多小商品 SKU 数量多、部分规格库存为 0,代码自动兼容空数组,避免 KeyError 中断任务。

踩坑总结


  1. 阶梯批发价不是单一售价,必须遍历 skuList,业务入库不能只取第一条价格;

  2. 部分下架商品 ID 仍能请求,但 data 内字段为空,业务层需要增加在售状态判断;

  3. 接口有访问频率限制,批量轮询时必须增加延时,短时间高频请求会触发 token 拦截;

  4. 档口地址、发货时效字段存在部分商品缺失,解析时统一使用 get 方式获取。

群贤毕至

访客