get_token
Скрипт для получения OAuth-токена Яндекс Умного дома.
Выполняет OAuth-авторизацию: открывает браузер для подтверждения, запрашивает код и обменивает его на токен доступа.
1#!/usr/bin/env python3 2""" 3Скрипт для получения OAuth-токена Яндекс Умного дома. 4 5Выполняет OAuth-авторизацию: открывает браузер для подтверждения, 6запрашивает код и обменивает его на токен доступа. 7""" 8 9import os 10import sys 11import webbrowser 12 13import requests 14 15CLIENT_ID_ENV = "YANDEX_OAUTH_CLIENT_ID" 16CLIENT_SECRET_ENV = "YANDEX_OAUTH_CLIENT_SECRET" 17 18 19def get_yandex_token( 20 client_id: str | None = None, client_secret: str | None = None 21) -> str | None: 22 """Получает OAuth-токен для Яндекс Умного дома. 23 24 Выполняет двухшаговую OAuth-авторизацию: 25 1. Открывает браузер для получения authorization code. 26 2. Обменивает код на access token. 27 28 Args: 29 client_id: Client ID Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_ID). 30 client_secret: Client Secret Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_SECRET). 31 32 Returns: 33 str: Полученный OAuth-токен или None при ошибке. 34 """ 35 36 client_id = client_id or os.getenv(CLIENT_ID_ENV) 37 client_secret = client_secret or os.getenv(CLIENT_SECRET_ENV) 38 39 if not client_id or not client_secret: 40 print(f"❌ Задайте переменные окружения {CLIENT_ID_ENV} и {CLIENT_SECRET_ENV}") 41 print( 42 " или передайте их аргументами: python get_token.py <client_id> <client_secret>" 43 ) 44 print(" Получить Client ID и Secret: https://oauth.yandex.ru/client/new") 45 return None 46 47 # Шаг 1: Получение authorization code 48 auth_url = ( 49 f"https://oauth.yandex.ru/authorize?" 50 f"response_type=code&" 51 f"client_id={client_id}&" 52 f"force_confirm=yes" 53 ) 54 55 print("1. Открываю браузер для авторизации...") 56 print(f"2. Если браузер не открылся, перейдите по ссылке:\n{auth_url}") 57 webbrowser.open(auth_url) 58 59 print("3. После авторизации вы получите код в адресной строке") 60 print("4. Введите код из адресной строки:") 61 auth_code = input("Код: ").strip() 62 63 # Шаг 2: Обмен code на token 64 token_url = "https://oauth.yandex.ru/token" 65 66 data = { 67 "grant_type": "authorization_code", 68 "code": auth_code, 69 "client_id": client_id, 70 "client_secret": client_secret, 71 } 72 73 try: 74 response = requests.post(token_url, data=data) 75 response.raise_for_status() 76 77 token_data = response.json() 78 access_token = token_data.get("access_token") 79 80 print("✅ Токен получен успешно!") 81 print(f"🔑 Ваш токен: {access_token}") 82 print("\nДобавьте этот токен в .env:") 83 print(f"YANDEX_TOKEN='{access_token}'") 84 85 return access_token 86 87 except requests.exceptions.RequestException as e: 88 print(f"❌ Ошибка при получении токена: {e}") 89 return None 90 91 92if __name__ == "__main__": 93 args = sys.argv[1:] 94 client_id = args[0] if len(args) > 0 else None 95 client_secret = args[1] if len(args) > 1 else None 96 get_yandex_token(client_id, client_secret)
CLIENT_ID_ENV =
'YANDEX_OAUTH_CLIENT_ID'
CLIENT_SECRET_ENV =
'YANDEX_OAUTH_CLIENT_SECRET'
def
get_yandex_token( client_id: str | None = None, client_secret: str | None = None) -> str | None:
20def get_yandex_token( 21 client_id: str | None = None, client_secret: str | None = None 22) -> str | None: 23 """Получает OAuth-токен для Яндекс Умного дома. 24 25 Выполняет двухшаговую OAuth-авторизацию: 26 1. Открывает браузер для получения authorization code. 27 2. Обменивает код на access token. 28 29 Args: 30 client_id: Client ID Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_ID). 31 client_secret: Client Secret Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_SECRET). 32 33 Returns: 34 str: Полученный OAuth-токен или None при ошибке. 35 """ 36 37 client_id = client_id or os.getenv(CLIENT_ID_ENV) 38 client_secret = client_secret or os.getenv(CLIENT_SECRET_ENV) 39 40 if not client_id or not client_secret: 41 print(f"❌ Задайте переменные окружения {CLIENT_ID_ENV} и {CLIENT_SECRET_ENV}") 42 print( 43 " или передайте их аргументами: python get_token.py <client_id> <client_secret>" 44 ) 45 print(" Получить Client ID и Secret: https://oauth.yandex.ru/client/new") 46 return None 47 48 # Шаг 1: Получение authorization code 49 auth_url = ( 50 f"https://oauth.yandex.ru/authorize?" 51 f"response_type=code&" 52 f"client_id={client_id}&" 53 f"force_confirm=yes" 54 ) 55 56 print("1. Открываю браузер для авторизации...") 57 print(f"2. Если браузер не открылся, перейдите по ссылке:\n{auth_url}") 58 webbrowser.open(auth_url) 59 60 print("3. После авторизации вы получите код в адресной строке") 61 print("4. Введите код из адресной строки:") 62 auth_code = input("Код: ").strip() 63 64 # Шаг 2: Обмен code на token 65 token_url = "https://oauth.yandex.ru/token" 66 67 data = { 68 "grant_type": "authorization_code", 69 "code": auth_code, 70 "client_id": client_id, 71 "client_secret": client_secret, 72 } 73 74 try: 75 response = requests.post(token_url, data=data) 76 response.raise_for_status() 77 78 token_data = response.json() 79 access_token = token_data.get("access_token") 80 81 print("✅ Токен получен успешно!") 82 print(f"🔑 Ваш токен: {access_token}") 83 print("\nДобавьте этот токен в .env:") 84 print(f"YANDEX_TOKEN='{access_token}'") 85 86 return access_token 87 88 except requests.exceptions.RequestException as e: 89 print(f"❌ Ошибка при получении токена: {e}") 90 return None
Получает OAuth-токен для Яндекс Умного дома.
Выполняет двухшаговую OAuth-авторизацию:
- Открывает браузер для получения authorization code.
- Обменивает код на access token.
Args: client_id: Client ID Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_ID). client_secret: Client Secret Яндекс OAuth (из переменной YANDEX_OAUTH_CLIENT_SECRET).
Returns: str: Полученный OAuth-токен или None при ошибке.