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

lianghuan 2026-10-02 09:07 1

最近在做 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 在服务端搜整条线程,不是只搜你当前已经加载的那一页。省带宽,也省延迟。


两个容易踩的限制:



  • searchTerms 不能和 id 参数一起用,只能配合 videoId 或 allThreadsRelatedToChannelId

  • 它只匹配顶级评论的文本,回复里的内容搜不到,要另外走 comments.list


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


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 ?想听听有实际经验的怎么做的。

最新回复 (2)
  • bihui 10-02 20:07
    1楼
    ytb 的评论为什么我每次看到的时候都会有重复的评论,你有这个情况嘛?
  • lianghuan 楼主 10-02 20:24
    2楼
    @bihui 目前还没有遇见过
* 帖子来源V2EX
返回