Blog/开发者工具/

快手达人研究 API 教程 | SandBase

搭一套快手达人研究工作流:搜用户、解析达人、读达人资料——一个 SandBase 密钥,无需快手登录、无需 SDK。

深色电影质感画面:快手用户搜索化为一张达人资料卡,汇入 Agent 内核

如果你在快手——中国第二大短视频平台——上研究达人,你想要一个可复用的循环:按垂类搜用户、解析出强结果背后的达人、读每个资料来排序。这篇快手达人研究 API 教程用两个 SandBase 端点把这个循环串起来,让 Agent 能端到端跑完。它建立在 快手公开数据 API 汇总页之上;建议先读那篇了解全局。

这里的一切都是公开、只读数据。不需要登录快手、不需要 SDK——但仍需要一个 SandBase API 密钥来鉴权。端点 API 参考是参数和响应信封的权威来源。参考只保证信封本身;下面的载荷字段名来自我实际跑的调用(测试于 2026-09-28,UTC),是示意性的、仅供观测——并非文档保证——请以真实响应为准核对。

先说结论

  • 两个端点构成循环:search-user-v2(找达人)→ one-user-v2(达人资料)。
  • 每次调用都是 POST /v1/api/kuaishou/app/<path>,一个 SANDBASE_API_KEY。
  • 以自然输入链式串联:一个 keyword 驱动搜索;一个结果的 user.user_id 成为资料调用的输入。
  • 用返回的 pcursor 翻搜索页。仅公开、只读数据。

SandBase vs. 快手官方渠道

你的需求用
公开、只读的搜索和资料SandBase 快手公开数据 API
发帖、以账号身份操作,或用合作伙伴 API快手官方渠道
私有或仅账号可见的数据两种公开方案都不适用

工作流一览

  1. 用 kuaishou/app/search-user-v2 以一个 keyword 搜用户。
  2. 用一个结果的 user_id 调用 kuaishou/app/one-user-v2 读达人。

每个端点返回共享信封——一个 id、一个 status、model,以及在 completed 运行上的负载。

SandBase 快手 API 页面,含本工作流用到的端点 SandBase 上的快手端点——search-user-v2 和 one-user-v2 驱动这个循环。

第 0 步:一个辅助函数管所有调用

import os
import requests

API = "https://api.sandbase.ai/v1/api"
HEADERS = {
    "Authorization": f"Bearer {os.environ['SANDBASE_API_KEY']}",
    "Content-Type": "application/json",
}

def call(path: str, payload: dict) -> dict:
    resp = requests.post(f"{API}/{path}", headers=HEADERS, json=payload, timeout=70)
    resp.raise_for_status()
    body = resp.json()
    if body.get("status") != "completed":
        raise RuntimeError(body.get("error", {}).get("message", f"{path} 未完成"))
    # 信封可能不同:优先读顶层 output,否则 outputs[0].data。
    output = body.get("output")
    if output is None and body.get("outputs"):
        output = body["outputs"][0].get("data", {})
    return output or {}

第 1 步:搜用户

data = call("kuaishou/app/search-user-v2", {"keyword": "美食"})
feeds = data.get("mixFeeds", [])
pcursor = data.get("pcursor")
for f in feeds[:5]:
    user = f.get("user", {}) if isinstance(f, dict) else {}
    print(user.get("kwaiId"), "-", user.get("fansCount"), "粉丝")

在我抓到的响应里(搜索 run id 760a7ea6-b480-40c2-8a91-fb551a2df9c1,测试于 2026-09-28,UTC),负载带一个 mixFeeds 列表和一个 pcursor。每个 feed 的 user 对象带 user_id、kwaiId、fansCount 和 following——这些是示意性的、仅供观测的字段。用 .get() 读每个。

翻页时,用返回的 pcursor 重发 search-user-v2——确切参数名对照参考核对。

快手 search-user-v2 端点的 SandBase API 参考 search-user-v2 参考——keyword 参数和翻页的事实来源。

