YouTube Analytics API查询返回空Rows问题求助
看起来你遇到的问题是之前正常的API查询突然返回空数据了,我来帮你排查几个关键点:
可能的原因及解决方案
1. 视频归属与筛选器验证
首先要确认你在filters里指定的视频ID 确实属于ids参数里的频道(UCU_N4jDOub9J8splDAPiMWA)。如果其中某个视频不属于该频道,或者视频ID有误,查询会直接返回空结果。你可以直接在YouTube上搜索这些视频ID,查看它们的所属频道是否匹配。
2. 日期范围的合理性
你当前设置的日期是2018-01-01到2018-05-01,这段时间距离现在太久,可能这些视频在当时还未发布,或者历史数据已被清理?建议先换成最近的、确定有数据的日期范围(比如近30天),同时注意YouTube Analytics的数据有2-3天的延迟,不要选择昨天或今天的日期。
另外,YouTube Analytics使用的是UTC时区,如果你的视频数据是在本地时间的某个日期,但对应UTC是前一天,也可能导致查询不到数据。可以尝试把startDate提前1天测试。
3. 查询参数的一致性
你的metrics参数包含dislikes,但CSV表头里没有这个字段——虽然这不会直接导致空rows,但会导致后续写入CSV时数据不匹配。建议修正表头或者去掉dislikes指标,保持参数和输出的一致性。
4. 简化查询排查问题
先去掉filters参数,只查询整个频道的每日数据:
execute_api_request( youtubeAnalytics.reports().query, ids='channel==UCU_N4jDOub9J8splDAPiMWA', startDate='2024-05-01', endDate='2024-06-01', metrics='views,comments,likes,estimatedMinutesWatched,averageViewDuration', dimensions='day' )
如果这个查询能返回数据,说明问题出在filters里的视频ID;如果还是空,那可能是频道本身在该日期范围内没有数据,或者API权限/配额有问题(不过配额用完会返回明确的错误,不是空数组)。
完善你的代码
另外,你的execute_api_request函数目前没有把查询到的rows写入CSV,即使有数据也无法保存。可以修改这个函数:
def execute_api_request(client_library_function, **kwargs): response = client_library_function( **kwargs ).execute() print(response) # 处理CSV写入,用with语句自动管理文件 with open('video_result.csv','w', newline='') as csvFile: csvWriter = csv.writer(csvFile) # 修正表头,加入dislikes(如果保留该指标) csvWriter.writerow(["views","comments","likes","dislikes","estimatedMinutesWatched","averageViewDuration"]) # 写入数据行,先判断是否有rows数据 if 'rows' in response and response['rows']: for row in response['rows']: csvWriter.writerow(row)
这样如果查询到数据,就能正确保存到CSV里了。
内容的提问来源于stack exchange,提问作者Matthew Dickens

