×

api详情.关键字搜索

唯品会关键词搜索接口:突出商品热点

admin admin 发表于2026-10-19 11:16:47 浏览8 评论0

抢沙发发表评论

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


企业微信截图_1792379215509.png


一、接口清单(官方)
服务名:com.vip.adp.api.open.service.UnionGoodsService(1.0.0)

与 UnionGoodsV2Service(2.0.0),网关 https://vop.vip.com/apicenter。

方法版本用途对“热点”的价值
query1.0.0关键词查商品(渠道商)可指定排序,但不支持销量排序
queryWithOauth1.0.0、2.0.0关键词查商品(需 oauth)主力:2.0.0 会额外返回 weight 推荐值和个性化排序
goodsList或goodsListV2WithOauth—在推商品列表,sourceType=0 时包含超高佣、出单爆款两个频道官方现成的热货池
getGoodsDetailMarketingWithOauth2.0.0单商品详情、精准到手价、活动、未来价判断“真降价”还是“假促销”
similarRecommendWithOauth、userRecommendWithOauth2.0.0相似推荐、猜你喜欢热门聚合验证


queryWithOauth 2.0.0 的官方说明写得很直白:传入排序字段时,会为每个商品打上 weight(0–100),值越大,推广优先级越高。这是唯品会唯一公开的“热度型”字段,也是你排序的主要依据。
二、必须注意的关键问题:不传 openId 会让“热点”失真
2025 年 5 月 23 日起,联盟搜索接口做了权限升级:

  • 传入正确的 openId → 全量商品池 + 个性化排序 + 营销信息

  • 未传 openId、传 default_open_id、或用搜索批量拉取商品 → 只返回约 10% 的基础商品池,且没有个性化排序,也没有营销信息

这意味着:如果你用默认 openId 批量拉取关键词,算出来的“热榜”只是那一成样本里的排序,这个结论不可靠。要做热点分析,必须先走完 SDK 授权流程,拿到真实的 openId。这是整件事的前提,比选择排序字段重要得多。
三、热点分怎么算
接口不提供销量,因此热度需要由三类信号合成:

  1. 官方推荐值weight:直接使用,并归一化到 0–1

  2. 排名升幅:每天在同一关键词下抓取一次,计算同一 goodsId 的排名变化;连续 3 天上升的才是真正的热点,单次排名高很可能只是自然排序的抖动

  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,需要做指数退避。


群贤毕至

访客