How to update all Youtube videos description in a playlist?
Asked Answered
B

1

8

I have created a client_secrets.json file and written all the required fields that I got from Google API's console. Now I have a test playlist which have same description on all the videos in that playlist and I want to update that playlist with changing the description of it using Python code. I have copied the code from this link https://developers.google.com/youtube/v3/docs/playlists/update#usage provided by developers google and now I don't know what are the next steps to continue as I am new to Python programming. Can anyone guide me to run this program and update the playlists description.

Thanks in Advance

Here is the code that I have copied

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='')
Buddy answered 21/4, 2018 at 13:10 Comment(0)
S
0

I was unable to find a direct solution. But after some research i can give you following pointers.

  1. The snippet mentioned above is used to manage only the playlist data and not the videos within the playlist. You can change the data of the playlist only as mentioned in the docs.
  2. Here are few things that you can try to get the result.
    • Try using these methods instead PlaylistItems to get the Items in the playlist i.e. the videos.
    • Then you can use Videos to change the property of a given video like in your case description.

According to me the map looks like this

  1. Get the list of items from the required playlist
  2. Iterate over the list
  3. Select each video and update its data

It seems like there is no direct way as far as my knowledge.

Seamus answered 27/4, 2018 at 16:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.