第 2 步:读达人

user_ids = {
    f.get("user", {}).get("user_id")
    for f in feeds if isinstance(f, dict) and f.get("user", {}).get("user_id")
}

for uid in list(user_ids)[:5]:
    profile = call("kuaishou/app/one-user-v2", {"user_id": str(uid)})
    author = profile.get("authorInfo", {}) or profile.get("userProfile", {})
    print(uid, "-", profile.get("totalPhotoLike"))

one-user-v2 端点接受一个 user_id——一个搜索结果的 user.user_id 可直接用。在我这次运行里(资料 run id 142efb32-7caf-47e1-a45e-37cf01c721e2),负载带 authorInfo、userProfile 和 totalPhotoLike——这些是示意性的、仅供观测的字段,参考并不保证。防御式读取嵌套对象。

快手 one-user-v2 端点的 SandBase API 参考 one-user-v2 参考——传一个 user_id;一个搜索结果的 user.user_id 可作为该标识。

串起来

def research(keyword: str, max_creators: int = 5):
    data = call("kuaishou/app/search-user-v2", {"keyword": keyword})
    feeds = data.get("mixFeeds", [])
    seen, creators = set(), []
    for f in feeds:
        if not isinstance(f, dict):
            continue
        uid = f.get("user", {}).get("user_id")
        if uid and uid not in seen:
            seen.add(uid)
            creators.append(call("kuaishou/app/one-user-v2", {"user_id": str(uid)}))
        if len(creators) >= max_creators:
            break
    return creators

因为两个端点共享同一个信封,循环保持扁平:call(...) 里一次 status 检查,user_id 从一个搜索结果流向资料查询。

常见用例

达人候选筛选

搜一个垂类关键词,从强结果收集 user_id,按 fansCount 给达人排序做候选名单。输入:一个 keyword。输出:排名的达人资料。端点:search-user-v2、one-user-v2。

竞品与 KOL 研究

用 one-user-v2 读一组达人的资料信号,对比一个垂类里的触达和互动(totalPhotoLike)。输入:user id。输出:可比的达人资料。端点:one-user-v2。

垂类测绘

搜一个话题,检查 mixFeeds 负载——达人和他们的粉丝数——测绘谁在快手上领跑一个垂类。输入:一个 keyword。输出:一份达人样本。端点:search-user-v2。

趋势采样

按计划轮询一个关键词的搜索,采样一个话题随时间浮现的达人。因为每个结果带粉丝和互动信号,你可以把样本喂给模型做排序。输入:一个 keyword。输出:随时间的达人样本。端点:search-user-v2。

实操要点

  • 信封可能不同。 参考记录的是 outputs[0].data;两种结构都读(优先 output,回退 outputs[0].data)。
  • 用 pcursor 翻页。 在还有更多结果时用返回值重发 search-user-v2。
  • 业务字段仅供观测。 把 mixFeeds、user_id、fansCount、totalPhotoLike 之类当作观测到的、以真实响应核对。
  • 仅公开、只读数据。 不发帖、不涉及私有/仅账号可见数据。用 SandBase API 密钥鉴权。
  • 做个好客户端。 遇到 HTTP 429 等瞬时错误按退避重试;翻页而不是猛打。

常见问题

我需要快手开发者账号或登录吗? 不需要。你用自己的 SANDBASE_API_KEY 向 SandBase 鉴权。这些读取端点不需要你这边有快手账号或 OAuth。

我怎么从一个搜索结果找到达人资料? 每个 feed 的 user 对象带一个 user_id;把它传给 one-user-v2。

怎么翻更多结果? 搜索负载带一个 pcursor;用它重发 search-user-v2。确切参数对照参考核对。

我能读私密账号吗? 不能。这套 API 只返回公开数据。私有和账号授权内容不在范围内。

小结

两个端点、一个信封、一个 user_id 在步骤间流动——这就是整个达人研究循环。完整端点目录见 快手公开数据 API 汇总页。准备好后: