京东关键词接口调用全流程及返回参数详解
一、接口调用前准备
- 注册开发者账号
- 访问京东开放平台/万邦开放平台,完成企业/个人开发者注册及实名认证。
- 提交资质审核(企业需营业执照,个人需身份证)。
- 创建应用并获取密钥
- 登录后进入【控制台】→【应用管理】→【创建应用】。
- 填写应用名称、描述,选择权限如
jd.item_search
(商品搜索接口)。 - 审核通过后获取
AppKey
和AppSecret
,部分接口需额外申请access_token
(通过OAuth2.0授权)。
二、接口调用核心流程
1. 请求构造
参数名 | 必填 | 说明 |
---|---|---|
method | 是 | 接口方法名(如jd.item_search ) |
app_key | 是 | 应用唯一标识 |
timestamp | 是 | 时间戳(格式:YYYY-MM-DD HH:MM:SS ) |
sign_method | 是 | 签名算法(固定为md5 ) |
v | 是 | API版本号(固定为1.0 ) |
access_token | 是 | 通过OAuth2.0获取的访问令牌 |
keyword | 是 | 搜索关键词(如手机 ) |
pageIndex | 否 | 页码(默认1) |
pageSize | 否 | 每页数量(默认10,最大可能受限) |
sort | 否 | 排序字段(如price 、sales ) |
order | 否 | 排序顺序(asc /desc ) |
2. 签名生成逻辑(MD5)
python
import hashlib | |
def generate_sign(app_secret, params): | |
sorted_params = sorted(params.items()) | |
param_str = ''.join([f"{k}{v}" for k, v in sorted_params]) | |
param_str += app_secret # 末尾追加AppSecret | |
return hashlib.md5(param_str.encode()).hexdigest().upper() | |
# 示例参数 | |
params = { | |
'method': 'jd.item_search', | |
'app_key': 'your_app_key', | |
'timestamp': '2025-05-07 10:00:00', | |
'v': '1.0', | |
'sign_method': 'md5', | |
'access_token': 'your_access_token', | |
'keyword': '手机', | |
'pageIndex': 1, | |
'pageSize': 10 | |
} | |
sign = generate_sign('your_app_secret', params) | |
params['sign'] = sign |
3. 发送HTTP请求
python
import requests | |
url = "https://api.jd.com/routerjson" | |
response = requests.get(url, params=params) | |
if response.status_code == 200: | |
data = response.json() | |
if data.get('jd_union_open_goods_query_responce', {}).get('code') == '0': | |
items = data['jd_union_open_goods_query_responce']['queryResult']['goodsList'] | |
for item in items: | |
print(f"商品名称: {item['skuName']}") | |
print(f"价格: ¥{item['price']}") | |
print(f"店铺: {item['shopName']}") | |
else: | |
print(f"API错误: {data.get('msg')}") | |
else: | |
print(f"请求失败,状态码: {response.status_code}") |
三、返回参数详解
json
{ | |
"jd_union_open_goods_query_responce": { | |
"code": "0", | |
"queryResult": { | |
"totalCount": 100, | |
"goodsList": [ | |
{ | |
"skuId": "123456", | |
"skuName": "商品标题", | |
"price": "1999.00", | |
"imageUrl": "图片链接", | |
"shopName": "店铺名称", | |
"sales": 1000, | |
"commentCount": 500, | |
"goodCommentsShare": "98%", | |
"promotion": "满1000减100", | |
"brandName": "品牌名称", | |
"categoryName": "分类名称", | |
"spec": "颜色:红色,尺寸:16GB" | |
} | |
] | |
} | |
} | |
} |
参数名 | 说明 |
---|---|
code | 状态码(0 表示成功) |
totalCount | 符合条件的商品总数 |
goodsList | 商品列表数组 |
✔ skuId | 商品唯一标识符 |
✔ skuName | 商品标题 |
✔ price | 商品价格(可能含原价、现价、促销价) |
✔ imageUrl | 商品主图URL |
✔ shopName | 店铺名称 |
sales | 销售量 |
commentCount | 评价数量 |
goodCommentsShare | 好评率 |
promotion | 促销活动信息 |
brandName | 品牌名称 |
categoryName | 分类名称 |
spec | 规格参数(如颜色、尺寸) |
四、关键注意事项
-
频率限制
- 免费版API默认QPS限制为10次/秒,高频调用需申请京东开放平台。
-
错误处理
错误码 说明 解决方案 400 参数缺失或格式错误 检查 keyword
、sign
等参数401 签名验证失败 重新生成签名并校验时间戳 403 权限不足 确认App是否开通搜索权限 429 频率超限 增加重试间隔或申请提额 -
数据合规
- 禁止采集用户隐私数据(如联系方式)。
- 库存数据仅用于内部系统,不得对外公开。
五、进阶应用场景
-
批量数据采集
python
import concurrent.futures
def fetch_items(keyword, page):
params['keyword'] = keyword
params['pageIndex'] = page
# 调用上述请求逻辑
return items
keywords = ['手机', '笔记本']
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(executor.map(fetch_items, keywords, range(1, 4)))
-
价格监控预警
python
def check_price(item, threshold=5000):
if float(item['price']) > threshold:
send_alert(f"商品{item['skuName']}价格超限!当前价: {item['price']}")
-
数据持久化存储
python
import pandas as pd
df = pd.DataFrame([
{'skuId': item['skuId'], 'price': item['price'], 'sales': item['sales']}
for page in results for item in page
])
df.to_csv('jd_items.csv', index=False, encoding='utf-8-sig')
通过以上流程,您可高效集成京东商品搜索数据至ERP、比价系统或监控平台。实际开发中需持续关注京东开放平台API文档,确保接口兼容性。