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