Sunday, November 17, 2024
Google search engine
HomeLanguagesYoutube Data API Subscription | Set-3

Youtube Data API Subscription | Set-3

In the previous articles Youtube Data API Subscription | Set 1, Set 2 we have discussed three methods-

  • To retrieve the list of subscriptions associated with a channel Id
  • To retrieve my subscriptions i.e. associated with authorized user’s account
  • To check whether a subscription exist or not.

In this article we will be discussing following two methods –

  • To Insert a Subscription
  • To Delete a Subscription

Before proceeding further we will be first discussing how to generate OAuth Credential. 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 then 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

Note: We need to know the Channel Id for inserting and deleting the subscription. Follow the steps below to find the channel Id:

  1. Sign in to your Youtube Account.
  2. Browse a channel you want to subscribe to.
  3. Click and Open the Channel. In the URL you will see the Channel Id after the keyword channel/

Code to Insert a Subscription: This example shows how to insert a subscription in an Youtube Channel identified by the Channel Id provided in the parameter list. You can change the subscription by changing the snippet.resourceId.channelId property. This example adds a subscription to Derek Banas channel.




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 subscriptions_insert(client, properties, **kwargs):
  resource = build_resource(properties)
  kwargs = remove_empty_kwargs(**kwargs)
  
  response = client.subscriptions().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()
    
  subscriptions_insert(client, 
    {'snippet.resourceId.kind': 'youtube# channel',
     'snippet.resourceId.channelId': 'UCwRXb5dUK4cvsHbx-rGzSgw'},
    part ='snippet')


Output:
While executing 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 see, from the above output it is clear that I have successfully subscribed to the channel.

Code to Delete a Subscription: This example shows how to delete a subscription. The id parameter is the subscription id i.e. you can note down from the command prompt at the time of inserting the subscription or alternatively you can run the code to list all subscriptions and note down the subscription id of the desired subscription. In this example I am deleting the subscription that I have added in the code discussed above.




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 subscriptions_delete(client, **kwargs):
  kwargs = remove_empty_kwargs(**kwargs)
  response = client.subscriptions().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()
    
  subscriptions_delete(client,
    id ='AP1TRjqBsvvxCyjQuHtwgyzj5rqdRr1YQFrBIp0pPvU')


Output:
While executing 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.

You can see from the above output, The Channel is again showing the option to subscribe.

References:

  1. https://developers.google.com/youtube/v3/docs/subscriptions
  2. https://developers.google.com/youtube/v3/docs/
RELATED ARTICLES

Most Popular

Recent Comments