爱意满满的作品展示区。
lianghuan

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

  •  
  •   lianghuan · 2 days ago · 843 views

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

    bihui
        1
    bihui  
       1 day ago
    ytb 的评论为什么我每次看到的时候都会有重复的评论,你有这个情况嘛?
    lianghuan
        2
    lianghuan  
    OP
       1 day ago
    @bihui 目前还没有遇见过
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2331 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    ♥ Do have faith in what you're doing.