from __future__ import print_function import os import json from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.errors import HttpError from pprint import pprint SCOPES = ["https://www.googleapis.com/auth/youtube"] def authorize(): creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=7384) with open('token.json', 'w') as token: token.write(creds.to_json()) return creds def construct_youtube_service(creds): return build('youtube', 'v3', credentials=creds) def list_all_video_categories(youtube_service): category_list = youtube_service.videoCategories().list( part="snippet", regionCode="US" ).execute() return [ { "name": element["snippet"]["title"], "id": element["id"] } for element in category_list["items"] if element["snippet"]["assignable"] ] def main(): creds = authorize() youtube_service = construct_youtube_service(creds) category_data = list_all_video_categories(youtube_service) print(json.dumps(category_data, indent=4)) if __name__ == '__main__': main()