YouTube 频道研究 API 教程 | SandBase
搭一套 YouTube 频道研究工作流:搜视频、解析频道、读频道统计——一个 SandBase 密钥,无需 YouTube 登录、无需 SDK。

如果你在 YouTube 上研究创作者,你想要一个可复用的循环:按话题搜视频、解析出强结果背后的频道、读每个频道的公开统计来排序。这篇 YouTube 频道研究 API 教程用两个 SandBase 端点把这个循环串起来,让 Agent 能端到端跑完。它建立在 YouTube 公开数据 API 汇总页之上;建议先读那篇了解全局。
这里的一切都是公开、只读数据。不需要登录 YouTube、不需要 SDK——但仍需要一个 SandBase API 密钥来鉴权。端点 API 参考是参数和响应信封的权威来源。参考只保证信封本身;下面的载荷字段名来自我实际跑的调用(测试于 2026-09-28,UTC),是示意性的、仅供观测——并非文档保证——请以真实响应为准核对。
先说结论
- 两个端点构成循环:
search-video(找视频)→channel-info(频道统计)。- 每次调用都是
POST /v1/api/youtube/web/<path>,一个SANDBASE_API_KEY。- 以自然输入链式串联:一个
search_query驱动搜索;一条视频的channel_id成为channel-info的输入。- 用返回的
continuation_token翻搜索页。仅公开、只读数据。
SandBase vs. 官方 YouTube Data API
| 你的需求 | 用 |
|---|---|
| 公开、只读的搜索和频道统计 | SandBase YouTube 公开数据 API |
| 管理频道、上传,或用基于配额的 Data API | YouTube 官方 Data API |
| 私有或仅账号可见的数据 | 两种公开方案都不适用 |
工作流一览
- 用
youtube/web/search-video以一个search_query搜视频。 - 用一条视频的
channel_id调用youtube/web/channel-info读频道。
每个端点返回共享信封——一个 id、一个 status、model,以及在 completed 运行上的负载。
SandBase 上的 YouTube 端点——search-video 和 channel-info 驱动这个循环。
第 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=60)
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("youtube/web/search-video", {"search_query": "machine learning tutorial"})
videos = data.get("videos", [])
token = data.get("continuation_token")
for v in videos[:5]:
print(v.get("title"), "-", v.get("author"), "|", v.get("number_of_views"), "次观看")
在我抓到的响应里(搜索 run id a8b82dc1-190d-4560-9fa2-3c98878bfad4,测试于 2026-09-28,UTC),负载带一个 videos 列表,加 continuation_token 和 number_of_videos。每条视频带 video_id、title、author、channel_id、number_of_views、published_time 和 video_length——这些是示意性的、仅供观测的字段。用 .get() 读每个。
翻页时,用返回的 continuation_token 重发 search-video——确切参数名对照参考核对。
search-video 参考——search_query 参数和翻页的事实来源。
第 2 步:读频道
channel_ids = {v.get("channel_id") for v in videos if isinstance(v, dict) and v.get("channel_id")}
for cid in list(channel_ids)[:5]:
channel = call("youtube/web/channel-info", {"channel_id": cid})
print(channel.get("title"), "|", channel.get("subscriber_count"), "订阅,", channel.get("video_count"), "视频")
channel-info 端点接受一个 channel_id——一条视频的 channel_id 可直接用。在我这次运行里(channel-info run id eca232e4-ce65-45eb-ab7f-6da2c99c16bc),负载带 title、subscriber_count、video_count、view_count、verified、creation_date 和 country——这些是示意性的、仅供观测的字段,参考并不保证。
channel-info 参考——传一个 channel_id;一条搜索结果的 channel_id 可作为该标识。
串起来
def research(query: str, max_channels: int = 5):
data = call("youtube/web/search-video", {"search_query": query})
videos = data.get("videos", [])
seen, channels = set(), []
for v in videos:
if not isinstance(v, dict):
continue
cid = v.get("channel_id")
if cid and cid not in seen:
seen.add(cid)
channels.append(call("youtube/web/channel-info", {"channel_id": cid}))
if len(channels) >= max_channels:
break
return channels
因为两个端点共享同一个信封,循环保持扁平:call(...) 里一次 status 检查,channel_id 从一条视频流向频道查询。
常见用例
创作者候选筛选
搜一个垂类话题,从强视频收集 channel_id,按 subscriber_count 和 video_count 给频道排序做候选名单。输入:一个 search_query。输出:排名的频道统计。端点:search-video、channel-info。
竞品对标
读一组频道的 subscriber_count、view_count 和 creation_date,对标它们相对竞品的增长和产出。输入:频道 id。输出:可比的频道统计。端点:channel-info。
话题覆盖测绘
搜一个话题,检查 videos 负载——标题、观看数、频道——测绘谁在覆盖一个主题、有多大触达。输入:一个 search_query。输出:带频道的视频样本。端点:search-video。
实操要点
- 信封可能不同。 参考记录的是
outputs[0].data;两种结构都读(优先output,回退outputs[0].data)。 - 用 token 翻页。 在还有更多结果时用
continuation_token重发search-video。 - 业务字段仅供观测。 把
videos、channel_id、subscriber_count之类当作观测到的、以真实响应核对。 - 仅公开、只读数据。 不上传、不涉及私有/仅账号可见数据。用 SandBase API 密钥鉴权。
- 做个好客户端。 遇到 HTTP 429 等瞬时错误按退避重试;翻页而不是猛打。
常见问题
我需要 YouTube/Google API 密钥或配额吗?
不需要。你用自己的 SANDBASE_API_KEY 向 SandBase 鉴权。这些读取端点不需要你这边有 Google Cloud 项目或 Data API 配额。
我怎么从一条视频找到它的频道?
搜索负载里每条视频带一个 channel_id;把它传给 channel-info。
怎么翻更多视频?
搜索负载带一个 continuation_token;用它重发 search-video。确切参数对照参考核对。
我能读私有或不公开列出的视频吗? 不能。这套 API 只返回公开数据。私有和账号授权内容不在范围内。
小结
两个端点、一个信封、一个 channel_id 在步骤间流动——这就是整个频道研究循环。完整端点目录见 YouTube 公开数据 API 汇总页。准备好后: