对于在京东平台运营店铺的商家或开发者来说,自动化管理和分析店铺商品数据是提升效率的关键。京东开放平台提供了丰富的API接口,其中就包含获取店铺商品列表的功能。本文将详细介绍如何调用此接口。
一、 准备工作
- 成为京东开放平台开发者: 访问京东开放平台官网,注册并创建开发者账号。
- 创建应用: 在开发者控制台创建一个应用,获取该应用的
App Key和App Secret。这两个密钥是调用API的身份凭证。 - 店铺授权: 你的应用需要获得目标店铺的授权。店铺所有者登录京东商家后台,在开放平台授权管理中对你的应用进行授权。授权成功后,你将获得该店铺的
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)
签名是保证请求安全的重要环节。生成规则通常如下:
- 将所有请求参数(包括公共参数和业务参数,但不包括
sign参数本身)放入一个集合。 - 按照参数名的字典序(字母顺序)对这个集合进行排序。
- 将排序后的参数名与参数值拼接成字符串:
name1value1name2value2...。 - 在拼接好的字符串末尾,追加你的应用的
App Secret。 - 对步骤4得到的完整字符串进行 MD5 加密(或京东指定的其他加密算法)。
- 将加密结果转换为大写,即得到
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_response 和 items 是示例结构,实际响应字段名称请务必查阅京东开放平台对应API的最新文档。
五、 响应处理
成功的响应通常包含一个 code 字段(值为 0 或类似成功标识)和包含商品数据的 data 对象。商品列表通常是一个数组(如 items),数组中的每个元素代表一个商品,包含你在 fields 参数中指定的信息(或默认字段)。
需要仔细解析返回的JSON结构,提取所需的商品信息(如商品ID ware_id、标题 title、价格 price、库存 stock 等)。
六、 注意事项
- 权限范围: 确保你的应用具有调用该商品查询接口的权限,且
access_token有效。 - 频率限制: 京东API通常有调用频率限制(QPS),请遵守平台规定,避免频繁调用导致接口受限。
- 分页获取: 如果商品数量很多,需要循环调用接口(递增
page参数)来获取所有商品。 - 参数校验: 注意参数值的合法性(如页码、页大小)。
- 错误处理: 务必处理可能出现的网络错误、API返回的错误码(如签名错误
1001、权限不足等)。 - 密钥安全:
App Secret是敏感信息,务必妥善保管,避免泄露。不要在客户端代码或公开场合暴露。 - 文档时效性: API接口和参数可能更新,请始终参考京东开放平台提供的最新官方文档。
通过以上步骤,开发者即可实现通过京东开放平台API批量获取授权店铺的商品列表数据,为后续的商品管理、数据分析等场景提供数据支持。