京东商品销量数据如何获取?API接口调用操作详解
获取京东商品销量数据可通过京东开放平台API接口实现,以下是详细的接口调用操作指南:
一、准备工作
- 注册开发者账号
- 访问京东开放平台,完成企业实名认证(个人开发者需联系京东升级为企业资质)。
- 认证通过后,在「控制台」创建应用,选择「自研应用」类型,填写应用名称、描述等信息,提交审核。
- 获取API密钥
- 应用审核通过后,在「应用管理」页面获取
App Key
和App Secret
,用于后续接口调用签名。
- 应用审核通过后,在「应用管理」页面获取
- 申请接口权限
- 在「服务管理」中搜索并申请以下接口权限:
- 商品详情查询:
jingdong.item.get
- 商品销量查询:
jingdong.ware.sales.get
(部分接口可能需单独申请)
- 商品详情查询:
- 在「服务管理」中搜索并申请以下接口权限:
二、接口调用流程
1. 生成请求签名
京东API要求所有请求需携带签名(sign
),确保请求合法性。签名生成步骤如下:
python
import hmac |
import hashlib |
import base64 |
import urllib.parse |
from datetime import datetime |
def generate_sign(params, app_secret): |
# 参数按字典序排序 |
sorted_params = sorted(params.items(), key=lambda x: x[0]) |
# 拼接键值对(格式:key1value1key2value2) |
query_str = '&'.join([f"{k}{v}" for k, v in sorted_params]) |
# 使用HMAC-SHA256生成签名 |
signature = hmac.new( |
app_secret.encode('utf-8'), |
query_str.encode('utf-8'), |
hashlib.sha256 |
).digest() |
# Base64编码并URL转义 |
return urllib.parse.quote(base64.b64encode(signature).decode('utf-8')) |
# 示例参数 |
params = { |
"method": "jingdong.ware.sales.get", |
"app_key": "YOUR_APP_KEY", |
"ware_id": "123456789", # 商品ID |
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), |
"v": "1.0", |
"format": "json" |
} |
params["sign"] = generate_sign(params, "YOUR_APP_SECRET") |
2. 发送HTTP请求
使用requests
库发送GET请求(部分接口可能支持POST):
python
import requests |
url = "https://api.jd.com/routerjson" |
response = requests.get(url, params=params) |
data = response.json() |
if data.get("jingdong_ware_sales_get_response"): |
sales_data = data["jingdong_ware_sales_get_response"]["ware_sales"]["sales"] |
print(f"商品销量: {sales_data}") |
else: |
print(f"请求失败: {data.get('error_response', {}).get('msg', '未知错误')}") |
3. 关键参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
method | String | 是 | 接口方法名,如jingdong.ware.sales.get |
app_key | String | 是 | 开发者应用Key |
ware_id | String | 是 | 商品ID(可通过商品搜索接口获取) |
timestamp | String | 是 | 请求时间(格式:YYYY-MM-DD HH:MM:SS ) |
sign | String | 是 | 生成的签名 |
v | String | 否 | API版本(默认1.0 ) |
format | String | 否 | 返回格式(json 或xml ) |
三、数据解析与处理
- 响应示例
成功响应JSON结构如下:
json
{ |
"jingdong_ware_sales_get_response": { |
"ware_sales": { |
"sales": 12500, // 商品总销量 |
"day_sales": [ // 每日销量(需接口支持) |
{"date": "2025-08-01", "sales": 200}, |
{"date": "2025-08-02", "sales": 150} |
] |
}, |
"code": "0" // 0表示成功 |
} |
} |
- 错误处理
- 签名错误:检查
App Secret
是否正确,参数排序是否严格按字典序。 - 权限不足:确认已申请对应接口权限。
- 频率限制:京东API默认单应用QPS(每秒查询数)为10,超限需联系京东调整。
- 签名错误:检查
四、高级功能扩展
-
批量查询销量
通过循环调用接口,传入不同ware_id
实现批量查询(需控制请求频率)。 -
结合商品详情接口
调用jingdong.item.get
获取商品标题、价格等信息,与销量数据关联分析:
python
def get_item_detail(ware_id): |
params = { |
"method": "jingdong.item.get", |
"app_key": "YOUR_APP_KEY", |
"item_id": ware_id, |
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), |
"v": "1.0" |
} |
params["sign"] = generate_sign(params, "YOUR_APP_SECRET") |
response = requests.get("https://api.jd.com/routerjson", params=params) |
return response.json() |
- 数据存储与可视化
将销量数据存入数据库(如MySQL),使用PyEcharts
生成趋势图:
python
from pyecharts.charts import Line |
from pyecharts import options as opts |
dates = ["2025-08-01", "2025-08-02"] |
sales = [200, 150] |
line = ( |
Line() |
.add_xaxis(dates) |
.add_yaxis("销量", sales) |
.set_global_opts(title_opts=opts.TitleOpts(title="商品销量趋势")) |
) |
line.render("sales_trend.html") |
五、注意事项
- 合规性
- 严格遵守京东《开放平台服务协议》,禁止爬取非授权数据。
- 销量数据仅限内部分析使用,不得公开传播或用于竞品攻击。
- 接口稳定性
- 京东可能调整接口字段或下线旧版本,建议定期检查API文档更新日志。
- 替代方案
- 若API调用受限,可通过京东商家后台「数据罗盘」或第三方工具(如「京东商智」)导出销量数据。