一、接口概述
京东的 item_get_app
接口用于获取商品的原始详情数据,包括商品的基础信息、价格信息、库存信息、规格参数、促销信息、服务信息以及多媒体信息等。
二、前期准备
(一)注册京东开放平台账号
访问京东开放平台官网,注册开发者账号并完成实名认证。
(二)创建应用并获取 API 权限
- 登录京东开放平台,进入 "我的应用" 页面。
- 点击 "创建应用",填写应用名称、描述等信息。
- 在应用的 "接口管理" 中,找到
item_get_app
接口,申请调用权限。 - 申请通过后,获取
App Key
和App Secret
,这是调用 API 的必要凭证。
三、接口调用实战
(一)核心参数与响应结构
请求参数
表格
复制
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
sku_id |
String | 是 | 商品 SKU ID,京东商品的唯一标识 |
access_token |
String | 是 | 访问令牌 |
platform |
String | 否 | 平台类型,如 "android"、"ios",默认 "android" |
fields |
String | 否 | 需要返回的字段,默认返回全部字段 |
area |
String | 否 | 地区编码,用于获取区域化价格和库存 |
响应核心字段
- 商品基础信息:SKU ID、商品名称、品牌信息、分类信息等。
- 价格信息:基准价、促销价、会员价、活动价、价格计算规则等。
- 库存信息:实时库存、区域库存、库存状态、限购信息等。
- 规格参数:SKU 规格、属性组合、规格图片等。
- 促销信息:活动列表、优惠券、满减规则、赠品信息等。
- 服务信息:售后政策、配送服务、安装服务等。
- 多媒体信息:图片、视频、3D 模型等资源链接。
(二)Python代码示例
以下是使用 Python 调用 item_get_app
接口的完整代码示例:
Python
import requests
import hashlib
import time
import logging
import json
class JDItemGetAppAPI:
def __init__(self, app_key, app_secret, base_url="https://api.jd.com"):
self.app_key = app_key
self.app_secret = app_secret
self.base_url = base_url
self.access_token = None
self.token_expires_at = 0
self.session = requests.Session()
def _get_access_token(self) -> str:
"""获取访问令牌"""
if self.access_token and self.token_expires_at > time.time() + 60:
return self.access_token
logging.info("获取新的access_token")
url = f"{self.base_url}/oauth2/token"
params = {
"grant_type": "client_credentials",
"appkey": self.app_key,
"appsecret": self.app_secret
}
try:
response = self.session.get(url, params=params, timeout=10)
response.raise_for_status()
result = response.json()
if "access_token" in result:
self.access_token = result["access_token"]
self.token_expires_at = time.time() + result.get("expires_in", 86400) # 默认为24小时
return self.access_token
else:
logging.error(f"获取access_token失败: {result.get('error_description', '未知错误')}")
return None
except requests.exceptions.RequestException as e:
logging.error(f"获取access_token请求异常: {str(e)}")
return None
def _generate_sign(self, params: dict) -> str:
"""生成签名"""
sorted_params = sorted(params.items(), key=lambda x: x[0])
sign_str = self.app_secret
for k, v in sorted_params:
if k != "sign":
sign_str += f"{k}{v}"
sign_str += self.app_secret
return hashlib.sha256(sign_str.encode()).hexdigest().upper()
def get_item_raw_data(self, sku_id: str, platform: str = "android", area: str = "1_72_2799_0", fields: str = None) -> dict:
"""获取商品原始详情数据"""
if not self._get_access_token():
return None
url = f"{self.base_url}/item/get_app"
params = {
"sku_id": sku_id,
"access_token": self.access_token,
"platform": platform,
"area": area,
"timestamp": int(time.time() * 1000) # 时间戳,毫秒级
}
if fields:
params["fields"] = fields
params["sign"] = self._generate_sign(params)
try:
response = self.session.get(url, params=params, timeout=20)
response.raise_for_status()
result = response.json()
if result.get("code") == 200:
return result.get("data", {})
else:
logging.error(f"获取商品数据失败: {result.get('message', '未知错误')} (错误码: {result.get('code')})")
return None
except requests.exceptions.RequestException as e:
logging.error(f"获取商品数据请求异常: {str(e)}")
return None
if __name__ == "__main__":
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
api = JDItemGetAppAPI(APP_KEY, APP_SECRET)
item_data = api.get_item_raw_data(
sku_id="123456789",
platform="android",
area="1_72_2799_0" # 北京地区编码
)
if item_data:
print(f"商品名称: {item_data.get('skuName')}")
print(f"京东价: {item_data.get('jdPrice', {}).get('p')}")
print(f"库存状态: {item_data.get('stock', {}).get('stockStateName')}")
else:
print("获取商品数据失败")
四、常见问题及解决方法
(一)签名错误
问题 :签名错误,通常是 sign
参数不正确。
解决方法:
- 检查
app_secret
是否正确。 - 确保参数排序正确,按照字母顺序排列。
- 确保签名算法正确,使用 SHA256 算法。
(二)权限不足
问题 :权限不足,通常是 code
返回 403
。
解决方法:
- 检查是否已申请
item_get_app
接口的调用权限。 - 确保应用的权限未被限制。
(三)参数错误
问题 :请求参数错误,通常是 code
返回 400
。
解决方法:
- 检查请求参数是否符合 API 的要求。
- 确保所有必填参数都已正确传递。
五、总结
通过本文的介绍,你应该已经掌握了如何使用 Python 代码调用京东的 item_get_app
接口,获取商品的原始详情数据。在实际开发中,注意错误处理和日志记录,可以提高开发效率和代码的稳定性。如果遇到问题,可以参考京东开放平台的官方文档或在开发者社区寻求帮助。
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。