首页 > 解决方案 > 我不明白 playlistItems.list() 的响应

问题描述

所以......我试图在我的 youtube 频道的上传播放列表上执行 playlistItems.list() 。它包含 4 个公开视频和 1 个不公开视频。我将函数的输出发送到终端输出。

它首先向我展示了这一点,

{'totalResults': 4, 'resultsPerPage': 5}

然后它向我展示了这个,(据我了解)是 3 个结果。

    [{'kind': 'youtube#playlistItem', 'etag':'"Dn5xIderbhAnUk5TAW0qkFFir0M/kbeAdMJuuMJKybAoShHt15UMefc"', 'id': 'VVV2aFJQcHFQSDBiMmRNT2E5bVp5MlVRLlRJc2QwTHJfN1Fr', 'contentDetails': {'videoId': 'TIsd0Lr_7Qk', 'videoPublishedAt': '2018-11-21T08:43:00.000Z'}}, 
{'kind': 'youtube#playlistItem', 'etag': '"Dn5xIderbhAnUk5TAW0qkFFir0M/wxIHQJwj6qBP1-axGt0aWmRpo6Y"', 'id': 'VVV2aFJQcHFQSDBiMmRNT2E5bVp5MlVRLjJHSm5ZbGJwZmRB', 'contentDetails': {'videoId': '2GJnYlbpfdA', 'videoPublishedAt': '2017-11-06T11:47:47.000Z'}}, 
{'kind': 'youtube#playlistItem', 'etag': '"Dn5xIderbhAnUk5TAW0qkFFir0M/pc9Jwgp5y3BrdjT85I6MOdggEpo"', 'id': 'VVV2aFJQcHFQSDBiMmRNT2E5bVp5MlVRLlBvMkhsVXVfNE1n', 'contentDetails': {'videoId': 'Po2HlUu_4Mg', 'videoPublishedAt': '2017-10-01T09:03:53.000Z'}}]

缺少的视频是未列出的(我不知道它是否输出此视频)和最近的公开视频。两个视频都在终端列出的视频之后发布/上传

如果需要,播放列表 ID 是 UUvhRPpqPH0b2dMOa9mZy2UQ。

这是代码

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
import os
import pygame

CLIENT_SECRET_FILE = 'client_secret.json'
SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
credentials = flow.run_console()
auth = build('youtube', 'v3', credentials=credentials)

api_key = "..."
oldId = "TIsd0Lr_7Qk"
chId = 'UCvhRPpqPH0b2dMOa9mZy2UQ'
youtube = build('youtube', 'v3', developerKey=api_key)


def insert_comment(auth, channel_id, video_id, text):
  insert_result = auth.commentThreads().insert(
    part="snippet",
    body=dict(
      snippet=dict(
        channelId=channel_id,
        videoId=video_id,
        topLevelComment=dict(
          snippet=dict(
            textOriginal=text
          )
        )
      )
    )
  ).execute()
  comment = insert_result["snippet"]["topLevelComment"]
  author = comment["snippet"]["authorDisplayName"]
  text = comment["snippet"]["textDisplay"]
  print("Inserted comment for %s: %s" % (author, text))


def get_channel_videos(channel_id):
   res = youtube.channels().list(id=channel_id,part='contentDetails').execute()
   playlist_id = res['items'][0]['contentDetails']['relatedPlaylists']['uploads']
   print(playlist_id)

   res = youtube.playlistItems().list(playlistId = playlist_id,part ='contentDetails', maxResults = 5).execute()
   for item in res:
       print(res[item])
   newId = res['items'][0]['contentDetails']['videoId']
   return newId


while True:
    newId = get_channel_videos(chId)
    print(newId)
    if newId != oldId:
        break

print("exit")
insert_comment(auth, chId, newId, "First!")

标签: google-apiyoutube-data-api

解决方案


推荐阅读