1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

# 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. 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 videos_list_my_liked_videos (client, **kwargs): kwargs = remove_empty_kwargs(**kwargs) response = client.videos().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() videos_list_my_liked_videos(client, part = 'snippet, contentDetails, statistics' , myRating = 'like' , maxResults = 2 )