Youtube Data API Subscription | Set-2

Prerequisite: Youtube Data API Subscription | Set-1

Now we will be discussing remaining two methods to list subscriptions i.e. to list subscriptions for authorized user’s account and to check whether a subscription exists or not.

Code to list subscriptions for authorized user’s account:
This example shows how to retrieve the list of subscriptions associated with one’s own account.



Note: This method mandatorily requires user authorization.

filter_none

edit
close

play_arrow

link
brightness_4
code

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.
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)
  
# 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_list_my_subscriptions(client, **kwargs):
  
  kwargs = remove_empty_kwargs(**kwargs)
  response = client.subscriptions().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()
    
  subscriptions_list_my_subscriptions(client,
    part ='snippet, contentDetails',
    mine = True,
    maxResults = 2)

chevron_right


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.

We have set the mine property to True value. From the output it is clear that there are 38 subscriptions and since I have declared maxResults attribute to be 2, so it is displaying only 2 results.

Code to check whether a subscription exists or not:
This example shows whether a subscription exists or not. This example shows whether the authorizing user subscribes to the channel identified by the forChannelId parameter. To check whether another channel subscribes to the channel specified in forChannelId parameter remove mine parameter and replace it with channelId parameter.:

filter_none

edit
close

play_arrow

link
brightness_4
code

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_list_for_channel_id(client, **kwargs):
  kwargs = remove_empty_kwargs(**kwargs)
  response = client.subscriptions().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()
    
  subscriptions_list_for_channel_id(client,
    part ='snippet, contentDetails',
    forChannelId ='UC_x5XG1OV2P6uZZ5FSM9Ttw',
    mine = True)

chevron_right


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.

Since the totalResults parameter has value 1, this means that the authorizing user subscribed to the specified channel

 
References: https://developers.google.com/youtube/v3/docs/subscriptions



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.