Open In App

Youtube Data API Playlist | Set-2

Improve
Improve
Like Article
Like
Save
Share
Report

We already have discussed first two methods for a Playlist – to list all Playlist associated with a Channel Id, To retrieve my Playlist i.e. playlist of authorized user’s account.

Now, we will be discussing three more methods: Insert a Playlist, Update a Playlist and Delete a Playlist. This means we can just use the API to insert or we can say create a new playlist and then we can use the API only to upload the video to the Playlist or we can give rating to a video to add it to the desired playlist.
Now we can derive a correlation, by looking at how things are interconnected and how all the operations can be done using the API. All you need is the valid set of credentials to authorize the access. All of these methods require user authorization, so we will be discussing first how to create a OAuth Credential and then we will look at the implementation of the functions.

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

  1. Go to Google Google Developers Console and Click on Sign In in the upper rightmost corner of the page. Sign In using the credentials of the valid Google Account. If you don’t have a google account, setup a account first and then use the details to Sign In on the Google Developers Homepage.
  2. Now navigate to the Developer Dashboard and create a new Project.
  3. Click on Enable API option.
  4. In the search field, search for Youtube Data API and select the Youtube Data API option that comes in the drop down list.
  5. You will be redirected to a screen that says information about the Youtube Data API, along with two options : ENABLE and TRY API.
  6. Click on ENABLE option to get started with the API.
  7. In the sidebar under APIs & Services, select Credentials.
  8. At the top of the page, select the OAuth consent screen tab. Select an Email address, enter a Product name if not already set, and click the Save button.
  9. In the Credentials tab, select the Create credentials drop-down list, and choose OAuth Client Id. OAuth is generally used where authorization is required like in the case of retrieving liked videos of a user.
  10. Select the application type Other, enter the name “YouTube Data API Myvideos”, and click the Create button and click OK.
  11. Click on Download button to the right of the client Id to download the JSON file.
  12. Save and rename the file as client_secret.json and move it to the working directory.

Install additional libraries using the pip command:

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

Code to Insert a Playlist: This example show how to insert/ create a playlist in the authorized user’s account. snippet.title is the mandatory property while creating a new playlist. Other’s are optional.




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_insert(client, properties, **kwargs):
    resource = build_resource(properties)
    kwargs = remove_empty_kwargs(**kwargs)
    response = client.playlists().insert(
        body=resource,
        **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_insert(client,
        {'snippet.title':'Information Security',
        'snippet.description':'This playlist contains videos \
                   related to Information Security and Privacy \
                   and Security in Online Social Media',
                     
        'snippet.tags[]':'',
        'snippet.defaultLanguage':'EN',
        'status.privacyStatus':''},
        part='snippet,status',
        onBehalfOfContentOwner='')


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.

From the above output, you can see that there is a new playlist in my account having the same title and description as mentioned in the code with no videos added.
We can add the videos to the playlist as per your choice either through code or manually from youtube or you can also rate a video to add it to the playlist.
Note: One can view the list of playlist that you own from the Library Menu available by clicking on the top right icon on youtube page of your initial and then going to the first option registered email id. This will show you the Library Option in the leftmost vertical menu. Library lists all the playlists in your account.

Code to Update a Playlist: This example shows you how to update a playlist attribute like Title, Description or privacy status. The id and snippet.title are mandatory properties, all other properties are optional.




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_updateproperties(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__':
    # 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_updateproperties(client, 
        {'id': 'PLqAJNJC4tCYs2-uG-AqaqHAIJzm_1FEtY',
        'snippet.title': 'Information Security',
        'snippet.description': 'This playlist contains videos on\
                    topics of Information Security and Privacy and \
                    Security in Online Social Media',
                      
        'snippet.tags[]': '',
        'status.privacyStatus': 'public'},
        part='snippet,status',
        onBehalfOfContentOwner='')


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.

If you compare the snapshot of the playlist from the previous and this output, You can see that I have updated the Description and privacy status of the playlist.

Code to Delete the Playlist: Now it’s time to delete the playlist that we have created in the first example.




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_delete(client, **kwargs):
    kwargs = remove_empty_kwargs(**kwargs)
    response = client.playlists().delete(**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_delete(client,
        id ='PLqAJNJC4tCYs2-uG-AqaqHAIJzm_1FEtY',
        onBehalfOfContentOwner ='')


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.

Now if you have a look at the Library menu in the youtube, You will see that the playlist does not exist anymore and it has been successfully deleted.

Please have a look at the complete documentation of Youtube Data API Playlists for the complete list of attributes/ properties.

References:

  1. https://developers.google.com/youtube/v3/docs/playlists/delete
  2. https://developers.google.com/youtube/v3/docs/playlists/insert
  3. https://developers.google.com/youtube/v3/docs/playlists/update


Last Updated : 30 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads