做 YouTube 评论分析踩到的坑:配额、分页,和 searchTerms

2 天前
 lianghuan

最近在做 YouTube 评论相关的工具,API 这块踩了几个坑,记录一下。

1. 配额的账要提前算

YouTube Data API v3 免费额度是 10000 units/天,太平洋时间午夜重置。官方配额表里:

方法 每次消耗 作用
commentThreads.list 1 拉顶级评论,一页最多 100 条
comments.list 1 拉某条评论下的回复
search.list 100 按关键词找视频

看起来挺宽裕:1 unit 换 100 条评论,一天理论上能拉 100 万条。

但 search.list 一次 100 units ,而且它有自己独立的额度桶,每天只有 100 次。 所以如果你靠关键词去发现视频,配额会先从那儿炸掉,而不是先炸在拉评论上。

[这里写一句你自己实际怎么处理的:视频 ID 是从哪来的、有没有撞过配额上限]

2. 搜索评论不该在前端做

我最初的想法是把评论拉下来,前端 filter 。后来发现 commentThreads.list 本身就有个 searchTerms 参数:

GET /youtube/v3/commentThreads?part=snippet&videoId=VIDEO_ID&searchTerms=关键词

这是 YouTube 在服务端搜整条线程,不是只搜你当前已经加载的那一页。省带宽,也省延迟。

两个容易踩的限制:

[这里可以写你遇到的某个具体现象,比如搜不到某条回复、或者某类关键词没结果]

3. 分页和回复是两个 endpoint ,请求数不是页数

commentThreads.list 一页最多 100 条( maxResults 上限就是 100 ),翻页靠 nextPageToken 。

但它返回的 replies 字段只是个预览,不是该评论下的全部回复。要拿完整的得再调 comments.list 。 所以评论多的视频,实际请求数约等于「顶级评论的页数 + 有回复的评论条数」,不是页数。

4. 读不需要 OAuth

读公开评论,API key 就够了,不用走 OAuth 。写操作才需要。这点比想象中省事。


我把上面这些做成了个网站: https://apriocity.com 能按关键词搜整条评论线程、按发帖人名字找某条评论、导出 CSV 。前端 Next.js ,后端 Flask + Redis 。

问一个我一直没想好的:热门视频评论几十万条的时候,你们一般怎么处理配额? 开多个 GCP 项目轮换,还是干脆不上官方 API ?想听听有实际经验的怎么做的。

847 次点击
所在节点    分享创造
2 条回复
bihui
2 天前
ytb 的评论为什么我每次看到的时候都会有重复的评论,你有这个情况嘛?
lianghuan
2 天前
@bihui 目前还没有遇见过

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1246085

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX