youtube api v3返回的结果少于实体

时间:2019-07-02 08:03:35

标签: python youtube-api youtube-data-api

youtube api返回的评论结果少于实体。

ex>实际评论总数:103条评论

由youtube api返回的评论数:86条评论
(第一页评论的总和:50,第二页评论的总和:36)

我得到第一页评论,然后输入“ nextpageToken”来获得下一页评论。但api返回的值小于50(要求的maxResults)。 甚至在视频中,总评论是103条评论。

这是一种错误吗?

我使用了youtube api.commentThreads()。list

import os
import googleapiclient.discovery

def main():
     # Disable OAuthlib's HTTPS verification when running locally.
     # *DO NOT* leave this option enabled in production.
     os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

     api_service_name = "youtube"
     api_version = "v3"
     DEVELOPER_KEY = "YOUR_API_KEY"
     youtube = googleapiclient.discovery.build(
     api_service_name, api_version, developerKey = DEVELOPER_KEY)

     request = youtube.commentThreads().list(
        part="snippet",
        maxResults=50,
        videoId="GazFsfcijXQ"
    )
    response = request.execute()

    print(response)

if __name__ == "__main__":
    main()
#######第一个结果的一部分
{
 "kind": "youtube#commentThreadListResponse",
 "etag": "\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/lHjDTm_13OMmcHL6osO0eXmp450\"",
 "nextPageToken": "QURTSl9pMDRyOS1NcXNhbEwxeVlIVThfY1Q0RGFxaGFkNVRmREM3YmxOUGw4ZXpfUjd3Z1JxYWwxT19GQ180Nm1OMFdGbmJlX2lNV2hrODk4OGlMM0ZNTUVOeTUtbkFqbWU3Smd5aXhDRk9oc2t0SUpZdlJ3bGxOME1ldE5HUncxNmc=",
 "pageInfo": {
  "totalResults": 50,
  "resultsPerPage": 50
 },

并且我将相同的代码与nextpagetoken一起使用。

  nextpageToken="QURTSl9pMU5ISGYyUkpxWmRzSnBRejJjUXpRYVVNQ1RTZThrNnMzUUV0X1NyYUtXNmkyb1lxeXhqaVBSRnhqNGlCYXZ4bkNlNTVoZEtTVVNIcklURVlXWWkwSU9pZ2lBXy1ILUtNcDhsX2dub1ZPSGJuWkttYXRPaURvRXV4MGdBMWs="

def main():
    # Disable OAuthlib's HTTPS verification when running locally.
    # *DO NOT* leave this option enabled in production.
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"
    DEVELOPER_KEY = "YOUR_API_KEY"
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey = DEVELOPER_KEY)

    request = youtube.commentThreads().list(
        part="snippet",
        maxResults=50, 
        pageToken = nextpageToken,
        videoId="GazFsfcijXQ",
    )
    response = request.execute()

    print(response)

if __name__ == "__main__":
    main()
########第二个结果的一部分
    {
 "kind": "youtube#commentThreadListResponse",
 "etag": "\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/LXcTjLwg3AUlu8RNlb7nbrei05A\"",
 "pageInfo": {
  "totalResults": 36,
  "resultsPerPage": 50
 },

我希望视频有所有评论。 评论数少于100〜200条评论。 因此,我认为无论youtube api的软限制如何,我都能获得所有评论。

1 个答案:

答案 0 :(得分:1)

请注意以下事实:对于视频评论,API将它们分为两类,并使其可以通过两个端点访问:CommentThreadsComments

根据documentation(强调是我的):

  

commentThread资源不一定包含对评论的所有回复,并且如果要检索以下内容的所有回复,则需要使用comments.list 方法一个特别的评论。另外请注意,有些评论没有回复。

更明确地指出,replies.comments[]列表不包含所有注释(再次强调是我的):

  

一个或多个对顶级评论的回复列表。列表中的每个项目都是评论资源。

     

列表包含有限数量的答复,除非列表中的项目数等于snippet.totalReplyCount属性的值,否则答复列表只是以下内容的子集顶级评论可用的回复总数

因此,我认为该API工作正常。任何YouTube视频页面-例如GazFsfcijXQ-显示一个评论计数器,用于累计顶级评论的数量和回复评论的数量。