如何通过京东开放平台获取店铺所有商品列表

1 阅读5分钟

对于在京东平台运营店铺的商家或开发者来说,自动化管理和分析店铺商品数据是提升效率的关键。京东开放平台提供了丰富的API接口,其中就包含获取店铺商品列表的功能。本文将详细介绍如何调用此接口。

一、 准备工作

  1. 成为京东开放平台开发者: 访问京东开放平台官网,注册并创建开发者账号。
  2. 创建应用: 在开发者控制台创建一个应用,获取该应用的 App KeyApp Secret。这两个密钥是调用API的身份凭证。
  3. 店铺授权: 你的应用需要获得目标店铺的授权。店铺所有者登录京东商家后台,在开放平台授权管理中对你的应用进行授权。授权成功后,你将获得该店铺的 access_token(访问令牌),这是代表店铺身份进行API调用的关键凭证。

二、 接口信息

  • 接口名称: 商品查询接口 (根据具体API文档确认准确名称)
  • 接口地址: https://api.jd.com/routerjson (此为通用网关地址,具体方法名通过参数传递)
  • 请求方式: POST
  • 是否需要授权: 是 (access_token)

三、 请求参数

调用API时,需要在请求中包含一系列参数。以下列出关键参数:

  • 公共参数:

    • method: 具体API方法名称,例如 jingdong.product.search (需查阅最新文档确认)。
    • access_token: 店铺授权后获得的访问令牌。
    • app_key: 你的应用 App Key
    • timestamp: 请求发起的时间戳,格式为 yyyy-MM-dd HH:mm:ss
    • v: API版本号,例如 2.0
    • sign: 根据请求参数生成的签名,用于验证请求合法性(见下文签名生成)。
  • 业务参数:

    • page: 请求的页码(整数)。
    • page_size: 每页返回的商品数量(整数)。
    • (可选) sort: 商品排序方式。
    • (可选) fields: 指定需要返回的商品信息字段,例如 ware_id, title, price, stock 等。如果不指定,通常返回默认字段集。

签名生成 (sign)

签名是保证请求安全的重要环节。生成规则通常如下:

  1. 将所有请求参数(包括公共参数和业务参数,但不包括 sign 参数本身)放入一个集合。
  2. 按照参数名的字典序(字母顺序)对这个集合进行排序。
  3. 将排序后的参数名与参数值拼接成字符串:name1value1name2value2...
  4. 在拼接好的字符串末尾追加你的应用的 App Secret
  5. 对步骤4得到的完整字符串进行 MD5 加密(或京东指定的其他加密算法)。
  6. 将加密结果转换为大写,即得到 sign 的值。

四、 请求示例 (Python)

import requests
import time
import hashlib
import urllib.parse

# 替换为你的实际信息
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
page = 1
page_size = 10  # 每页10条

# 公共参数
params = {
    "method": "jingdong.product.search",  # 请替换为实际方法名
    "access_token": access_token,
    "app_key": app_key,
    "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
    "v": "2.0",  # 版本号
    "page": page,
    "page_size": page_size
}

# 生成签名 - 步骤1: 参数排序
sorted_params = sorted(params.items(), key=lambda x: x[0])

# 步骤2 & 3: 拼接键值对
sign_str = ""
for k, v in sorted_params:
    sign_str += k + v

# 步骤4: 追加App Secret
sign_str += app_secret

# 步骤5: MD5加密
sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()

# 步骤6: 转换为大写
sign = sign.upper()

# 将签名加入请求参数
params["sign"] = sign

# 发起POST请求
url = "https://api.jd.com/routerjson"
response = requests.post(url, data=params)

# 处理响应
if response.status_code == 200:
    data = response.json()
    # 检查京东返回的code
    if data.get("code") == "0":  # 通常0表示成功,具体看京东定义
        # 商品列表通常在 data["product_search_response"]["items"] 或类似路径下,需根据实际响应结构解析
        product_list = data["product_search_response"]["items"]
        for product in product_list:
            print(f"商品ID: {product['ware_id']}, 标题: {product['title']}, 价格: {product['price']}")
    else:
        print(f"接口调用失败! 错误码: {data.get('code')}, 错误信息: {data.get('msg')}")
else:
    print(f"HTTP请求失败! 状态码: {response.status_code}")

注意: 上述代码中的 product_search_responseitems 是示例结构,实际响应字段名称请务必查阅京东开放平台对应API的最新文档。

五、 响应处理

成功的响应通常包含一个 code 字段(值为 0 或类似成功标识)和包含商品数据的 data 对象。商品列表通常是一个数组(如 items),数组中的每个元素代表一个商品,包含你在 fields 参数中指定的信息(或默认字段)。

需要仔细解析返回的JSON结构,提取所需的商品信息(如商品ID ware_id、标题 title、价格 price、库存 stock 等)。

六、 注意事项

  1. 权限范围: 确保你的应用具有调用该商品查询接口的权限,且 access_token 有效。
  2. 频率限制: 京东API通常有调用频率限制(QPS),请遵守平台规定,避免频繁调用导致接口受限。
  3. 分页获取: 如果商品数量很多,需要循环调用接口(递增 page 参数)来获取所有商品。
  4. 参数校验: 注意参数值的合法性(如页码、页大小)。
  5. 错误处理: 务必处理可能出现的网络错误、API返回的错误码(如签名错误 1001、权限不足等)。
  6. 密钥安全: App Secret 是敏感信息,务必妥善保管,避免泄露。不要在客户端代码或公开场合暴露。
  7. 文档时效性: API接口和参数可能更新,请始终参考京东开放平台提供的最新官方文档

通过以上步骤,开发者即可实现通过京东开放平台API批量获取授权店铺的商品列表数据,为后续的商品管理、数据分析等场景提供数据支持。