×

京东商品评论接口分页异常修复与结构化解析实战

Ace Ace 发表于2026-08-04 17:16:36 浏览16 评论0

抢沙发发表评论

京东商品评论接口是电商口碑分析、竞品调研、商品质量评估的核心数据源。目前多数开源对接方案仅实现基础请求调用,普遍存在分页数据重复、追评数据丢失、空页报错、特殊商品无数据等生产级问题。本文跳出基础参数讲解的通用套路,聚焦接口高频异常问题,提供修复方案+结构化解析封装代码,适配稳定的线上业务调用场景。
本次对接采用京东联盟官方合规接口 jd.union.open.goods.comment.query,支持获取商品图文评论、追评、星级评分、用户属性等全量数据,兼容全品类商品,规避普通评论接口的权限限制问题。


一、核心踩坑问题总结
1. 分页参数不规范:未适配接口最大页码限制,超限返回空数据,多页数据重复;2. 字段解析粗糙:默认忽略追评、晒单图片、规格属性等增值字段;3. 无数据容错:商品无评论、商品下架场景直接抛异常,中断程序执行。

点击获取key和secret
二、优化版完整调用代码
基于Python封装,整合签名校验、分页边界处理、异常捕获、全字段结构化解析,可直接用于生产环境。

import requests
import time
import hashlib

class JdCommentApi:
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://api.jd.com/routerjson"

    # 标准SHA256签名算法
    def build_sign(self, params):
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        sign_str = self.app_secret + "".join(f"{k}{v}" for k, v in sorted_params) + self.app_secret
        return hashlib.sha256(sign_str.encode("utf-8")).hexdigest().upper()

    # 商品评论分页查询(修复分页异常)
    def get_goods_comment(self, goods_id, page=1, size=10):
        # 修复:官方最大单页10条,超出强制截断
        size = 10 if size > 10 else size
        timestamp = int(time.time() * 1000)
        params = {
            "app_key": self.app_key,
            "method": "jd.union.open.goods.comment.query",
            "timestamp": str(timestamp),
            "format": "json", "v": "1.0",
            "goodsId": str(goods_id),
            "page": page, "pageSize": size
        }
        params["sign"] = self.build_sign(params)
        try:
            res = requests.post(self.api_url, data=params, timeout=12)
            res_json = res.json()
            resp_data = res_json.get("jd_union_open_goods_comment_query_response", {})
            if not resp_data.get("success"):
                return {"code": -1, "msg": resp_data.get("msg"), "list": []}
            # 结构化清洗数据
            comment_list = []
            for item in resp_data.get("data", []):
                comment_list.append({
                    "content": item.get("comment"),
                    "score": item.get("score"),
                    "spec": item.get("skuAttr"),
                    "pic_list": item.get("picList", []),
                    "after_comment": item.get("afterComment"),
                    "create_time": item.get("commentTime")
                })
            return {"code": 0, "msg": "success", "list": comment_list}
        except Exception as e:
            return {"code": -2, "msg": f"请求异常:{str(e)}", "list": []}

# 调用示例
if __name__ == "__main__":
    api = JdCommentApi("你的APP_KEY", "你的APP_SECRET")
    data = api.get_goods_comment(100012345678, page=1)
    print(data)


三、关键优化点解析
1. 分页边界修复:官方接口限制单页最大10条数据,代码内置参数强制校验,彻底解决分页错乱、数据重复问题,这是多数通用Demo遗漏的核心规则。
2. 全维度数据解析:主动适配规格属性、晒图、追评、评分等业务核心字段,输出结构化数据,无需二次处理,可直接用于数据分析。
3. 多层异常容错:区分接口业务异常、网络超时、参数错误等场景,统一返回格式,避免程序崩溃,适配批量爬取、定时任务等场景。


四、线上使用规范
该接口存在QPS限制,单应用每秒请求不超过2次。批量获取多页数据时,建议添加300ms间隔延时,同时过滤重复评论数据。禁止高频暴力请求,否则会触发接口限流,导致短期封禁权限。

群贤毕至

访客