Open In App

Youtube Data API Playlist | Set-1

After covering all types of search and video methods, we will be discussing in this article about Playlist. Everyone must be knowing what playlist is in Youtube. There are two ways to retrieve the playlist using Youtube Data API: 

We will discuss these methods in detail with full code and output. 



Follow the steps below to generate a Client Id and a Secret Key. 



Install additional libraries using the pip command:  

pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2

Note: One thing that we forgot to discuss is how to find the channel Id to use it as a parameter in the first code – to lists all playlists associated with a Youtube Channel Id. 

Follow the steps below to find the channel Id:  

Code to retrieve all playlists: This example shows how to retrieve all playlists owned by a Youtube Channel identified by the channeled mentioned in the parameter list. 




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
 
# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# client_id and client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"
 
# This scope allows for full read/write
# access to the authenticated user's account
# and requires requests to use an SSL connection.
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)
 
# Build a resource based on a list of
# properties given as key-value pairs.
# Leave properties with empty values out
# of the inserted resource.
def build_resource(properties):
  resource = {}
  for p in properties:
    # Given a key like "snippet.title", split into
    # "snippet" and "title", where
    # "snippet" will be an object and "title"
    # will be a property in that object.
    prop_array = p.split('.')
    ref = resource
    for pa in range(0, len(prop_array)):
      is_array = False
      key = prop_array[pa]
 
      # For properties that have array values,
      # convert a name like "snippet.tags[]" to
      # snippet.tags, and set a flag to handle
      # the value as an array.
      if key[-2:] == '[]':
        key = key[0:len(key)-2:]
        is_array = True
 
      if pa == (len(prop_array) - 1):
        # Leave properties without values
        # out of inserted resource.
        if properties[p]:
          if is_array:
            ref[key] = properties[p].split(', ')
          else:
            ref[key] = properties[p]
      elif key not in ref:
        # For example, the property is "snippet.title", but the resource does
        # not yet have a "snippet" object. Create the snippet object here.
        # Setting "ref = ref[key]" means that in the next time through the
        # "for pa in range ..." loop, we will be setting a property in the
        # resource's "snippet" object.
        ref[key] = {}
        ref = ref[key]
      else:
        # For example, the property is "snippet.description",
        # and the resource already has a "snippet" object.
        ref = ref[key]
  return resource
 
# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
  good_kwargs = {}
  if kwargs is not None:
    for key, value in kwargs.items():
      if value:
        good_kwargs[key] = value
  return good_kwargs
 
def playlists_list_by_channel_id(client, **kwargs):
  kwargs = remove_empty_kwargs(**kwargs)
 
  response = client.playlists().list(*kwargs).execute()
 
  return print_response(response)
 
 
if __name__ == '__main__':
  # When running locally, disable OAuthlib's
  # HTTPs verification. When running in production
  # * do not * leave this option enabled.
  os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
  client = get_authenticated_service()
   
  playlists_list_by_channel_id(client,
    part ='snippet, contentDetails',
     
    # Replace with your Youtube Channel Id
    channelId ='UCqoMU8lNdUq63ZmTJFd620b',
    maxResults = 25)
  

Output:
When you will execute the code you will be asked for the authorization code. For getting the code you need to follow the link mentioned in the command prompt screen above the line: Enter the Authorization code. 

Now follow the link and copy paste the authorization code that you will get by granting the permission. 

Code to list My Playlist: This example show how to print the authorized user’s playlists. It uses mine parameter to show that API should only print Playlists from the Youtube channel of the user authorizing the requests. 




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
 
# The CLIENT_SECRETS_FILE variable specifies
# the name of a file that contains
# client_id and client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"
 
# This scope allows for full read/write
# access to the authenticated user's account
# and requires requests to use an SSL connection.
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)
 
# Build a resource based on a list of
# properties given as key-value pairs.
# Leave properties with empty values
# out of the inserted resource.
def build_resource(properties):
resource = {}
for p in properties:
    # Given a key like "snippet.title", split
    # into "snippet" and "title", where
    # "snippet" will be an object and "title"
    # will be a property in that object.
    prop_array = p.split('.')
    ref = resource
    for pa in range(0, len(prop_array)):
    is_array = False
    key = prop_array[pa]
 
    # For properties that have array values, convert a name like
    # "snippet.tags[]" to snippet.tags, and set a flag to handle
    # the value as an array.
    if key[-2:] == '[]':
        key = key[0:len(key)-2:]
        is_array = True
 
    if pa == (len(prop_array) - 1):
        # Leave properties without values out of inserted resource.
        if properties[p]:
        if is_array:
            ref[key] = properties[p].split(', ')
        else:
            ref[key] = properties[p]
    elif key not in ref:
        # For example, the property is "snippet.title",
        # but the resource does not yet have a "snippet"
        # object. Create the snippet object here.
        # Setting "ref = ref[key]" means that in the
        # next time through the "for pa in range ..." loop,
        # we will be setting a property in the
        # resource's "snippet" object.
        ref[key] = {}
        ref = ref[key]
    else:
        # For example, the property is
        # "snippet.description", and the resource
        # already has a "snippet" object.
        ref = ref[key]
return resource
 
# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
good_kwargs = {}
if kwargs is not None:
    for key, value in kwargs.items():
    if value:
        good_kwargs[key] = value
return good_kwargs
 
def playlists_mine(client, **kwargs):
kwargs = remove_empty_kwargs(**kwargs)
 
response = client.playlists().list(**kwargs).execute()
 
return print_response(response)
 
 
if __name__ == '__main__':
     
# When running locally, disable OAuthlib's
# HTTPs verification. When
# running in production * do not *
# leave this option enabled.
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
client = get_authenticated_service()
 
playlists_mine(client,
    part ='snippet, contentDetails',
    mine = True,
    maxResults = 10,
    onBehalfOfContentOwner ='',
    onBehalfOfContentOwnerChannel ='')
  

Output:
When you will execute the code you will be asked for the authorization code. For getting the code you need to follow the link mentioned in the command prompt screen above the line: Enter the Authorization code. 

Now follow the link and copy paste the authorization code that you will get by granting the permission. 

As you can see from the output there are 2 Playlists in the authorized user’s account i.e. in my account there are two playlists. This is evident from the total results parameter. By analyzing the output you can also find the Playlist Id i.e. associated with each playlist as a Unique Identification.

Note: Please refer to the complete list of properties associated with the Playlist.list() method. Feel free to try with different values for the properties.

References: 

  1. https://developers.google.com/youtube/v3/docs/playlists/list
  2. https://support.google.com/youtube/answer/3250431?hl=en

Article Tags :