【问题标题】:youtube api v3 return less results than entitiesyoutube api v3 返回的结果少于实体
【发布时间】:2019-11-12 20:00:25
【问题描述】:

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

ex> 实际 cmets 总数:103 cmets

youtube api 返回的 cmets 数量:86 cmets
(第一页 cmets 的总和:50,第二页:36)

我得到了第一页 cmets,我输入了“nextpageToken”来得到下一页 cmets。但 api 返回少于 50(请求的 maxResults)。 即使视频中的总 cmets 是 103 cmets。

这是一种错误吗?

我使用了 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
 },

我希望视频的所有内容。 cmets的数量小于100~200 cmets。 所以,我认为无论 youtube api 的软限制如何,我都可以获得所有评论。

【问题讨论】:

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


    【解决方案1】:

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

    根据documentation(重点是我的):

    commentThread 资源不一定包含对评论的所有回复,如果您想检索特定回复的所有回复,需要使用comments.list 方法评论。另请注意,有些 cmets 没有回复。

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

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

    列表包含有限数量的回复,除非列表中的项目数等于 sn-p.totalReplyCount 属性的值,回复列表只是一个可用于顶级评论的回复总数的子集

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-08
      • 2019-08-29
      • 2014-07-09
      • 1970-01-01
      • 2017-09-16
      • 2020-01-02
      • 1970-01-01
      • 2019-05-12
      相关资源
      最近更新 更多