youtube api v3 возвращает меньше результатов, чем объекты - PullRequest
1 голос
/ 02 июля 2019

API-интерфейс YouTube возвращает меньше комментариев, чем сущностей.

ex> общее количество реальных комментариев: 103 комментария

возвращено количество комментариев API-интерфейса YouTube: 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 комментариев.поэтому, я думаю, что я могу получить все комментарии независимо от мягкого ограничения API YouTube.

1 Ответ

1 голос
/ 02 июля 2019

Обратите внимание на тот факт, что, что касается видео-комментариев, API структурирует их в две категории и делает их доступными через две конечные точки: CommentThreads и Комментарии .

Согласно документации (выделено мое):

Ресурс commentThread не обязательно содержит все ответы на комментарий , и вы необходимо использовать метод comments.list , если вы хотите получить все ответы для конкретного комментария.Также обратите внимание, что на некоторые комментарии нет ответов.

Если говорить более подробно, список replies.comments[] не содержит всех комментариев (опять-таки, мой акцент):

Список из одного или нескольких ответов на комментарий верхнего уровня.Каждый элемент в списке является ресурсом комментариев.

Список содержит ограниченное количество ответов , и если количество элементов в списке не равно значению свойства snippet.totalReplyCount, список ответов является лишь подмножеством общего количества ответов , доступных для комментария верхнего уровня.

Поэтому я считаю, что API работает нормально.На любой странице видео на YouTube - например, GazFsfcijXQ - отображается счетчик комментариев, который накапливает количество комментариев верхнего уровня и количество комментариев-ответов.

...