“突出商品热点”需要你来计算:用官方的 weight 推荐值、出单爆款频道以及跨期对比,组合出热点分。

一、接口清单(官方)
服务名:com.vip.adp.api.open.service.UnionGoodsService(1.0.0)
与 UnionGoodsV2Service(2.0.0),网关 https://vop.vip.com/apicenter。
方法 版本 用途 对“热点”的价值
query 1.0.0 关键词查商品(渠道商) 可指定排序,但不支持销量排序
queryWithOauth 1.0.0、2.0.0 关键词查商品(需 oauth) 主力:2.0.0 会额外返回 weight 推荐值和个性化排序
goodsList或goodsListV2WithOauth — 在推商品列表,sourceType=0 时包含超高佣、出单爆款两个频道 官方现成的热货池
getGoodsDetailMarketingWithOauth 2.0.0 单商品详情、精准到手价、活动、未来价 判断“真降价”还是“假促销”
similarRecommendWithOauth、userRecommendWithOauth 2.0.0 相似推荐、猜你喜欢 热门聚合验证
queryWithOauth 2.0.0 的官方说明写得很直白:传入排序字段时,会为每个商品打上 weight(0–100),值越大,推广优先级越高。这是唯品会唯一公开的“热度型”字段,也是你排序的主要依据。
二、必须注意的关键问题:不传 openId 会让“热点”失真
2025 年 5 月 23 日起,联盟搜索接口做了权限升级:
传入正确的 openId → 全量商品池 + 个性化排序 + 营销信息
未传 openId、传 default_open_id、或用搜索批量拉取商品 → 只返回约 10% 的基础商品池,且没有个性化排序,也没有营销信息
这意味着:如果你用默认 openId 批量拉取关键词,算出来的“热榜”只是那一成样本里的排序,这个结论不可靠。要做热点分析,必须先走完 SDK 授权流程,拿到真实的 openId。这是整件事的前提,比选择排序字段重要得多。
三、热点分怎么算
接口不提供销量,因此热度需要由三类信号合成:
官方推荐值weight:直接使用,并归一化到 0–1
排名升幅:每天在同一关键词下抓取一次,计算同一 goodsId 的排名变化;连续 3 天上升的才是真正的热点,单次排名高很可能只是自然排序的抖动
促销力度:折扣率(vipPrice/marketPrice)、券、唯品快抢等活动标识;强促销通常驱动爆发
hot = 0.4 * norm(weight)
+ 0.3 * norm(rank_yesterday - rank_today)
+ 0.2 * norm(discount)
+ 0.1 * norm(跨关键词出现次数)
最后一项容易被忽略,但很好用:同一个 goodsId 在“连衣裙”“显瘦”“夏季”等多个词下都排进前 20,说明它是站内正在被推的爆款,而不是某个词的自然结果。
四、调用骨架
签名规则是 VOP 通用的:把所有参数按 key 升序排列,逐个拼接 key+value,前后各拼上 appSecret,再做 MD5 并转成大写。
import hashlib, time, requests
GATEWAY = "https://vop.vip.com/apicenter"
def sign(params: dict, secret: str) -> str:
raw = "".join(f"{k}{params[k]}" for k in sorted(params))
return hashlib.md5(f"{secret}{raw}{secret}".encode()).hexdigest().upper()
def call(method, biz, app_key, secret, version="2.0.0", token=None):
p = {
"service": "com.vip.adp.api.open.service.UnionGoodsV2Service",
"method": method, "version": version,
"timestamp": str(int(time.time())),
"format": "json", "appKey": app_key,
"request": biz, # JSON 字符串
}
if token: p["accessToken"] = token
p["sign"] = sign(p, secret)
r = requests.post(GATEWAY, data=p, timeout=10)
return r.json()
关键词搜索:keyword / page / pageSize / 排序与 openId 放在 request 内
封装好API demo url=o0b.cn/ibrad
resp = call("queryWithOauth",
'{"keyword":"连衣裙","page":1,"pageSize":50,"openId":"<授权用户openId>"}',
APP_KEY, APP_SECRET, token=ACCESS_TOKEN)
request 里排序字段、价格区间、类目过滤的具体枚举值,请以 http://vop.vip.com 接口页 的在线测试工具为准;各版本的字段名有过调整,从旧文档抄写容易报 1000 参数非法。
频控方面,query* 默认 600 次/30 秒,getByGoodsIds 是 1000 次/30 秒;超限返回 1008,需要做指数退避。