## Yandex Music API
> Делаю то, что по определённым причинам не сделала компания Yandex.
⚠️ Это неофициальная библиотека.
Сообщество разработчиков общаются и помогают друг другу в [Telegram чате](https://t.me/yandex_music_api), присоединяйтесь!
[![Поддерживаемые Python версии](https://img.shields.io/badge/python-3.7+-blue.svg)](https://pypi.org/project/yandex-music/)
[![Покрытие кода тестами](https://codecov.io/gh/MarshalX/yandex-music-api/branch/main/graph/badge.svg)](https://codecov.io/gh/MarshalX/yandex-music-api)
[![Качество кода](https://api.codacy.com/project/badge/Grade/27011a5a8d9f4b278d1bfe2fe8725fed)](https://app.codacy.com/gh/MarshalX/yandex-music-api)
[![Статус тестов](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml/badge.svg)](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml)
[![Статус документации](https://readthedocs.org/projects/yandex-music/badge/?version=latest)](https://yandex-music.readthedocs.io/en/latest/?badge=latest)
[![Лицензия LGPLv3](https://img.shields.io/badge/license-LGPLv3-lightgrey.svg)](https://www.gnu.org/licenses/lgpl-3.0.html)
### Содержание
- [Введение](#введение)
1. [Доступ к вашим данным Яндекс.Музыка](#доступ-к-вашим-данным-яндексмузыка)
- [Установка](#установка)
- [Начало работы](#начало-работы)
1. [Изучение по примерам](#изучение-по-примерам)
2. [Особенности использования асинхронного клиента](#особенности-использования-асинхронного-клиента)
3. [Логирование](#логирование)
4. [Документация](#документация)
- [Получение помощи](#получение-помощи)
- [Список изменений](#список-изменений)
- [Реализации на других языках](#реализации-на-других-языках)
- [Внесение своего вклада в проект](#внесение-своего-вклада-в-проект)
- [Спонсоры](#спонсоры)
- [Лицензия](#лицензия)
### Введение
Эта библиотека предоставляет Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.
Она совместима с версиями Python 3.7+ и поддерживает работу как с синхронным, так и с асинхронным (asyncio) кодом.
В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток — объектов высокого уровня, дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки (reverse engineering) API.
#### Доступ к вашим данным Яндекс.Музыка
Задача по получению токена для доступа к данным лежит на плечах разработчиков, использующих данную библиотеку. О том как получить токен читайте в [документации](https://yandex-music.readthedocs.io/en/main/token.html).
### Установка
Вы можете установить или обновить Yandex Music API с помощью команды:
``` shell
pip install -U yandex-music
```
Или вы можете установить из исходного кода с помощью команды:
``` shell
git clone https://github.com/MarshalX/yandex-music-api
cd yandex-music-api
python setup.py install
```
### Начало работы
Приступив к работе, первым делом необходимо создать экземпляр клиента.
Инициализация синхронного клиента:
``` python
from yandex_music import Client
client = Client()
client.init()
# или
client = Client().init()
```
Инициализация асинхронного клиента:
``` python
from yandex_music import ClientAsync
client = ClientAsync()
await client.init()
# или
client = await Client().init()
```
Вызов `init()` необходим для получения информации — упрощения будущих запросов.
Работа без авторизации ограничена. Так, например, для загрузки будут доступны только первые 30 секунд аудиофайла. Для понимания всех ограничений зайдите на сайт Яндекс.Музыка в режиме инкогнито и воспользуйтесь сервисом.
Для доступа к личным данным следует авторизоваться. Это осуществляется через токен аккаунта Яндекс.Музыка.
Авторизация:
``` python
from yandex_music import Client
client = Client('token').init()
```
После успешного создания клиента вы вольны в выборе необходимого метода из API. Все они доступны у объекта класса `Client`. Подробнее в методах клиента в [документации](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).
Пример получения первого трека из плейлиста "Мне нравится" и его загрузки:
``` python
from yandex_music import Client
client = Client('token').init()
client.users_likes_tracks()[0].fetch_track().download('example.mp3')
```
В примере выше клиент получает список треков, которые были отмечены как понравившиеся. API возвращает объект [TracksList](https://yandex-music.readthedocs.io/en/latest/yandex_music.tracks_list.html), в котором содержится список с треками класса [TrackShort](https://yandex-music.readthedocs.io/en/latest/yandex_music.track_short.html). Данный класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методу `fetch_track()`. Затем можно скачать трек методом `download()`.
Пример получения треков по ID:
``` python
from yandex_music import Client
client = Client().init()
client.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])
```
В качестве ID трека выступает его уникальный номер и номер альбома. Первым треком из примера является следующий трек:music.yandex.ru/album/**1193829**/track/**10994777**
Выполнение запросов с использованием прокси в синхронной версии:
``` python
from yandex_music.utils.request import Request
from yandex_music import Client
request = Request(proxy_url='socks5://user:password@host:port')
client = Client(request=request).init()
```
Примеры Proxy URL:
- socks5://user:<password@host>:port
- <http://host:port>
- <https://host:port>
- <http://user:password@host>
Больше примеров тут: [proxies - advanced usage - requests](https://2.python-requests.org/en/master/user/advanced/#proxies)
Выполнение запросов с использованием прокси в асинхронной версии:
``` python
from yandex_music.utils.request_async import Request
from yandex_music import ClientAsync
request = Request(proxy_url='http://user:pass@some.proxy.com')
client = await ClientAsync(request=request).init()
```
Socks прокси не поддерживаются в асинхронной версии.
Про поддерживаемые прокси тут: [proxy support - advanced usage - aiohttp](https://docs.aiohttp.org/en/stable/client_advanced.html#proxy-support)
#### Изучение по примерам
Вот несколько примеров для обзора. Даже если это не ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их.
Код примеров опубликован в открытом доступе, поэтому вы можете взять его и начать писать вокруг него свой.
Посетите [эту страницу](https://github.com/MarshalX/yandex-music-api/blob/main/examples/), чтобы изучить официальные примеры.
#### Особенности использования асинхронного клиента
При работе с асинхронной версией библиотеке стоит всегда помнить
следующие особенности:
- Клиент следует импортировать с названием `ClientAsync`, а не просто `Client`.
- При использовании методов-сокращений нужно выбирать метод с суффиксом `_async`.
Пояснение ко второму пункту:
``` python
from yandex_music import ClientAsync
client = await ClientAsync('token').init()
liked_short_track = (await client.users_likes_tracks())[0]
# правильно
full_track = await liked_short_track.fetch_track_async()
await full_track.download_async()
# НЕПРАВИЛЬНО
full_track = await liked_short_track.fetch_track()
await full_track.download()
```
#### Логирование
Данная библиотека использует модуль `logging`. Чтобы настроить логирование на стандартный вывод, поместите в начало вашего скрипта следующий код:
``` python
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
```
Вы также можете использовать логирование в вашем приложении, вызвав `logging.getLogger()` и установить уровень какой вы хотите:
``` python
logger = logging.getLogger()
logger.setLevel(logging.INFO)
```
Если вы хотите `DEBUG` логирование:
``` python
logger.setLevel(logging.DEBUG)
```
### Документация
Документация `yandex-music-api` расположена на [readthedocs.io](https://yandex-music.readthedocs.io/). Вашей отправной точкой должен быть класс `Client`, а точнее его методы. Именно они выполняют все запросы на API и возвращают вам готовые объекты. [Класс Client на readthedocs.io](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).
### Получение помощи
Получить помощь можно несколькими путями:
- Задать вопрос в [Telegram чате](https://t.me/yandex_music_api), где мы помогаем друг другу, присоединяйтесь\!
- Сообщить о баге можно [создав Bug Report](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX&labels=bug&template=bug-report.md&title=).
- Предложить новую фичу или задать вопрос можно [создав discussion](https://github.com/MarshalX/yandex-music-api/discussions/new).
- Найти ответ на вопрос в [документации библиотеки](https://yandex-music.readthedocs.io/en/latest/).
### Список изменений
Весь список изменений ведётся в файле [CHANGES.md](https://github.com/MarshalX/yandex-music-api/blob/main/CHANGES.md).
### Реализации на других языках
- [OpenAPI спецификация](https://github.com/acherkashin/yandex-music-open-api/blob/main/src/yandex-music.yaml)
- [C#](https://github.com/K1llMan/Yandex.Music.Api)
- [PHP](https://github.com/LuckyWins/yandex-music-api)
- [TS](https://github.com/acherkashin/yandex-music-open-api)
- [JS](https://github.com/kontsevoye/ym-api)
### Внесение своего вклада в проект
Внесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан в [CONTRIBUTING.md](https://github.com/MarshalX/yandex-music-api/blob/main/CONTRIBUTING.md).
Вы можете помочь и сообщив о [баге](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX&labels=bug&template=bug-report.md&title=) или о [новом поле пришедшем от API](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=&labels=feature&template=found-unknown-fields.md&title=%D0%9D%D0%BE%D0%B2%D0%BE%D0%B5+%D0%BD%D0%B5%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D0%BE%D0%B5+%D0%BF%D0%BE%D0%BB%D0%B5+%D0%BE%D1%82+API).
### Спонсоры
#### JetBrains
<img height="150" width="150" src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png" alt="JetBrains Logo (Main) logo.">
> JetBrains предоставляет бесплатный набор инструментов для разработки активным контрибьюторам некоммерческих проектов с открытым исходным кодом.
[Лицензии для проектов с открытым исходным кодом — Программы поддержки](https://jb.gg/OpenSourceSupport)
### Лицензия
Вы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с [LGPL-3](https://www.gnu.org/licenses/lgpl-3.0.html). Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.
Raw data
{
"_id": null,
"home_page": "https://github.com/MarshalX/yandex-music-api",
"name": "yandex-music-test",
"maintainer": null,
"docs_url": null,
"requires_python": "~=3.7",
"maintainer_email": null,
"keywords": "python yandex music api wrapper library client \u043f\u0438\u0442\u043e\u043d \u043f\u0430\u0439\u0442\u043e\u043d \u044f\u043d\u0434\u0435\u043a\u0441 \u043c\u0443\u0437\u044b\u043a\u0430 \u0430\u043f\u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442",
"author": "a2sh3r",
"author_email": "ashurmetovmm@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/9b/a3/6817e7c95d4ca8d5d6568f950ea8fed48b8941edd4b40ed718023caf0563/yandex_music_test-2.2.0.tar.gz",
"platform": null,
"description": "## Yandex Music API\r\n\r\n> \u0414\u0435\u043b\u0430\u044e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Yandex.\r\n\r\n\u26a0\ufe0f \u042d\u0442\u043e \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\r\n\r\n\u0421\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0432 [Telegram \u0447\u0430\u0442\u0435](https://t.me/yandex_music_api), \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c!\r\n\r\n[![\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 Python \u0432\u0435\u0440\u0441\u0438\u0438](https://img.shields.io/badge/python-3.7+-blue.svg)](https://pypi.org/project/yandex-music/)\r\n[![\u041f\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0430\u043c\u0438](https://codecov.io/gh/MarshalX/yandex-music-api/branch/main/graph/badge.svg)](https://codecov.io/gh/MarshalX/yandex-music-api)\r\n[![\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430](https://api.codacy.com/project/badge/Grade/27011a5a8d9f4b278d1bfe2fe8725fed)](https://app.codacy.com/gh/MarshalX/yandex-music-api)\r\n[![\u0421\u0442\u0430\u0442\u0443\u0441 \u0442\u0435\u0441\u0442\u043e\u0432](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml/badge.svg)](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml)\r\n[![\u0421\u0442\u0430\u0442\u0443\u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](https://readthedocs.org/projects/yandex-music/badge/?version=latest)](https://yandex-music.readthedocs.io/en/latest/?badge=latest)\r\n[![\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f LGPLv3](https://img.shields.io/badge/license-LGPLv3-lightgrey.svg)](https://www.gnu.org/licenses/lgpl-3.0.html)\r\n\r\n### \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\r\n - [\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435](#\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435)\r\n 1. [\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0430](#\u0434\u043e\u0441\u0442\u0443\u043f-\u043a-\u0432\u0430\u0448\u0438\u043c-\u0434\u0430\u043d\u043d\u044b\u043c-\u044f\u043d\u0434\u0435\u043a\u0441\u043c\u0443\u0437\u044b\u043a\u0430)\r\n - [\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430](#\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430)\r\n - [\u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b](#\u043d\u0430\u0447\u0430\u043b\u043e-\u0440\u0430\u0431\u043e\u0442\u044b)\r\n 1. [\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c](#\u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435-\u043f\u043e-\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c)\r\n 2. [\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430](#\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f-\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e-\u043a\u043b\u0438\u0435\u043d\u0442\u0430)\r\n 3. [\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435](#\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)\r\n 4. [\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f](#\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f)\r\n - [\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0449\u0438](#\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435-\u043f\u043e\u043c\u043e\u0449\u0438)\r\n - [\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439](#\u0441\u043f\u0438\u0441\u043e\u043a-\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439)\r\n - [\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445](#\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438-\u043d\u0430-\u0434\u0440\u0443\u0433\u0438\u0445-\u044f\u0437\u044b\u043a\u0430\u0445)\r\n - [\u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442](#\u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435-\u0441\u0432\u043e\u0435\u0433\u043e-\u0432\u043a\u043b\u0430\u0434\u0430-\u0432-\u043f\u0440\u043e\u0435\u043a\u0442)\r\n - [\u0421\u043f\u043e\u043d\u0441\u043e\u0440\u044b](#\u0441\u043f\u043e\u043d\u0441\u043e\u0440\u044b)\r\n - [\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f](#\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f)\r\n\r\n### \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\r\n\r\n\u042d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Python \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u043d\u0438\u043a\u0435\u043c \u043d\u0435\u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f API \u042f\u043d\u0434\u0435\u043a\u0441 \u041c\u0443\u0437\u044b\u043a\u0438.\r\n\r\n\u041e\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Python 3.7+ \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u0430\u043a \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c, \u0442\u0430\u043a \u0438 \u0441 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c (asyncio) \u043a\u043e\u0434\u043e\u043c.\r\n\r\n\u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e API \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u043e\u0431\u0451\u0440\u0442\u043e\u043a \u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0434\u0430\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439. \u0412\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441 \u043d\u0443\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432 \u0445\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (reverse engineering) API.\r\n\r\n#### \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0430\r\n\r\n\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043f\u043b\u0435\u0447\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041e \u0442\u043e\u043c \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](https://yandex-music.readthedocs.io/en/main/token.html).\r\n\r\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c Yandex Music API \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:\r\n\r\n``` shell\r\npip install -U yandex-music\r\n```\r\n\r\n\u0418\u043b\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b:\r\n\r\n``` shell\r\ngit clone https://github.com/MarshalX/yandex-music-api\r\ncd yandex-music-api\r\npython setup.py install\r\n```\r\n\r\n### \u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b\r\n\r\n\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\r\n\r\n\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430:\r\n\r\n``` python\r\nfrom yandex_music import Client\r\n\r\nclient = Client()\r\nclient.init()\r\n\r\n# \u0438\u043b\u0438\r\n\r\nclient = Client().init()\r\n```\r\n\r\n\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430:\r\n\r\n``` python\r\nfrom yandex_music import ClientAsync\r\n\r\nclient = ClientAsync()\r\nawait client.init()\r\n\r\n# \u0438\u043b\u0438\r\n\r\nclient = await Client().init()\r\n```\r\n\r\n\u0412\u044b\u0437\u043e\u0432 `init()` \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\r\n\r\n\u0420\u0430\u0431\u043e\u0442\u0430 \u0431\u0435\u0437 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u0430. \u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u043d\u043a\u043e\u0433\u043d\u0438\u0442\u043e \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c.\r\n\r\n\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043b\u0438\u0447\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u043a\u0435\u043d \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0430.\r\n\r\n\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f:\r\n\r\n``` python\r\nfrom yandex_music import Client\r\n\r\nclient = Client('token').init()\r\n```\r\n\r\n\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u0432 \u0432\u044b\u0431\u043e\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u0437 API. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 `Client`. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u0440\u0435\u043a\u0430 \u0438\u0437 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430 \"\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f\" \u0438 \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:\r\n\r\n``` python\r\nfrom yandex_music import Client\r\n\r\nclient = Client('token').init()\r\nclient.users_likes_tracks()[0].fetch_track().download('example.mp3')\r\n```\r\n\r\n\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0435\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f. API \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 [TracksList](https://yandex-music.readthedocs.io/en/latest/yandex_music.tracks_list.html), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0442\u0440\u0435\u043a\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 [TrackShort](https://yandex-music.readthedocs.io/en/latest/yandex_music.track_short.html). \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0438\u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0440\u0435\u043a\u0435 \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0440\u0435\u043a\u0430 \u0441\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043c\u0435\u0442\u043e\u0434\u0443 `fetch_track()`. \u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0435\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u043c `download()`.\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u043a\u043e\u0432 \u043f\u043e ID:\r\n\r\n``` python\r\nfrom yandex_music import Client\r\n\r\nclient = Client().init()\r\nclient.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])\r\n```\r\n\r\n\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 ID \u0442\u0440\u0435\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0435\u0433\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0430\u043b\u044c\u0431\u043e\u043c\u0430. \u041f\u0435\u0440\u0432\u044b\u043c \u0442\u0440\u0435\u043a\u043e\u043c \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u0435\u043a:music.yandex.ru/album/**1193829**/track/**10994777**\r\n\r\n\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:\r\n\r\n``` python\r\nfrom yandex_music.utils.request import Request\r\nfrom yandex_music import Client\r\n\r\nrequest = Request(proxy_url='socks5://user:password@host:port')\r\nclient = Client(request=request).init()\r\n```\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b Proxy URL:\r\n - socks5://user:<password@host>:port\r\n - <http://host:port>\r\n - <https://host:port>\r\n - <http://user:password@host>\r\n\r\n\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u0443\u0442: [proxies - advanced usage - requests](https://2.python-requests.org/en/master/user/advanced/#proxies)\r\n\r\n\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:\r\n\r\n``` python\r\nfrom yandex_music.utils.request_async import Request\r\nfrom yandex_music import ClientAsync\r\n\r\nrequest = Request(proxy_url='http://user:pass@some.proxy.com')\r\nclient = await ClientAsync(request=request).init()\r\n```\r\n\r\nSocks \u043f\u0440\u043e\u043a\u0441\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.\r\n\r\n\u041f\u0440\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u0442\u0443\u0442: [proxy support - advanced usage - aiohttp](https://docs.aiohttp.org/en/stable/client_advanced.html#proxy-support)\r\n\r\n#### \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\r\n\r\n\u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0437\u043e\u0440\u0430. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0438 \u0431\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0438\u0445.\r\n\r\n\u041a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u044f\u0442\u044c \u0435\u0433\u043e \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u0439.\r\n\r\n\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 [\u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443](https://github.com/MarshalX/yandex-music-api/blob/main/examples/), \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b.\r\n\r\n#### \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\r\n\r\n\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043c\u043d\u0438\u0442\u044c\r\n\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:\r\n - \u041a\u043b\u0438\u0435\u043d\u0442 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c `ClientAsync`, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e `Client`.\r\n - \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432-\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0441 \u0441\u0443\u0444\u0444\u0438\u043a\u0441\u043e\u043c `_async`.\r\n\r\n\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443:\r\n\r\n``` python\r\nfrom yandex_music import ClientAsync\r\n\r\nclient = await ClientAsync('token').init()\r\nliked_short_track = (await client.users_likes_tracks())[0]\r\n\r\n# \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\r\nfull_track = await liked_short_track.fetch_track_async()\r\nawait full_track.download_async()\r\n\r\n# \u041d\u0415\u041f\u0420\u0410\u0412\u0418\u041b\u042c\u041d\u041e\r\nfull_track = await liked_short_track.fetch_track()\r\nawait full_track.download()\r\n```\r\n\r\n#### \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\r\n\r\n\u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c `logging`. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:\r\n\r\n``` python\r\nimport logging\r\nlogging.basicConfig(\r\n level=logging.DEBUG,\r\n format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'\r\n)\r\n```\r\n\r\n\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0432\u044b\u0437\u0432\u0430\u0432 `logging.getLogger()` \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u0430\u043a\u043e\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435:\r\n\r\n``` python\r\nlogger = logging.getLogger()\r\nlogger.setLevel(logging.INFO)\r\n```\r\n\r\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 `DEBUG` \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:\r\n\r\n``` python\r\nlogger.setLevel(logging.DEBUG)\r\n```\r\n\r\n### \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\r\n\r\n\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f `yandex-music-api` \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 [readthedocs.io](https://yandex-music.readthedocs.io/). \u0412\u0430\u0448\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0441 `Client`, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 API \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0432\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. [\u041a\u043b\u0430\u0441\u0441 Client \u043d\u0430 readthedocs.io](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).\r\n\r\n### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0449\u0438\r\n\r\n\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043c\u043e\u0449\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438:\r\n - \u0417\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 [Telegram \u0447\u0430\u0442\u0435](https://t.me/yandex_music_api), \u0433\u0434\u0435 \u043c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c\\!\r\n - \u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0431\u0430\u0433\u0435 \u043c\u043e\u0436\u043d\u043e [\u0441\u043e\u0437\u0434\u0430\u0432 Bug Report](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX&labels=bug&template=bug-report.md&title=).\r\n - \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0438\u0447\u0443 \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e [\u0441\u043e\u0437\u0434\u0430\u0432 discussion](https://github.com/MarshalX/yandex-music-api/discussions/new).\r\n - \u041d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432 [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438](https://yandex-music.readthedocs.io/en/latest/).\r\n\r\n### \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439\r\n\r\n\u0412\u0435\u0441\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 [CHANGES.md](https://github.com/MarshalX/yandex-music-api/blob/main/CHANGES.md).\r\n\r\n### \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445\r\n\r\n- [OpenAPI \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f](https://github.com/acherkashin/yandex-music-open-api/blob/main/src/yandex-music.yaml)\r\n- [C#](https://github.com/K1llMan/Yandex.Music.Api)\r\n- [PHP](https://github.com/LuckyWins/yandex-music-api)\r\n- [TS](https://github.com/acherkashin/yandex-music-open-api)\r\n- [JS](https://github.com/kontsevoye/ym-api)\r\n\r\n### \u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\r\n\r\n\u0412\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f! \u0415\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d \u0432 [CONTRIBUTING.md](https://github.com/MarshalX/yandex-music-api/blob/main/CONTRIBUTING.md).\r\n\r\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043e\u0447\u044c \u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0432 \u043e [\u0431\u0430\u0433\u0435](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX&labels=bug&template=bug-report.md&title=) \u0438\u043b\u0438 \u043e [\u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u043c \u043e\u0442 API](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=&labels=feature&template=found-unknown-fields.md&title=%D0%9D%D0%BE%D0%B2%D0%BE%D0%B5+%D0%BD%D0%B5%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D0%BE%D0%B5+%D0%BF%D0%BE%D0%BB%D0%B5+%D0%BE%D1%82+API).\r\n\r\n### \u0421\u043f\u043e\u043d\u0441\u043e\u0440\u044b\r\n\r\n#### JetBrains\r\n\r\n<img height=\"150\" width=\"150\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png\" alt=\"JetBrains Logo (Main) logo.\">\r\n\r\n> JetBrains \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u0430\u043c \u043d\u0435\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.\r\n\r\n[\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u2014 \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438](https://jb.gg/OpenSourceSupport)\r\n\r\n### \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\r\n\r\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 [LGPL-3](https://www.gnu.org/licenses/lgpl-3.0.html). \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439) \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 LGPL-3, \u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.\r\n",
"bugtrack_url": null,
"license": "LGPLv3",
"summary": "\u043a\u043b\u043e\u043d \u0440\u0435\u043f\u044b \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043f\u0438 \u044f\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f whl \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 Pyodide",
"version": "2.2.0",
"project_urls": {
"Changes": "https://github.com/MarshalX/yandex-music-api/blob/main/CHANGES.md",
"Codacy": "https://app.codacy.com/gh/MarshalX/yandex-music-api",
"Codecov": "https://codecov.io/gh/MarshalX/yandex-music-api",
"Documentation": "https://yandex-music.rtfd.io",
"Homepage": "https://github.com/MarshalX/yandex-music-api",
"Telegram chat": "https://t.me/yandex_music_api",
"Tracker": "https://github.com/MarshalX/yandex-music-api/issues"
},
"split_keywords": [
"python",
"yandex",
"music",
"api",
"wrapper",
"library",
"client",
"\u043f\u0438\u0442\u043e\u043d",
"\u043f\u0430\u0439\u0442\u043e\u043d",
"\u044f\u043d\u0434\u0435\u043a\u0441",
"\u043c\u0443\u0437\u044b\u043a\u0430",
"\u0430\u043f\u0438",
"\u043e\u0431\u0451\u0440\u0442\u043a\u0430",
"\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430",
"\u043a\u043b\u0438\u0435\u043d\u0442"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "eec01fb2c29be11949f753b4d8a3ca15a29299b7ab7002c97ea6afe422112084",
"md5": "14902130f3c40023343c79cefef11657",
"sha256": "9cd24b333f953b3d3fe27eb094a16c1a7c6953471e8439117c0df810be29286f"
},
"downloads": -1,
"filename": "yandex_music_test-2.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "14902130f3c40023343c79cefef11657",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "~=3.7",
"size": 303222,
"upload_time": "2024-05-01T14:50:53",
"upload_time_iso_8601": "2024-05-01T14:50:53.231139Z",
"url": "https://files.pythonhosted.org/packages/ee/c0/1fb2c29be11949f753b4d8a3ca15a29299b7ab7002c97ea6afe422112084/yandex_music_test-2.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9ba36817e7c95d4ca8d5d6568f950ea8fed48b8941edd4b40ed718023caf0563",
"md5": "ffb41335e7b6d130dcceeb3509d4b422",
"sha256": "776822a90ddff83ed55c85e9a0b9f43af8c643585ac296975e6c83c2830bd8e7"
},
"downloads": -1,
"filename": "yandex_music_test-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "ffb41335e7b6d130dcceeb3509d4b422",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "~=3.7",
"size": 175660,
"upload_time": "2024-05-01T14:50:56",
"upload_time_iso_8601": "2024-05-01T14:50:56.514413Z",
"url": "https://files.pythonhosted.org/packages/9b/a3/6817e7c95d4ca8d5d6568f950ea8fed48b8941edd4b40ed718023caf0563/yandex_music_test-2.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-01 14:50:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "MarshalX",
"github_project": "yandex-music-api",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "yandex-music-test"
}