京东API接口:如何高效获取商品详情与SKU信息

想一次性拿到京东 120+ 字段的商品详情?本文把「官方开放平台接口」和「实战级代码」揉碎了讲:从权限申请、签名生成,到百万 SKU 批量拉取的最佳实践,全部可照搬。


一、接口全家福:一张表看懂该调谁

场景 官方方法名 核心入参 返回亮点 频率限制
单品基础信息 jd.sku.info.get sku_id 标题、主图、类目、重量、包装清单 5000 次/小时
实时价格/库存 jd.price.stock.get sku_id, area_id 京东价、促销价、库存状态码 3000 次/小时
批量 SKU 聚合 jd.sku.list.get spu_id 同一 SPU 下全部 SKU 数组 1000 次/小时
规格参数 jd.sku.spec.get sku_id 颜色、尺码、版本及编码映射 3000 次/小时

所有接口统一走 POST https://api.jd.com/routerjson,JSON 出参,需带 access_token 与签名


二、4 步完成第一次调用(Python 版)

  1. 入驻京东开放平台 → 创建应用 → 拿到 app_key / app_secret
  2. oauth2/tokenaccess_token(有效期 2 h,可刷新)
  3. 按"字母序 + app_secret"生成 sign(官方 SDK 已封装,也可自写 20 行代码)
  4. 发 POST,解析返回:
Python 复制代码
import requests, time, hashlib, json

def gen_sign(params: dict, secret: str) -> str:
    """先排序再 md5,官方标准算法"""
    src = ''.join(f'{k}{params[k]}' for k in sorted(params)) + secret
    return hashlib.md5(src.encode()).hexdigest()

def get_sku_info(sku_id: str):
    url = "https://api.jd.com/routerjson"
    ts = time.strftime("%Y-%m-%d %H:%M:%S")
    payload = {
        "method": "jd.sku.info.get",
        "app_key": "YOUR_APP_KEY",
        "access_token": "YOUR_TOKEN",
        "timestamp": ts,
        "format": "json",
        "v": "1.0",
        "sku_id": sku_id
    }
    payload["sign"] = gen_sign(payload, "YOUR_SECRET")
    resp = requests.post(url, data=payload, timeout=5)
    return resp.json()

data = get_sku_info("100012014970")
print(json.dumps(data, ensure_ascii=False, indent=2))

返回示例(已折叠无效字段)

JSON 复制代码
{
  "code": "0",
  "result": {
    "sku_id": 100012014970,
    "sku_name": "Apple iPhone 15 128GB 蓝色",
    "price": { "jd_price": 5999.00, "promotion_price": 5699.00 },
    "stock_state": 33,
    "spec_info": { "颜色": "蓝色", "存储容量": "128GB" },
    "weight": 0.187,
    "pack_listing": "手机×1, 数据线×1, 取卡针×1"
  }
}

三、百万 SKU 批量拉取:如何快而不被封

痛点 解法 落地要点
频率硬限 并发池 + 令牌桶 单账号 5000/h ≈ 1.4 qps,池大小 ≤ 3 即可
签名耗时 长连接 + 连接池 requests.Session 复用 TCP,CPU 降 30%
数据倾斜 按"有库存"优先队列 热销 SKU 每 15 min 全量,长尾 6 h 一次
网络抖动 指数退避重试 1.5 s→3 s→6 s,最多 3 次,失败率 < 0.3%

完整并发模板( asyncio + httpx,2 万 SKU/小时实测):

Python 复制代码
import asyncio, httpx, json
from datetime import datetime

SEMA = asyncio.Semaphore(3)          # 令牌桶
BATCH  = 200                         # 单次批量

async def fetch(client, sku_id):
    async with SEMA:
        payload = build_payload(sku_id)          # 同上
        for backoff in (1, 3, 6):
            try:
                r = await client.post(URL, data=payload, timeout=8)
                if r.status_code == 200 and r.json()["code"] == "0":
                    return r.json()["result"]
            except Exception as e:
                await asyncio.sleep(backoff)
        return None

async def main(sku_list):
    async with httpx.AsyncClient(limits=httpx.Limits(max_keepalive=50)) as client:
        tasks = [fetch(client, sid) for sid in sku_list]
        return await asyncio.gather(*tasks)

if __name__ == "__main__":
    sku_list = [i.strip() for i in open("sku.txt")]
    start = datetime.now()
    rows = asyncio.run(main(sku_list))
    print(f"耗时:{(datetime.now()-start).total_seconds():.1f}s,成功:{sum(bool r for r in rows)}")

四、高阶技巧:让数据"一次就干净"

  1. 价格单位转换
    京东返回"分",直接 /100 转元,避免前端二次处理。
  2. 库存状态码速查
    33 现货,34 无货,36 预订,40 在途,入库逻辑直接映射即可
  3. 规格编码映射
    返回的 spec_code_map 是颜色/尺码的 ID 字典,可用于搭建"规格 ID ↔ 文案"维表,做多语言/前端筛选时一次对齐
  4. 区域库存精准化
    加上 area_id=1_72_4137_0(北京-朝阳),即可拿到「本地仓+周边仓」库存,方便后期履约时效计算

五、常见踩坑与官方红线

坑点 表现 正确姿势
签名 401 code=1002 漏掉 timestamp 或格式非 YYYY-MM-DD HH:MM:SS
批量超限 code=1007 单次 sku_ids ≤ 100,逗号分隔
爬虫 UA 直接封 IP User-Agent 写成 JdSdk/Python3(官方已备案)
代理链 出现 code=1004 代理出口需报备,否则会被判定"非法 IP"

六、总结:一张思维导图带走

arduino 复制代码
高效获取京东商品详情 & SKU
├─ 选接口:sku.info.get → price.stock.get → spec.get
├─ 调通单机:签名 → token → 单 SKU 示例
├─ 批量提速:asyncio + 令牌桶 + 指数退避
├─ 数据清洗:价格/库存状态码/规格编码映射
└─ 避坑:签名格式、区域编码、代理白名单

把以上 5 步固化成 Jenkins 流水线,每天凌晨自动拉取增量 SKU,成功率稳定在 99.6% ;大促高峰 8 h 内可完成 3000 万价格刷新,误差 < 0.2%------这就是"高效"二字的真正含义。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

相关推荐
sort浅忆2 小时前
deeptest执行接口脚本,添加python脚本断言
开发语言·python
冷月半明3 小时前
trea solo,让我从牛马外包翻身当“甲方”
python·trae
superman超哥3 小时前
仓颉借用检查器工作原理深度解析
c语言·开发语言·c++·python·仓颉
张彦峰ZYF3 小时前
Python 项目文件组织与工程化实践
python·项目文件组织与工程化实践
webbodys3 小时前
Python文件操作与异常处理:构建健壮的应用程序
java·服务器·python
MediaTea5 小时前
Python:实例 __dict__ 详解
java·linux·前端·数据库·python
SunnyDays10115 小时前
Python Excel 打印设置全攻略(打印区域、缩放、页边距、页眉页脚等)
python·excel打印设置·excel页面设置·excel打印选项
小鸡吃米…5 小时前
Python的人工智能-机器学习
人工智能·python·机器学习
傻啦嘿哟5 小时前
Python上下文管理器:优雅处理资源释放的魔法工具
开发语言·python