如何利用YouTube Data API的commentThreads过滤2018-03-25之后的频道评论?
解决YouTube Data API评论时间筛选无效的问题
Hey,我之前也踩过这个YouTube Data API的坑!你遇到的问题核心原因是:当使用allThreadsRelatedToChannelId参数时,API根本不支持publishedAfter/publishedBefore这两个时间筛选参数,所以你的筛选条件相当于没加,自然返回全部结果了。
下面是针对你的需求(获取该频道2018-03-25之后发布的所有评论)的可行解决思路:
方案一:仅获取该频道自有视频的评论(最常用场景)
如果你的需求是该频道自己发布的视频下的评论,需要分两步操作:
1. 先拉取频道2018-03-25之后发布的所有视频ID
用search.list接口来获取目标频道的视频列表,参数要指定type=video来确保只返回视频内容:
GET https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCU34OIeAyiD4BaDwihx5QpQ&type=video&publishedAfter=2018-03-25T00:00:00Z&maxResults=50&key=YOUR_API_KEY
- 注意处理分页:如果结果超过50条(
maxResults上限),需要用返回结果里的nextPageToken循环请求,直到获取所有视频ID; - 如果你需要更精准的视频筛选(比如排除直播回放),可以搭配
videoDuration等额外参数。
2. 逐个拉取每个视频的评论
拿到视频ID后,对每个ID调用commentThreads.list接口,此时就可以正常使用publishedAfter筛选了:
GET https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&videoId=【替换为视频ID】&publishedAfter=2018-03-25T00:00:00Z&maxResults=100&key=YOUR_API_KEY
- 这里的
publishedAfter其实可选(因为视频是2018-03-25之后发布的,评论肯定不会早于这个时间),但加上能更保险; - 同样要处理
nextPageToken来获取该视频的全部评论。
方案二:包含其他视频中提及该频道的评论
如果你的需求还包括其他视频里@该频道的评论(也就是allThreadsRelatedToChannelId原本返回的内容),那这部分无法通过API直接筛选时间,只能:
- 用
allThreadsRelatedToChannelId拉取所有相关评论线程; - 在本地代码中过滤出
snippet.topLevelComment.snippet.publishedAt字段晚于2018-03-25的条目。
额外提醒
- API配额注意:
search.list每次请求消耗100单位配额,commentThreads.list每次消耗1单位,要是频道视频很多,记得算好配额,避免被限流; - 日期格式你用的
2018-03-25T13:15:30Z是正确的ISO 8601格式,这个没问题。
内容的提问来源于stack exchange,提问作者sbod




