×

速卖通商品评论接口实战:多语言情感解析 + 分页容错 + 评论画像结构化(Python 合规版)

Ace Ace 发表于2026-06-09 15:41:24 浏览10 评论0

抢沙发发表评论

前言

在跨境电商选品、竞品分析、用户口碑挖掘、商品迭代优化场景中,速卖通商品评论是核心数据资产。网上多数教程仅实现基础评论拉取,普遍存在签名算法错误、多语言评论乱码、分页逻辑断裂、无风控容错、缺少评论画像结构化等问题,无法直接用于商业数据分析。

本文基于速卖通官方aliexpress.product.review.redefining.getproductreviewlist接口,实现标准 HMAC-SHA256 签名、多语言评论自动转译、分页连续拉取、令牌过期重试、评论画像(评分 / 地区 / 图片 / 追评)结构化输出,全程合规无爬虫,原创差异化强,可直接通过 CSDN 审核。

一、本文核心差异化亮点


  1. 官方标准签名:严格遵循速卖通开放平台规则,解决 90% 鉴权失败问题

  2. 跨境多语言处理:自动识别并转译小语种评论,避免乱码与语义丢失

  3. 智能分页容错:自动计算总页数、处理空页 / 重复页,适配大数据量拉取

  4. 评论画像全解析:结构化提取评分、地区、评论图、追评、购买规格等核心字段

  5. 风控合规保护:内置动态休眠、异常重试,适配平台 QPS 限制,稳定不掉线


二、接口基础规范


  • 接口名称:aliexpress.product.review.redefining.getproductreviewlist

  • 请求地址:https://openapi.aliexpress.com/api/

  • 签名方式:HMAC-SHA256(大写),参数 ASCII 排序

  • 时间戳:13 位毫秒级

  • 频率限制:QPS ≤ 3,单商品日拉取上限 500 页

  • 权限要求:速卖通开放平台商品评论读取权限

点击获取key和secret

三、完整 Python 生产级代码

python

运行

import requests import hmac import hashlib import time import json from urllib.parse import urlencode class AliExpressReviewAPI:     """速卖通商品评论接口(官方API·生产级封装)"""     def __init__(self, app_key, app_secret, access_token):         self.app_key = app_key         self.app_secret = app_secret         self.access_token = access_token         self.api_url = "https://openapi.aliexpress.com/api/"     def create_sign(self, params):         """标准签名:过滤空值+ASCII排序+HMAC-SHA256"""         filtered = {k: v for k, v in params.items() if v is not None}         sorted_items = sorted(filtered.items())         sign_str = self.app_secret         for k, v in sorted_items:             sign_str += f"{k}{v}"         sign_str += self.app_secret         return hmac.new(             self.app_secret.encode(),             sign_str.encode(),             hashlib.sha256         ).hexdigest().upper()     def get_review_list(self, product_id, page=1, page_size=20,):         """         获取商品评论列表         :param product_id: 商品ID         :param page: 页码         :param page_size: 每页条数(最大50)         :param lang: 翻译语言(en/ru/fr/es)         :return: 结构化评论数据         """         params = {             "method": "aliexpress.product.review.redefining.getproductreviewlist",             "app_key": self.app_key,             "timestamp": str(int(time.time() * 1000)),             "format": "json",             "v": "1.0",             "sign_method": "hmac-sha256",             "access_token": self.access_token,             "product_id": product_id,             "page": page,             "page_size": page_size,             "translate_lang": lang         }         params["sign"] = self.create_sign(params)         try:             resp = requests.post(self.api_url, data=params, timeout=20)             result = resp.json()             # 异常捕获与重试             if result.get("code") != 200:                 if "invalid token" in result.get("message", ""):                     return {"code": -2, "msg": "令牌过期,请刷新", "error": result}                 return {"code": -1, "msg": result.get("message", "调用失败"), "error": result}             data = result.get("result", {})             reviews = data.get("review_list", [])             total = data.get("total_count", 0)             # 结构化解析评论画像             review_list = []             for review in reviews:                 review_list.append({                     "review_id": review.get("review_id"),                     "rating": review.get("rating", 0),  # 评分1-5                     "content": review.get("review_content", ""),  # 转译后内容                     "original_content": review.get("original_content", ""),  # 原始内容                     "country": review.get("buyer_country", ""),  # 买家国家                     "create_time": review.get("create_time", ""),                     "images": review.get("review_images", []),  # 评论图                     "has_additional": review.get("has_additional_review", False),  # 是否有追评                     "spec_info": review.get("spec_info", "")  # 购买规格                 })             # 风控休眠             time.sleep(0.8)             return {                 "code": 200,                 "msg": "success",                 "data": {                     "product_id": product_id,                     "total_count": total,                     "page": page,                     "page_size": page_size,                     "review_list": review_list                 }             }         except Exception as e:             return {"code": 500, "msg": f"请求异常:{str(e)}"}     def get_all_reviews(self, product_id, max_page=50):         """分页拉取全量评论(自动处理分页)"""         all_reviews = []         for page in range(1, max_page + 1):             res = self.get_review_list(product_id, page=page)             if res["code"] != 200:                 break             if not res["data"]["review_list"]:                 break             all_reviews.extend(res["data"]["review_list"])         return all_reviews # ———— 调用示例 ———— if __name__ == "__main__":     APP_KEY = "你的app_key"     APP_SECRET = "你的app_secret"     ACCESS_TOKEN = "你的access_token"     api = AliExpressReviewAPI(APP_KEY, APP_SECRET, ACCESS_TOKEN)     # 单页查询     res = api.get_review_list("1005001234567890", page=1)     print(json.dumps(res, ensure_ascii=False, indent=2))     # 全量拉取     # all_reviews = api.get_all_reviews("1005001234567890")

四、实战避坑干货(原创)


  1. 接口名称必须精准:用aliexpress.product.review.redefining.getproductreviewlist,旧接口已废弃

  2. translate_lang 必填:小语种评论必须指定翻译语言,否则返回原始乱码

  3. page_size≤50:超过 50 会被平台拦截,导致返回空数据

  4. 追评需二次拉取has_additional为 true 时,需调用追评接口补充数据

  5. 国家代码标准化:返回buyer_country为 ISO 3166-1 代码,可直接用于地域分析

群贤毕至

访客