×

京东开放平台商品主图视频接口实战:高清地址解析 + 防盗链适配 + 合规获取(附 Python 代码)

Ace Ace 发表于2026-05-23 15:32:56 浏览13 评论0

抢沙发发表评论

前言

在电商素材同步、商品多媒体展示、选品系统搭建、竞品素材分析场景中,京东商品主图视频是核心多媒体数据。网上多数教程依赖网页爬虫、抓包逆向获取视频地址,极易触发平台风控封禁 IP,且视频防盗链地址频繁失效;通用接口教程缺少京东 SHA256 签名规范、视频格式校验、防盗链参数兼容、空视频兜底处理,无法用于企业级生产环境。

本文基于京东开放平台联盟官方接口,实现标准 SHA256 签名、高清视频地址提取、视频时长 / 封面解析、异常场景兜底、防风控调度的完整方案,全程无爬虫、无逆向,合规可落地,内容原创差异化,完全适配 CSDN 平台审核规范。

一、差异化核心亮点

  1. 京东专属 SHA256 签名:严格遵循京东签名规则,解决网上误用 MD5 导致鉴权失败问题

  2. 防盗链地址适配:解析真实可播放视频源,兼容京东防盗链 Referer 校验规则

  3. 多媒体字段结构化:一次性获取视频 URL、时长、封面图、格式,无需二次请求

  4. 空视频智能兜底:针对无视频商品做空值判断,避免程序崩溃

  5. 防风控限流设计:内置毫秒时间戳校验、请求休眠间隔,适配平台调用频率

二、接口基础规范

  • 接口名称:jd.union.open.goods.media.query(京东联盟商品多媒体信息查询)

  • 请求方式:POST

  • 签名方式:SHA256(京东官方标准)

  • 必传参数:appKey、appSecret、goodsId、13 位毫秒级 timestamp

  • 权限要求:京东开放平台应用 + 联盟基础权限

  • 频率限制:QPS≤5,连续调用间隔≥0.8 秒

点击获取key和secret

三、完整 Python 生产级代码

python

运行

import requests
import time
import hashlib
import json

class JDGoodsVideoAPI:
    """京东商品视频接口 生产级封装"""
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://api.jd.com/routerjson"
        self.timeout = 12

    def make_sha256_sign(self, params):
        """京东标准SHA256签名,严格按ASCII排序"""
        sorted_items = sorted(params.items())
        sign_str = self.app_secret + "".join(f"{k}{v}" for k, v in sorted_items) + self.app_secret
        return hashlib.sha256(sign_str.encode("utf-8")).hexdigest().upper()

    def get_goods_video(self, goods_id):
        """获取京东商品高清视频+封面+时长"""
        timestamp = str(int(time.time() * 1000))
        param_json = {"goodsId": str(goods_id)}

        params = {
            "app_key": self.app_key,
            "timestamp": timestamp,
            "v": "1.0",
            "method": "jd.union.open.goods.media.query",
            "param_json": json.dumps(param_json),
            "format": "json"
        }
        params["sign"] = self.make_sha256_sign(params)

        try:
            resp = requests.post(self.api_url, data=params, timeout=self.timeout)
            res = resp.json()
            if res.get("error_response"):
                return {"code":-1,"msg":res["error_response"].get("zh_desc","接口调用异常")}

            data = res.get("jd_union_open_goods_media_query_response",{}).get("result",{})
            video_info = data.get("videoInfo", {})
            if not video_info:
                return {"code":200,"msg":"该商品无视频","video":None}

            return {
                "code":200,"msg":"获取成功",
                "goods_id":goods_id,
                "video_url":video_info.get("videoUrl"),
                "cover_url":video_info.get("coverUrl"),
                "duration":video_info.get("duration"),
                "format":"MP4"
            }
        except Exception as e:
            return {"code":500,"msg":f"请求异常:{str(e)}"}

if __name__ == "__main__":
    api = JDGoodsVideoAPI("your_app_key","your_app_secret")
    res = api.get_goods_video("100012345678")
    print(json.dumps(res,ensure_ascii=False,indent=2))


四、核心避坑要点


  1. 时间戳必须使用13 位毫秒级,10 位秒级时间戳直接鉴权失败

  2. 视频地址自带防盗链,前端播放需携带京东域名 Referer 请求头

  3. 部分自营商品无主图视频,需做空值判断,避免解析报错

  4. SHA256 签名参数必须严格 ASCII 排序,顺序错误会导致签名失效

  5. 高频调用易触发限流,单次请求间隔需控制在 0.8 秒以上

群贤毕至

访客