怎么导出某个话题下所有 YouTube 视频的评论
先用 YouTube 视频搜索找到视频,再对每条视频翻页调 YouTube 视频评论。下面的示例一共 9 次调用,花费 $0.02;失败的调用不扣费。
更新于
要做的事:你在卖某个产品,或者准备卖,相关的测评视频下面有成千上万条评论,有买家也有观望的人。先搜出大家真正在看的那些视频,再把每条视频下的评论读进同一张表。最后得到一个 CSV,每行一条评论,带所属视频、内容、作者、点赞、回复数和日期,可以人工打标签,也可以交给模型归纳出吐槽和好评。
不需要 Google Cloud 项目,不用申请 API key,也不用申请配额。每次调用就是带着 key 发一个 HTTPS 请求。
分步操作
第一步:找到视频
调用YouTube 视频搜索,填 query 和 sort:relevance(默认,相关度)、latest(最新)或 most_viewed(播放最多)。一次调用返回约 20 条视频,每次 $0.004,每条有 id、title、url、频道信息 author 和 metrics.views。搜索结果里 metrics.comments 为 null,所以按播放量挑视频。
curl -G "https://api.okdata.online/v1/youtube/videos/search" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
--data-urlencode 'query=robot vacuum review' \
-d sort=most_viewed \
-d fields=id,title,author.name,metrics.views
第二步:翻页读评论
把视频的 id 传给YouTube 视频评论。sort 可选 top(默认,即 YouTube 的“热门评论”顺序)或 latest(从新到旧)。想看大多数观众看到的评论用 top;视频还在持续涨评论、想跟进最新动态时用 latest。
一次调用返回约 20 条评论,每次 $0.002。每条有 id、text、author(name 和 username,后者是 @ 开头的那个账号名)、likes、replies(下面有几条回复)和 published_at。要下一页,就把 page.next_cursor 原样作为 cursor 传回去;page.has_more 为 false 时停下。
curl -G "https://api.okdata.online/v1/youtube/videos/comments/list" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
-d id=h4Lw0pZk3sE -d sort=top
第三步:用 Python 串起来
脚本留下播放量最高的 4 条视频,每条读 MAX_PAGES 页评论。每一页都是一次单独的调用,所以页数上限同时也是花费上限。
import csv
import os
import requests
API = "https://api.okdata.online"
HEADERS = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
VIDEOS = 4
MAX_PAGES = 2 # 每条视频读几页评论;每页一次调用
def get(path, **params):
body = requests.get(API + path, headers=HEADERS, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']} (charged: {body['charged']})")
return body
found = get("/v1/youtube/videos/search", query="robot vacuum review", sort="most_viewed")["data"]["items"]
videos = sorted(found, key=lambda v: v["metrics"]["views"] or 0, reverse=True)[:VIDEOS]
with open("youtube_comments.csv", "w", newline="", encoding="utf-8-sig") as f:
out = csv.writer(f)
out.writerow(["video_id", "video_title", "comment_id", "author", "likes", "replies", "published_at", "text"])
for v in videos:
cursor = None
for _ in range(MAX_PAGES):
body = get("/v1/youtube/videos/comments/list", id=v["id"], sort="top", **({"cursor": cursor} if cursor else {}))
for c in body["data"]["items"]:
out.writerow([v["id"], v["title"], c["id"], c["author"]["name"], c["likes"], c["replies"], c["published_at"], c["text"]])
if not body["page"]["has_more"]:
break
cursor = body["page"]["next_cursor"]
utf-8-sig 会在文件开头写一个 BOM,Excel 打开时表情和外文才不会乱码。想读得更深,就调大 MAX_PAGES:4 条视频各读 10 页是 40 次评论调用,在搜索之外再花 $0.08。
注意事项
- 只有一级评论。 能拿到每条评论的回复数,拿不到回复正文;这里的
parent_id始终为 null。 - 日期是估算的。
published_at是从“2 个月前”这类标签推算的,越早的评论日期越粗。 - 没有评论者属地。 YouTube 不显示这个信息,
ip_location为 null,并在meta.unavailable里注明。 - 删掉的视频不收钱。 已经不存在的视频返回
not_found,不扣费。 - 官方配额。 按 Google 的配额计算页,新项目每天有 100 次
search.list,单独计算;其他方法合计每天 10,000 个单位,太平洋时间零点重置。commentThreads.list 每次消耗 1 个单位,一次最多返回 100 条评论串。如果你已经有 Google 项目,主要是读评论,官方 API 更省钱;按话题批量跑时,通常是搜索配额先用完。 - 重试不会重复扣费。 每次调用带一个
Idempotency-Key请求头。24 小时内同样的请求配同样的 key,会直接拿回上次的结果,meta.replayed为true,不再扣费。
只导出单条视频的评论到表格,看怎么把 YouTube 视频评论导出成 CSV。卡在每天的搜索次数上,看YouTube 搜索配额用完怎么办。
示例花费
搜一页播放最多的扫地机器人测评(robot vacuum review)视频,再取播放量前 4 条视频各两页热门评论
| 接口 | 调用次数 | 单价 | 小计 |
|---|---|---|---|
| YouTube 视频搜索 | 1 | $0.004 | $0.004 |
| YouTube 视频评论 | 8 | $0.002 | $0.016 |
| 合计 | 9 | $0.02 |
按本页生成时的价格计算。失败的调用不扣费。
在你的 AI 里用(MCP)
先接好 MCP 服务,然后直接说你要什么。智能体会自己找到这些接口、看清价格,再用你的余额调用。
可以这样说在 YouTube 搜 robot vacuum review,按播放量排序。挑播放最多的 4 条视频,每条取两页热门评论,整理成一张表:视频、评论内容、作者、点赞、回复数、日期。再把出现不止一次的吐槽点列出来。
智能体第一次调用 call 工具时发送的内容
{
"endpoint": "youtube.videos.search",
"params": {
"query": "claude code tutorial"
},
"idempotency_key": "<新的 UUID>"
}