Blog/开发者工具/

快手公开数据 API | SandBase

用一套 REST API 读取快手公开热榜、综合搜索、购物榜和视频数据。无需登录快手、无需 SDK——一个 SandBase 密钥,为 Agent 而生。

深色电影质感画面:快手热榜、搜索与视频数据经由同一条 API 管道汇入 Agent 内核

快手是中国体量最大的短视频平台之一,在下沉市场和直播电商上尤其强势——热榜、综合搜索、购物榜和视频流可以直接映射到趋势研究、电商监测和内容分析等场景。可要用程序去拿这些数据,通常意味着逆向 App、轮换 token,而且 App 一变你就得重写一遍采集器。

SandBase 的快手公开数据 API 免去了这些前置成本。它通过普通的 REST 端点读取快手公开的热榜、搜索结果、购物榜和视频——只用一个 SandBase API 密钥,不需要登录快手、也不需要 SDK。端点 API 参考是每个参数和响应信封(id/status/model/outputs[0].data)的权威来源;下面展示的业务载荷字段名只是一个示例结构、并非保证的 schema,请以一份真实响应为准核对。

这不是快手官方开放平台。 当你需要经过授权的会员操作,或需要有正式授权协议的数据时,请走快手官方渠道。当你的工作流需要用于研究和监测的公开、只读数据时,用 SandBase。想上手?获取 SandBase API 密钥,然后浏览快手端点。

先说结论

  • 一套 API 即可读取快手公开热榜、搜索结果、购物榜、视频和评论。
  • 本文的 Model API 端点用 POST /v1/api/kuaishou/<path> 调用——只传该端点的参数,无 SDK,一个 SANDBASE_API_KEY。
  • 端点以自然标识为入口:搜索用 keyword、视频用 photo_id、创作者用 user_id。
  • 只返回公开、只读数据。你这边无需发帖、无需平台登录或 OAuth、不涉及私有数据;用 SandBase API 密钥鉴权即可。

你需要哪种快手 API?

你的需求选择原因
发布、以会员身份操作,或使用账号授权数据快手官方渠道会员和账号级操作应通过快手直接进行。
读取公开热榜、搜索、购物榜或视频SandBase 快手公开数据 API普通 REST、一个 SandBase 密钥、结构化 JSON,面向只读工作流。
私有或仅账号可见的数据两种公开方案都不适用这类数据不在本篇公开数据指南范围内。

快手 API 能取到什么

目录横跨 app 和 web 两个面。按用途分组:

  • 热榜与排行 — 趋势热榜和购物榜。
  • 搜索 — 按关键词的综合搜索、实时搜索和标签搜索。
  • 视频 — 按 photo_id 读取单条视频及其评论。
  • 创作者 — 按 user_id 读取公开的创作者信息。

动手前请以每个端点的线上 API 参考为准核对具体面和参数;可用性因端点而异。

SandBase 快手 API 页面:描述、能力标签与端点列表 SandBase 上的快手 API 页面——带标签的概览和端点列表,每个端点都标了路径。

快手提供什么,SandBase 补什么

公开数据来自快手。SandBase 并不拥有或运营快手,它为符合条件的公开数据工作流提供一层统一的 API。每个能力都成为一个稳定端点,鉴权收敛为单个密钥,响应回来是可预测的 JSON——于是 Agent 可以沿着”读热榜 → 搜关键词 → 读某条视频的评论”这一条约定链式调用,而不用维护采集器。

快速上手:第一次调用

SandBase 暴露不止一个 API 面。目录里可能显示 /apis/v1/... 下的 GET 路径;本文使用每个端点 API 参考上标注的带厂商前缀的 Model API 路径。不要擅自改动 HTTP 方法或 URL——以你所选端点的参考为准。

读取热榜:

import os
import requests

