Python 调用 Rakuten 商品详情 API:请求构造与 JSON 响应处理完整案例
·
Python调用Rakuten商品详情API完整案例
一、核心准备步骤
-
获取API凭证注册账号并创建应用,获取
Client ID(应用标识)和Client Secret(密钥)。需在"API目录"中申请Rakuten Ichiba API权限。 -
安装依赖库
推荐使用官方Python SDKrakuten-ws(支持商品搜索、订单管理等),或直接使用requests库:
pip install requests rakuten-ws
二、请求构造与响应处理示例
方案1:使用requests库直接调用(推荐)
import requests
def get_product_details():
# 1. 构造请求参数
base_url = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706"
params = {
"applicationId": "YOUR_CLIENT_ID", # 替换为实际Client ID
"keyword": "ワイヤレスイヤホン", # 日语关键词需URL编码
"hits": 10, # 返回10条结果
"format": "json"
}
# 2. 发送GET请求
response = requests.get(base_url, params=params)
# 3. 处理响应
if response.status_code == 200:
result = response.json()
items = result.get("Items", [])
# 提取商品详情
for item in items:
item_info = item.get("Item", {})
print(f"商品名称: {item_info.get('itemName')}")
print(f"价格: {item_info.get('itemPrice')}日元")
print(f"店铺: {item_info.get('shopName')}\n")
else:
print(f"调用失败,状态码: {response.status_code}, 错误信息: {response.text}")
# 执行调用
get_product_details()
方案2:使用rakuten-ws库(更简洁)
from rakuten_ws import IchibaItem
def get_product_details_sdk():
# 初始化客户端
ichiba = IchibaItem(application_id="YOUR_CLIENT_ID")
# 构造请求
response = ichiba.search(
keyword="ワイヤレスイヤホン",
hits=10,
sort="+itemPrice" # 按价格升序排序
)
# 处理响应
if response.status_code == 200:
items = response.json().get("Items", [])
for item in items:
item_info = item.get("Item", {})
print(f"商品ID: {item_info.get('itemCode')}")
print(f"名称: {item_info.get('itemName')}")
print(f"价格: {item_info.get('itemPrice')}日元\n")
else:
print(f"错误: {response.text}")
# 执行调用
get_product_details_sdk()
三、关键参数说明
| 参数名 | 必选 | 说明 | 示例值 |
|---|---|---|---|
| applicationId | 是 | 开发者应用ID | "1234567890abcdef" |
| keyword | 是 | 搜索关键词(需URL编码) | "ワイヤレスイヤホン" |
| hits | 否 | 返回结果数量(1-100) | 10 |
| sort | 否 | 排序方式(+price升序) | "+itemPrice" |
四、错误处理与最佳实践
-
认证错误处理
- 401/403错误:检查Client ID是否正确,应用是否通过审核
- 400错误:检查必选参数是否遗漏,参数格式是否正确(如hits需为数字)
-
数据解析技巧
使用.get()方法避免KeyError,例如:item_price = item_info.get("itemPrice", "N/A") # 默认值N/A -
性能优化
- 使用分页参数
page和pageCount控制返回数据量 - 添加超时参数避免阻塞:
response = requests.get(url, timeout=5) # 5秒超时
- 使用分页参数
五、扩展功能示例
获取单个商品详情(需商品ID):
def get_single_product():
url = "https://app.rakuten.co.jp/services/api/IchibaItem/20170706"
params = {
"applicationId": "YOUR_CLIENT_ID",
"itemCode": "target_item_id" # 替换为实际商品ID
}
response = requests.get(url, params=params)
# 后续处理逻辑同上...
使用OAuth认证(适用于需要用户授权的API):
from requests_oauthlib import OAuth2Session
client = OAuth2Session(client_id="YOUR_CLIENT_ID")
authorization_url = client.authorization_url("https://api.rakuten.net/oauth2/authorize")
# 引导用户访问authorization_url完成授权
token = client.fetch_token("https://api.rakuten.net/oauth2/token", ...)
六、注意事项
- 日语关键词需进行URL编码(如"ワイヤレスイヤホン" → "%E3%83%8F%E3%82%A4%E3%83%A4%E3%83%AB%E3%82%B9%E3%82%A4%E3%83%A4%E3%83%9B%E3%83%B3")
- 响应数据中的价格单位为日元,需注意汇率转换
- 部分API有调用频率限制(如100次/分钟),需合理设计请求间隔
通过以上方案,可实现从请求构造到响应处理的全流程自动化。实际开发中建议结合具体业务需求,添加日志记录、异常重试、数据缓存等增强功能。
更多推荐

所有评论(0)