Получение токена через Device Flow

Пример получения OAuth-токена через OAuth Device Flow без сторонних инструментов. Метод device_auth блокирующий: он ждёт, пока вы подтвердите вход на странице Яндекса, и возвращает OAuthToken с полями access_token, refresh_token, expires_in, token_type. Сохранять токен (например, в файл или БД) — ответственность вызывающего кода.

from yandex_music import Client


def on_code(code):
    print(f'Откройте {code.verification_url} и введите код: {code.user_code}')
    print(f'Код действителен {code.expires_in} секунд')


client = Client()
token = client.device_auth(on_code=on_code)

print(f'access_token:  {token.access_token}')
print(f'refresh_token: {token.refresh_token}')
print(f'expires_in:    {token.expires_in} сек')

client.init()
print(f'Здравствуйте, {client.me.account.login}!')
import asyncio

from yandex_music import ClientAsync


def on_code(code):
    print(f'Откройте {code.verification_url} и введите код: {code.user_code}')
    print(f'Код действителен {code.expires_in} секунд')


async def main():
    client = ClientAsync()
    token = await client.device_auth(on_code=on_code)

    print(f'access_token:  {token.access_token}')
    print(f'refresh_token: {token.refresh_token}')
    print(f'expires_in:    {token.expires_in} сек')

    await client.init()
    print(f'Здравствуйте, {client.me.account.login}!')


if __name__ == '__main__':
    asyncio.run(main())