resp = requests.post(
    "https://api.sandbase.ai/v1/api/kuaishou/web/hot-list-v1",
    headers={
        "Authorization": f"Bearer {os.environ['SANDBASE_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={},
)
resp.raise_for_status()
body = resp.json()
if body.get("status") != "completed":
    error = body.get("error", {})
    raise RuntimeError(error.get("message", "快手请求未完成"))

# 参考只保证信封,业务字段随端点而定、以真实响应为准。
for item in body["outputs"][0]["data"][:5]:
    print(item.get("rank"), item.get("name"), item.get("tagType"))
curl -X POST https://api.sandbase.ai/v1/api/kuaishou/web/hot-list-v1 \
  -H "Authorization: Bearer $SANDBASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

每个响应都使用同一个信封:一个 id、一个 status、model 名称,以及一个 outputs 数组,其唯一元素在 data 下承载数据。读取 outputs[0].data 前先根据 status 分支判断,并查阅每个端点参考确认其运行模式(run mode)。热榜把条目以 list 形式直接放在 data 下。下面是一个示例响应结构——字段名并非保证的 schema、以真实响应为准,请把字段名和取值当作示例,并对照真实响应核对,因为负载会随时间变化:

{
  "id": "0e6f9926-eb40-4d04-94bf-35b070748803",
  "status": "completed",
  "model": "kuaishou/web/hot-list-v1",
  "outputs": [
    {
      "data": [
        { "rank": 0, "name": "…", "tagType": "…", "viewCount": null }
      ]
    }
  ]
}

failed 或 timeout 的运行会带 error,且不含 outputs。响应结构因端点而异——请检查一次真实响应,并逐端点确定精确的字段路径。

某个快手端点的 SandBase API 参考,展示带厂商前缀的 URL 和响应结构 端点 API 参考是每个参数名和响应路径的事实来源。

能力地图

能力簇代表端点典型用途
热榜kuaishou/web/hot-list-v1趋势话题监测
购物榜kuaishou/app/shopping-top-list直播电商与商品追踪
搜索kuaishou/app/search-comprehensive关键词内容发现
视频kuaishou/web/one-video-v2按 photo_id 读取视频
视频评论kuaishou/app/video-comment互动与情感分析输入

分页方式因端点而异——若干端点会返回或接受一个游标值,如 pcursor。请查阅每个端点的结构。

SandBase 快手端点列表,展示热榜、搜索、购物、视频等端点及其路径 快手端点列表的一角,覆盖 app 与 web 两个面。

在 Agent 工作流中链式调用

因为每个端点共享同一套鉴权和同一个响应信封,Agent 可以从热榜一路走到某条视频的评论,而不用为每个面单独写特例。一个常见的内容研究模式是这样:

  1. 读热榜。 调用 kuaishou/web/hot-list-v1 拿到趋势话题,再挑出你关心的。
  2. 搜关键词。 用一个 keyword 调用 kuaishou/app/search-comprehensive 拉取匹配视频,用返回的 pcursor 翻页。
  3. 读视频。 用一个 photo_id 调用 kuaishou/web/one-video-v2,再调 kuaishou/app/video-comment 拿互动输入。

每一步都返回相同的 { id, status, model, outputs } 结构,所以你的 Agent 只需按 status 分支一次,并在每一步复用同一段读 JSON 的代码。

常见用例

快手热榜 API 做趋势监测

按计划轮询 kuaishou/web/hot-list-v1 追踪趋势话题——每个条目带名称和排名。输入:无。输出:排名的趋势话题列表。端点:hot-list-v1。

快手购物 API 做直播电商研究

读取 kuaishou/app/shopping-top-list 拿购物榜。输入:无。输出:排名的购物列表。端点:shopping-top-list。

快手搜索 API 做内容发现

用一个关键词运行 kuaishou/app/search-comprehensive 来梳理某话题周边的内容,再用 pcursor 翻页。输入:一个关键词。输出:匹配的 feed。端点:search-comprehensive。

为什么放在 API 层来做

你当然可以用无头浏览器指向快手、解析 App 的负载,但这条路很脆:App 会变,token 会轮换,你维护的是采集器而不是在做产品。通过一层统一 API 来读,意味着你的代码依赖的是有名字的 JSON 字段和单个响应信封,而不是某个 App 内部实现。鉴权是一个密钥,而且因为每个端点都返回相同的 { id, status, model, outputs } 结构,重试、日志和错误处理都可以收进一个你写一次、处处复用的辅助函数里。

正是这种一致性让工作流对 Agent 而言可组合。把热榜话题换成任意关键词、把一个 photo_id 换成另一个,代码路径完全一样。再加第四个读取——比如某个创作者的视频——它也照样接在同一个判 status 的辅助函数后面。实际的收益是:你的时间花在”数据对你的研究意味着什么”上,而不是花在维持一个采集器去追一个移动靶。当你需要的不止是单次读取时,在线上列表里查到合适的端点,并在接入前确认它的参数。

局限与边界

  • 仅公开、只读数据。 不发帖、不关注、不涉及私有或仅账号可见的数据。
  • 速率与量级。 把响应当作尽力而为的读取;作为客户端侧的韧性措施,遇到 HTTP 429 等瞬时错误时按退避策略重试。
  • 参数与结构随上游面而定。 标识各异(keyword、photo_id、user_id);分页是每端点各自的游标,如 pcursor。先看一次真实响应、读一遍结构。
  • 以线上参考核对端点。 可用性和字段可能变化;在依赖某个具体端点前先确认。
  • 这不是快手官方合作。 SandBase 提供对公开数据的统一访问;请就你的使用场景遵守快手条款和适用规则。

常见问题

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

什么标识一条视频或一个创作者? 视频用 photo_id,创作者用 user_id。搜索用 keyword。

分页怎么做? 搜索和 feed 端点会返回或接受一个游标值,如 pcursor——把它回传即可取下一页。请查阅每个端点的结构。

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

从热榜开始

创建一个 SandBase API 密钥,调用 hot-list-v1,在扩展到搜索、购物或视频之前先检查返回的结构。准备好后: