前言
一、京东商品详情API接口概述
京东开放平台提供了多种API接口,允许开发者通过编程方式获取商品详情数据。以下是常见的接口类型及功能:
- 商品基础信息接口
- 接口名称:
jd.union.open.goods.query
- 功能:获取商品标题、价格、图片、库存等基础信息。
- 适用场景:商品列表展示、价格监控等。
- 接口名称:
- 商品详情接口
- 接口名称:
jd.union.open.goods.detail.query
- 功能:获取商品详细描述、规格参数、售后政策等丰富信息。
- 适用场景:商品详情页展示、数据分析等。
- 接口名称:
- 商品SKU接口
- 接口名称:
jd.union.open.goods.skus.query
- 功能:获取商品的所有SKU信息(颜色、尺寸等变体)。
- 适用场景:商品变体管理、库存监控等。
- 接口名称:
二、API接口调用流程
- 注册开发者账号
- 在京东开放平台注册账号并创建应用,获取
app_key
和app_secret
。
- 在京东开放平台注册账号并创建应用,获取
- 生成签名
- 京东API接口要求对请求参数进行签名验证,通常使用MD5或HMAC-SHA256算法。
- 签名步骤:
- 将所有参数按字典序排序。
- 将参数拼接成字符串,并与
app_secret
结合生成签名。
- 发送请求
- 使用
requests
库发送GET或POST请求,传递必要的参数(如method
、app_key
、timestamp
、sign
等)。
- 使用
- 解析响应
- 京东API接口返回的数据通常为JSON格式,包含商品详情信息及状态码。
三、JSON数据格式参考
以下是京东商品详情API接口返回的JSON数据示例及关键字段说明:
1. 商品基础信息响应示例
{ | |
"code": 200, | |
"message": "success", | |
"data": { | |
"goods_response": { | |
"sku_id": "100012345678", | |
"name": "华为Mate 50 Pro 5G手机", | |
"price": 5999.00, | |
"image_path": "https://img10.360buyimg.com/n1/s450x450_jfs/t1/123456/78/12345/123456/12345678/1234567890abcdef.jpg", | |
"stock_state": 1 | |
} | |
} | |
} |
2. 商品详细信息响应示例
{ | |
"code": 200, | |
"message": "success", | |
"data": { | |
"goods_detail_response": { | |
"sku_id": "100012345678", | |
"name": "华为Mate 50 Pro 5G手机", | |
"price": 5999.00, | |
"description": "<p>华为Mate 50 Pro 5G手机,采用6.74英寸OLED屏幕...</p>", | |
"after_service": "全国联保,享受三包服务", | |
"spec_info": { | |
"颜色": ["曜金黑", "冰霜银", "流光紫"], | |
"内存": ["8GB+128GB", "8GB+256GB", "12GB+512GB"] | |
}, | |
"images": [ | |
"https://img10.360buyimg.com/n1/s450x450_jfs/t1/123456/78/12345/123456/12345678/1234567890abcdef.jpg" | |
], | |
"evaluation": { | |
"total_reviews": 1000, | |
"positive_rate": "95%" | |
} | |
} | |
} | |
} |
3. 关键字段说明
- code:接口调用状态码(200表示成功)。
- message:接口调用结果信息。
- data:包含商品详情数据的对象。
- sku_id:商品唯一标识符。
- name:商品名称。
- price:商品当前价格。
- description:商品详细描述。
- after_service:售后服务信息。
- spec_info:商品规格参数。
- images:商品图片列表。
- evaluation:用户评价信息(评价总数、好评率等)。
四、Python代码示例
以下是使用Python调用京东商品详情API接口的示例代码:
import requests | |
import hashlib | |
import time | |
class JDAPI: | |
def __init__(self, app_key, app_secret): | |
self.app_key = app_key | |
self.app_secret = app_secret | |
self.base_url = "https://api.jd.com/routerjson" | |
def _generate_sign(self, params): | |
sorted_params = sorted(params.items(), key=lambda x: x[0]) | |
query_string = '&'.join([f"{k}={v}" for k, v in sorted_params]) + self.app_secret | |
return hashlib.md5(query_string.encode('utf-8')).hexdigest().upper() | |
def call_api(self, method, params): | |
common_params = { | |
'app_key': self.app_key, | |
'method': method, | |
'timestamp': str(int(time.time())), | |
'format': 'json', | |
'v': '2.0', | |
'sign_method': 'md5' | |
} | |
all_params = {**common_params, **params} | |
all_params['sign'] = self._generate_sign(all_params) | |
response = requests.get(self.base_url, params=all_params) | |
return response.json() | |
# 使用示例 | |
api = JDAPI('your_app_key', 'your_app_secret') | |
# 获取商品基础信息 | |
def get_goods_info(api, sku_id): | |
params = { | |
'sku_ids': sku_id, | |
'fields': 'sku_id,name,price,image_path,stock_state' | |
} | |
result = api.call_api('jd.union.open.goods.query', params) | |
return result | |
# 获取商品详细信息 | |
def get_goods_detail(api, sku_id): | |
params = { | |
'sku_id': sku_id, | |
'fields': 'sku_id,name,price,image_path,stock_state,description,after_service,spec_info' | |
} | |
result = api.call_api('jd.union.open.goods.detail.query', params) | |
return result | |
# 调用接口 | |
goods_info = get_goods_info(api, '100012345678') | |
goods_detail = get_goods_detail(api, '100012345678') | |
print("商品基础信息:", goods_info) | |
print("商品详细信息:", goods_detail) |