yandex-music-test


Nameyandex-music-test JSON
Version 2.2.0 PyPI version JSON
download
home_pagehttps://github.com/MarshalX/yandex-music-api
Summaryклон репы неофициального апи яндекса для получения whl файла для установки в Pyodide
upload_time2024-05-01 14:50:56
maintainerNone
docs_urlNone
authora2sh3r
requires_python~=3.7
licenseLGPLv3
keywords python yandex music api wrapper library client питон пайтон яндекс музыка апи обёртка библиотека клиент
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ## 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"
}
        
Elapsed time: 0.70382s