京东开放平台提供了一系列商品 API 接口,可用于获取商品详情、搜索商品、查询分类等功能。以下是对京东商品 API 的深度解析和使用示例:
一、核心商品 API 接口
- 商品详情 API (jingdong.ware.get)
功能:获取单个商品的详细信息
权限:需申请
参数:
wareId:商品 ID(必选)
field:返回字段列表(如 title,price,imageInfo 等) - 商品搜索 API (jingdong.ware.search)
功能:根据关键词搜索商品
权限:需申请
参数:
keyword:搜索关键词(必选)
page:页码
pageSize:每页数量
sortType:排序方式(1 - 价格升序,2 - 价格降序等) - 商品分类 API (jingdong.category.read.find)
功能:获取商品分类信息
权限:需申请
参数:
parentId:父分类 ID(0 为根分类)
二、API 调用流程 - 认证与授权
AppKey & AppSecret:创建应用后获取
签名机制:使用 MD5 算法生成签名
OAuth2.0:部分接口需要用户授权 - 签名生成示例
python
运行
import hashlib
def generate_sign(params, app_secret):
"""生成API签名"""
# 1. 参数排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接字符串
sign_str = app_secret
for k, v in sorted_params:
sign_str += f"{k}{v}"
sign_str += app_secret
# 3. MD5加密
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
三、完整代码示例
以下是使用 Python 实现京东商品 API 调用的完整示例:
python
运行
import hashlib
import time
import requests
import json
class JDAPI:
def init(self, app_key, app_secret):
"""初始化京东API客户端"""
self.app_key = app_key
self.app_secret = app_secret
self.api_url = "https://api.jd.com/routerjson"
def generate_sign(self, params):
"""生成API签名"""
sorted_params = sorted(params.items(), key=lambda x: x[0])
sign_str = self.app_secret + ''.join([f"{k}{v}" for k, v in sorted_params]) + self.app_secret
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
def call(self, method, params=None):
"""通用API调用方法"""
if params is None:
params = {}
# 公共参数
common_params = {
"app_key": self.app_key,
"method": method,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
"format": "json",
"v": "2.0",
"sign_method": "md5"
}
# 合并参数
all_params = {**common_params, **params}
# 生成签名
all_params["sign"] = self.generate_sign(all_params)
# 发送请求
response = requests.post(self.api_url, data=all_params)
return response.json()
class JDItemAPI(JDAPI):
def get_item_detail(self, item_id, fields="wareId,title,price,imageInfo,brandInfo"):
"""获取商品详情"""
method = "jingdong.ware.get"
params = {
"wareId": item_id,
"field": fields
}
return self.call(method, params)
def search_items(self, keyword, page=1, page_size=20, sort_type=0):
"""搜索商品"""
method = "jingdong.ware.search"
params = {
"keyword": keyword,
"page": page,
"pageSize": page_size,
"sortType": sort_type, # 0-默认排序,1-价格升序,2-价格降序,3-销量降序
"fields": "wareId,title,price,saleInfo,imageInfo"
}
return self.call(method, params)
def get_categories(self, parent_id=0):
"""获取商品分类"""
method = "jingdong.category.read.find"
params = {
"parentId": parent_id
}
return self.call(method, params)
使用示例
if name == "main":
# 替换为你的AppKey和AppSecret
app_key = "你的AppKey"
app_secret = "你的AppSecret"
# 初始化API客户端
api = JDItemAPI(app_key, app_secret)
# 1. 获取单个商品详情
item_detail = api.get_item_detail(100060000001)
print(f"商品详情: {json.dumps(item_detail, ensure_ascii=False, indent=2)}")
# 2. 搜索商品
search_result = api.search_items("iPhone 15", page=1, page_size=10, sort_type=1)
print(f"搜索结果: {len(search_result.get('jingdong_ware_search_response', {}).get('wareInfoList', []))}个商品")
# 3. 获取商品分类
categories = api.get_categories(0)
print(f"一级分类: {len(categories.get('jingdong_category_read_find_response', {}).get('categoryInfoList', []))}个")
四、API 响应数据结构
- 商品详情响应示例
json
{
"jingdong_ware_get_response": {
"wareInfo": {
"wareId": 100060000001,
"title": "Apple iPhone 15 256GB 黑色 移动联通电信5G手机",
"price": {
},"salePrice": 7999.00, "marketPrice": 8999.00
"imageInfo": {
},"imageList": [ "https://img10.360buyimg.com/n1/s540x540_jfs/t1/200000/30/3000/100000/60000000E00000000/10000000000000000.jpg" ]
"brandInfo": {
},"brandId": 1000000000, "brandName": "Apple"
"categoryInfo": {
},"categoryId": 1000000000, "categoryName": "手机"
"shopInfo": {
}"shopId": 1000000000, "shopName": "Apple产品京东自营旗舰店", "shopType": 1 # 1-自营,2-第三方
}
}
} - 商品搜索响应示例
json
{
"jingdong_ware_search_response": {
"total": 1258,
"wareInfoList": [
{
},"wareId": 100060000001, "title": "Apple iPhone 15 256GB 黑色 移动联通电信5G手机", "price": 7999.00, "saleInfo": { "sales": 12345, "isJdSale": true, "isSelf": true }, "imageInfo": { "imageList": [ "https://img10.360buyimg.com/n1/s540x540_jfs/t1/200000/30/3000/100000/60000000E00000000/10000000000000000.jpg" ] }
{
}"wareId": 100060000002, "title": "Apple iPhone 15 Pro 256GB 暗紫色 移动联通电信5G手机", "price": 9999.00, "saleInfo": { "sales": 8765, "isJdSale": true, "isSelf": true }, "imageInfo": { "imageList": [ "https://img10.360buyimg.com/n1/s540x540_jfs/t1/200000/30/3000/100000/60000000E00000000/10000000000000000.jpg" ] }
]
}
}
五、关键参数与使用技巧 - 常用筛选参数
priceFrom/priceTo:价格区间
isSelf:是否自营商品
brandId:品牌 ID
categoryId:分类 ID - 分页处理
page:页码(默认 1)
pageSize:每页数量(最大 100)
total:总结果数(用于计算总页数) - 性能优化
批量请求:部分接口支持批量获取
缓存机制:对不经常变化的数据设置缓存
异步处理:使用 asyncio/aiohttp 实现并发请求
六、常见问题与解决方案 - 签名错误
原因:参数排序错误、时间戳偏差
解决方案:
确保参数按字典序排序
同步服务器时间(误差不超过 5 分钟) - 权限不足
原因:未申请或未通过接口权限审核
解决方案:
在开放平台申请相应权限
完善应用信息和使用场景说明 - 频率限制
默认配额:不同接口限制不同
解决方案:
控制请求频率
申请提升 API 调用配额
七、应用场景
电商选品工具:分析商品价格、销量和评价
价格监控系统:跟踪特定商品价格变化
比价应用:对比不同店铺商品价格
数据采集与分析:获取市场数据用于商业决策
通过京东商品 API,开发者可以构建功能丰富的电商应用和工具。在实际开发中,建议根据业务需求合理选择 API 接口,注意数据处理和性能优化,并遵守京东开放平台的使用规范。