一、淘宝商品评论API接口概述
淘宝开放平台提供了taobao.item.reviews.get
接口,用于获取指定商品的评论数据。该接口支持分页查询、多条件筛选(如时间范围、评分等级)和自定义返回字段,适用于电商数据分析、竞品研究和用户行为洞察等场景。
核心功能:
- 分页获取评论:支持通过
page_no
和page_size
参数控制返回数据的分页。 - 多维度筛选:可按时间范围(
start_date
、end_date
)、评分等级(rate_type
)等条件过滤评论。 - 自定义字段:通过
fields
参数指定返回字段(如评论内容、用户昵称、评分等),减少数据冗余。
接口文档要点:
- 请求方式:HTTP POST
- 响应格式:JSON
- 关键参数:
item_id
:商品ID(必填)page_no
:页码(默认1)page_size
:每页条数(默认20,最大40)rate_type
:评论类型(good
好评、neutral
中评、bad
差评)fields
:返回字段列表(如content,created,score,user_nick
)
二、JSON格式数据参考
以下是接口返回的JSON数据示例及字段说明:
{ | |
"item_reviews_get_response": { | |
"total_results": 1234, // 评论总数 | |
"reviews": { | |
"review": [ | |
{ | |
"content": "商品质量很好,物流也很快!", // 评论内容 | |
"created": "2025-06-03 10:30:00", // 评论时间 | |
"score": 5, // 评分(1-5) | |
"user_nick": "用户123", // 用户昵称 | |
"pictures": [ // 评论图片(可选) | |
"http://example.com/image1.jpg", | |
"http://example.com/image2.jpg" | |
], | |
"reply": { // 商家回复(可选) | |
"content": "感谢您的支持!", | |
"reply_date": "2025-06-04 14:00:00" | |
} | |
}, | |
{ | |
"content": "包装一般,但商品本身不错。", | |
"created": "2025-06-02 16:45:00", | |
"score": 4, | |
"user_nick": "用户456" | |
} | |
] | |
} | |
}, | |
"request_id": "1234567890abcdef" // 请求ID(用于调试) | |
} |
关键字段说明:
total_results
:当前商品的总评论数,用于计算总页数。reviews.review
:评论列表,每条评论包含以下核心字段:content
:评论正文。created
:评论时间(格式:YYYY-MM-DD HH:MM:SS
)。score
:评分(1-5分)。user_nick
:用户昵称(部分敏感信息可能脱敏)。pictures
:评论中上传的图片URL列表(可选)。reply
:商家回复内容及时间(可选)。
request_id
:请求唯一标识,用于日志记录或问题排查。
三、Python调用示例
以下是使用requests
库调用API并解析JSON数据的示例代码:
import requests | |
import hashlib | |
import time | |
def generate_sign(params, app_secret): | |
"""生成淘宝API签名""" | |
sorted_params = sorted(params.items(), key=lambda x: x[0]) | |
sign_str = app_secret | |
for key, value in sorted_params: | |
if key != 'sign' and value: # 跳过sign字段和空值 | |
sign_str += f"{key}{value}" | |
sign_str += app_secret | |
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper() | |
def get_item_reviews(app_key, app_secret, item_id, page_no=1, page_size=20): | |
"""获取商品评论""" | |
url = "https://eco.taobao.com/router/rest" | |
timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) | |
# 公共参数 | |
public_params = { | |
"method": "taobao.item.reviews.get", | |
"app_key": app_key, | |
"timestamp": timestamp, | |
"format": "json", | |
"v": "2.0", | |
"sign_method": "md5" | |
} | |
# 业务参数 | |
biz_params = { | |
"item_id": item_id, | |
"page_no": page_no, | |
"page_size": page_size, | |
"fields": "content,created,score,user_nick,pictures,reply" # 自定义返回字段 | |
} | |
# 合并参数并生成签名 | |
all_params = {**public_params, **biz_params} | |
all_params["sign"] = generate_sign(all_params, app_secret) | |
# 发送请求 | |
response = requests.post(url, data=all_params) | |
result = response.json() | |
# 解析数据 | |
if "item_reviews_get_response" in result: | |
reviews = result["item_reviews_get_response"]["reviews"]["review"] | |
for review in reviews: | |
print(f"用户: {review['user_nick']}") | |
print(f"评分: {review['score']}") | |
print(f"时间: {review['created']}") | |
print(f"内容: {review['content']}") | |
if "pictures" in review and review["pictures"]: | |
print(f"图片: {', '.join(review['pictures'])}") | |
if "reply" in review: | |
print(f"回复: {review['reply']['content']} ({review['reply']['reply_date']})") | |
print("-" * 50) | |
else: | |
print("获取评论失败:", result.get("error_response", {}).get("msg", "未知错误")) | |
# 示例调用(需替换为真实的App Key和App Secret) | |
app_key = "your_app_key" | |
app_secret = "your_app_secret" | |
item_id = "123456789" # 替换为实际商品ID | |
get_item_reviews(app_key, app_secret, item_id) |