请求https://www.googleapis.com/youtube/v3/commentThreads时出现HttpError 400

时间:2018-04-06 08:19:10

标签: google-api youtube-api youtube-data-api

我正在使用YouTube的数据API获取有关youtube视频的评论,在使用'pageToken'分页获得一定数量(~2000)的评论后,我突然开始收到以下错误:

  

HttpError:https://www.googleapis.com/youtube/v3/commentThreads返回“API服务器无法成功处理请求。虽然这可能是暂时性错误,但通常表示请求输入无效。检查请求正文中`commentThread`资源的结构,以确保它是有效的。“>

这是我用来迭代地发出请求的Python代码:

api_response = self.youtube_data_api_session.commentThreads().list(                                                                part="snippet,replies",                                                                videoId=video_id,                                                                order="relevance",
pageToken= next_page_token,
maxResults=100
).execute()

所以,我有两个问题:

  1. 如果请求格式错误,为什么它在第一次迭代中没有失败?
  2. 如果请求格式正确,如何避免此错误?

2 个答案:

答案 0 :(得分:0)

  

如果请求格式错误,为什么它在第一次迭代中没有失败?

初始请求可能工作得很好。但是,当您正在分页时,您实际上正在提出其他请求。如果其中一个失败,那么您将无法获得其他数据。

  

如果请求格式正确,如何避免此错误?

格式对我来说很好,因为你只是在分页,所以没有办法解决这个问题。

答案 1 :(得分:0)

遇到同样的问题,我通过将顺序从relevance更改为time来解决了这个问题。

这可能对OP没有帮助,因为未在原始代码中指定order,并且按time进行排序是默认行为。不过,这可能对其他读者有用。

使用order='relevance'时,当请求花费的时间略超过4000毫秒或传递特定页面时(例如,使用maxResults=100的第17页),就会抛出HTTP 400。

这可能是由于YouTube API如何处理order='relevance'的nextPageToken。请注意下面的日志中nextPageToken和响应时间是如何不断增加的。

Page: 1, nextPageToken length: 1848, response time: 475ms
Page: 2, nextPageToken length: 2376, response time: 996ms
Page: 3, nextPageToken length: 2884, response time: 922ms
Page: 4, nextPageToken length: 3404, response time: 1370ms
Page: 5, nextPageToken length: 4068, response time: 1513ms
Page: 6, nextPageToken length: 4396, response time: 1644ms
Page: 7, nextPageToken length: 4556, response time: 2121ms
Page: 8, nextPageToken length: 5232, response time: 2302ms
Page: 9, nextPageToken length: 5564, response time: 2161ms
Page: 10, nextPageToken length: 5732, response time: 2702ms
Page: 11, nextPageToken length: 6412, response time: 2749ms
Page: 12, nextPageToken length: 6748, response time: 3214ms
Page: 13, nextPageToken length: 6888, response time: 3352ms
Error fetching comments HTTP 400, response time 4191ms, retrying
Page: 14, nextPageToken length: 7552, response time: 2944ms
Page: 15, nextPageToken length: 7860, response time: 3884ms
Page: 16, nextPageToken length: 8044, response time: 4148ms
Error fetching comments HTTP 400, response time 114ms, retrying
Error fetching comments HTTP 400, response time 111ms, retrying
Error fetching comments HTTP 400, response time 113ms, retrying
Error fetching comments HTTP 400, response time 111ms, retrying
Error fetching comments HTTP 400, response time 103ms, retrying
Error fetching comments HTTP 400, response time 102ms, retrying

相反,按时间排序时,nextPageToken的长度最多为200个字符,并且响应时间非常稳定。