В предыдущем видео про работу с YouTube API на Python я получил API Key, с которым уже можно работать с этим апи. С ним можно уже получать какую-то общедоступную информацию — лайки, просмотры, описания как каналов так и видео. Однако если я хочу загружать и/или изменять видео и/или канал, то мне нужно заморочиться с OAuth авторизацией.
Что такое OAuth авторизация в контексте YouTube API и зачем она если есть API Key
У каждой сущности в рамках API, будь то канал, видео или комментарий есть владелец который может эту сущность создавать, изменять или удалять. Мое приложение может быть инструментом позволяющим изменять эти сущности разным владельцам. Каждый владелец должен осознанно разрешить моему приложению делать строго определенный и ограниченный набор действий с принадлежащими ему сущностями. Для этого и нужна OAuth авторизация.
Порядок действий здесь таков:
- в консоли Google Cloud Platform я должен подготовить страницу Соглашения с Пользователем (Consent Screen), где я должен описать что у меня за приложение и указать контакты админа. Пользователь должен иметь возможность идентифицировать мое приложение, чтобы осознанно решить давать ему права или нет.
- получить в консоли OAuth Client ID. На одно приложение в рамках Google Cloud Platform, с одним API Key может быть выдано множество Client ID. Например для того чтобы наше приложение могло работать и на десктопе, и в вебе и на андроиде, а мы могли рулить этими айдишками по мере необходимости.
- из приложения на Python, используя полученный Client ID я запрашиваю необходимые разрешения (указанные в SCOPES) у пользователя
- сохраняю ответ пользователя — creds
- использую полученные разрешения для работы с Google API от лица пользователя
Подробности и скринкаст в видео
Код скрипта на Python
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 |
import json import os 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 ''' !!!! Usefull links !!!!! https://github.com/googleapis/google-api-python-client https://developers.google.com/docs/api/quickstart/python https://github.com/youtube/api-samples https://developers.google.com/youtube/v3/docs https://developers.google.com/youtube/v3/determine_quota_cost ''' API_KEY = '*********' APP_TOKEN_FILE = "client_secret.json" USER_TOKEN_FILE = "user_token.json" # https://developers.google.com/identity/protocols/oauth2/scopes#youtube SCOPES = [ 'https://www.googleapis.com/auth/youtube.force-ssl', 'https://www.googleapis.com/auth/userinfo.profile', # 'https://www.googleapis.com/auth/youtube.upload', # 'https://www.googleapis.com/auth/userinfo.email' ] ''' Ask from console ''' def get_creds_cons(): flow = InstalledAppFlow.from_client_secrets_file(APP_TOKEN_FILE, SCOPES) return flow.run_console() ''' Reusebale user OAuth2 token ''' def get_creds_saved(): # https://developers.google.com/docs/api/quickstart/python creds = None if os.path.exists(USER_TOKEN_FILE): creds = Credentials.from_authorized_user_file(USER_TOKEN_FILE, SCOPES) # If there are no (valid) credentials available, let the user log in. 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(APP_TOKEN_FILE, SCOPES) creds = flow.run_local_server(port=0) with open(USER_TOKEN_FILE, 'w') as token: token.write(creds.to_json()) return creds ''' Get YouTube API service w API Key only ''' def get_service(): #creds = get_creds_cons() creds = get_creds_saved() service = build('oauth2', 'v2', credentials=creds) return service ''' Get User Info ''' def get_user_info(channel_id = 'UCf6kozNejHoQuFhBDB8cfxA'): r = get_service().userinfo().get().execute() print(json.dumps(r)) if __name__ == '__main__': print("** Hola Hey, Azzrael_YT subs!!!\n") get_user_info() |
Полезные ссылки
- https://github.com/googleapis/google-api-python-client
- https://developers.google.com/docs/api/quickstart/python
- https://github.com/youtube/api-samples
- https://developers.google.com/youtube/v3/docs
- https://developers.google.com/youtube/v3/determine_quota_cost
- https://developers.google.com/docs/api/quickstart/python
- https://developers.google.com/identity/protocols/oauth2/scopes#youtube