如何更新播放列表中的所有YouTube视频说明?

时间:2018-04-21 13:10:33

标签: python python-3.x youtube-api youtube-data-api google-console-developer

我创建了一个client_secrets.json文件,并编写了我从google api控制台获得的所有必填字段。现在我有一个测试播放列表,对该播放列表中的所有视频都有相同的描述,我想更新该播放列表,并使用python代码更改它的描述。 我已经复制了开发人员谷歌提供的这个链接https://developers.google.com/youtube/v3/docs/playlists/update#usage中的代码,现在我不知道接下来的步骤是什么,因为我不熟悉python编程。任何人都可以指导我运行此程序并更新播放列表说明 在此先感谢

这是我复制的代码

import os

import google.oauth2.credentials

import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow

CLIENT_SECRETS_FILE = "client_secrets.json"

SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
API_SERVICE_NAME = 'youtube'
API_VERSION = 'v3'

def get_authenticated_service():
  flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
  credentials = flow.run_console()
  return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)

def print_response(response):
  print(response)

def build_resource(properties):
  resource = {}
  for p in properties:
    prop_array = p.split('.')
    ref = resource
    for pa in range(0, len(prop_array)):
      is_array = False
      key = prop_array[pa]

      if key[-2:] == '[]':
        key = key[0:len(key)-2:]
        is_array = True

      if pa == (len(prop_array) - 1):
        if properties[p]:
          if is_array:
            ref[key] = properties[p].split(',')
          else:
            ref[key] = properties[p]
      elif key not in ref:
        ref[key] = {}
        ref = ref[key]
      else:
        ref = ref[key]
  return resource

def remove_empty_kwargs(**kwargs):
  good_kwargs = {}
  if kwargs is not None:
    for key, value in kwargs.iteritems():
      if value:
        good_kwargs[key] = value
  return good_kwargs

def playlists_update(client, properties, **kwargs):
  resource = build_resource(properties)

  kwargs = remove_empty_kwargs(**kwargs)

  response = client.playlists().update(
    body=resource,
    **kwargs
  ).execute()

  return print_response(response)


if __name__ == '__main__':
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
  client = get_authenticated_service()

  playlists_update(client, 
    {'id': '',
     'snippet.title': '',
     'snippet.description': '',
     'snippet.tags[]': '',
     'status.privacyStatus': ''},
    part='snippet,status',
    onBehalfOfContentOwner='')

1 个答案:

答案 0 :(得分:0)

我无法找到直接解决方案。 但经过一些研究,我可以给你以下指示。

  1. 上述代码段仅用于管理播放列表数据,而不管理播放列表中的视频。您只能按照文档中的说明更改播放列表的数据。
  2. 以下是您可以尝试获得结果的一些内容。
    • 尝试使用这些方法PlaylistItems来获取播放列表中的项目,即视频。
    • 然后,您可以使用Videos更改给定视频的属性,就像在案例描述中一样。
  3. 根据我的说法,地图看起来像这样

    1. 从所需的播放列表中获取项目列表
    2. 迭代列表
    3. 选择每个视频并更新其数据
    4. 就我而言,似乎没有直接的方法。