Prerequisite: Youtube Data API | Set-1
In the previous article we have discussed first two variants of search method. Now let’s discuss the remaining three- Search Live Events, Search Related Videos and Search My Videos.
Search by Live Events:
Given example retrieves top 5 live broadcasts associated with the query string Python Programming. type parameter
must be set to the value video only.
eventType
parameter can take any value from given set of values- completed (this will include only completed broadcasts), live (this will include only active broadcasts), upcoming (this will include only upcoming broadcasts).
from apiclient.discovery import build # Arguments that need to passed to the build function DEVELOPER_KEY = "Your_API_Key" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" # creating Youtube Resource Object youtube_object = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey = DEVELOPER_KEY) def youtube_search_location(query, max_results = 2 ): # calling the search.list method to # retrieve youtube search results search_location = youtube_object.search(). list (q = query, type = 'video' , eventType = 'live' , part = "id, snippet" , maxResults = max_results).execute() # extracting the results from search response results = search_location.get( "items" , []) # empty list to store video metadata videos = [] # extracting required info # from each result object for result in results: # video result object if result[ 'id' ][ 'kind' ] = = "youtube# video" : videos.append( "% s (% s) (% s) (% s)" % (result[ "snippet" ][ "title" ], result[ "id" ][ "videoId" ], result[ 'snippet' ][ 'description' ], result[ 'snippet' ][ 'thumbnails' ][ 'default' ][ 'url' ])) print ( "Videos:\n" , "\n" .join(videos), "\n" ) if __name__ = = "__main__" : youtube_search_location( 'Social Media' , max_results = 2 ) |
Output:
Search by Related To video: This will help to retrieve videos related to the video specified by the Video Id in the parameter list. type parameter
can only take value video.
from apiclient.discovery import build # Arguments that need to passed # to the build function DEVELOPER_KEY = "Your_API_Key" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" # creating Youtube Resource Object youtube_object = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey = DEVELOPER_KEY) def youtube_search_relatedto(max_results = 2 ): # calling the search.list method to # retrieve youtube search results search_relatedto = youtube_object.search(). list ( type = 'video' , relatedToVideoId = 'X06Vml-8X8A' , part = "id, snippet" , maxResults = max_results).execute() # extracting the results from search response results = search_relatedto.get( "items" , []) # empty list to store video metadata videos = [] # extracting required info from each result object for result in results: # video result object if result[ 'id' ][ 'kind' ] = = "youtube# video" : videos.append( "% s (% s) (% s) (% s)" % (result[ "snippet" ][ "title" ], result[ "id" ][ "videoId" ], result[ 'snippet' ][ 'description' ], result[ 'snippet' ][ 'thumbnails' ][ 'default' ][ 'url' ])) print ( "Videos:\n" , "\n" .join(videos), "\n" ) if __name__ = = "__main__" : youtube_search_relatedto(max_results = 2 ) |
Output:
Search My Videos: This example search for the videos matching with keyword “Geeksforneveropen” in authorized user’s account. forMine
parameter indicates that the search should be done within the authorized user’s account. type
parameter must also be set to video. Since this method requires user’s authentication so we will be creating OAuth
type of credential for this example. Follow the steps below to generate a Client Id and a Secret Key.
- 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.
- Now navigate to the Developer Dashboard and create a new Project.
- Click on Enable API option.
- In the search field, search for Youtube Data API and select the Youtube Data API option that comes in the drop down list.
- You will be redirected to a screen that says information about the Youtube Data API, along with two options : ENABLE and TRY API.
- Click on ENABLE option to get started with the API.
- In the sidebar under APIs & Services, select Credentials.
- 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.
- 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.
- Select the application type Other, enter the name “YouTube Data API Myvideos”, and click the Create button.
- Click OK.
- Click on Download button to the right of the client Id to download the JSON file.
- 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
# importing libraries 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: ref[key] = {} ref = ref[key] else : 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 search_list_forMine(client, * * kwargs): kwargs = remove_empty_kwargs( * * kwargs) response = client.search(). 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() search_list_forMine(client, part = 'snippet' , maxResults = 5 , forMine = True , q = 'Geeksforneveropen' , type = 'video' ) |
Output:
While executing the code, it will ask 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 we don’t have any uploaded videos in this account, so the total results value is 0. Output screen looks like this:
Please refer to the Youtube Data API Documentation(search.list()) for the complete list of parameters that are possible.
References: