获取京东商品销量数据可通过京东开放平台API接口实现,以下是详细的接口调用操作指南:
一、准备工作
-
注册开发者账号
- 访问京东开放平台,完成企业实名认证(个人开发者需联系京东升级为企业资质)。
- 认证通过后,在「控制台」创建应用,选择「自研应用」类型,填写应用名称、描述等信息,提交审核。
-
获取API密钥
- 应用审核通过后,在「应用管理」页面获取
App Key
和App Secret
,用于后续接口调用签名。
- 应用审核通过后,在「应用管理」页面获取
-
申请接口权限
-
在「服务管理」中搜索并申请以下接口权限:
- 商品详情查询 :
jingdong.item.get
- 商品销量查询 :
jingdong.ware.sales.get
(部分接口可能需单独申请)
- 商品详情查询 :
-
二、接口调用流程
1. 生成请求签名
京东API要求所有请求需携带签名(sign
),确保请求合法性。签名生成步骤如下:
python
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):
kotlin
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
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
获取商品标题、价格等信息,与销量数据关联分析:
csharp
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
生成趋势图:
less
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调用受限,可通过京东商家后台「数据罗盘」或第三方工具(如「京东商智」)导出销量数据。