yandex-music


Nameyandex-music JSON
Version 2.1.1 PyPI version JSON
download
home_pagehttps://github.com/MarshalX/yandex-music-api/
SummaryНеофициальная Python библиотека для работы с API сервиса Яндекс.Музыка.
upload_time2023-05-04 19:14:42
maintainer
docs_urlNone
authorIlya (Marshal)
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/pytest_full.yml/badge.svg)](https://github.com/MarshalX/yandex-music-api/actions/workflows/pytest_full.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.  [Документация](#документация)
  - [Получение помощи](#получение-помощи)
  - [Список изменений](#список-изменений)
  - [Реализации на других языках](#реализации-на-других-языках)
    1.  [C#](#c)
    2.  [PHP](#php)
    3.  [JavaScript](#javascript)
  - [Разработанные проекты](#разработанные-проекты)
    1.  [Плагин для Kodi](#плагин-для-kodi)
    2.  [Telegram бот-клиент](#telegram-бот-клиент)
  - [Благодарность](#благодарность)
  - [Внесение своего вклада в проект](#внесение-своего-вклада-в-проект)
  - [Спонсоры](#спонсоры)
  - [Лицензия](#лицензия)

### Введение

Эта библиотека предоставляется Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.

Она совместима с версиями Python 3.7+ и поддерживает работу как с синхронном, так и асинхронным (asyncio) кодом.

В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток объектов высокого уровня дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки(reverse engineering) API.

#### Доступ к вашим данным Яндекс.Музыка

Начиная с версии [2.0.0](https://github.com/MarshalX/yandex-music-api/blob/a30082f4929e56381c870cb03103777ae29bcc6b/CHANGES.rst#%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F-200) библиотека больше не предоставляет интерфейсы для работы с OAuth Яндекс и Яндекс.Паспорт. Задача по получению токена для доступа к данным на плечах разработчиков использующих данную библиотеку. О том как получить токен читайте в документации.

### Установка

Вы можете установить или обновить 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).

### Реализации на других языках

#### C#

Реализация с совершенно другим подходом, так как используется API для frontend'a, а не мобильных и десктопных приложений: [Winster332/Yandex.Music.Api](https://github.com/Winster332/Yandex.Music.Api).

[@Winster332](https://github.com/Winster332) не сильно проявляет активность, но существует форк, который продолжил начатое. Эндпоинты изменены с фронтовых на мобильные: [K1llMan/Yandex.Music.Api](https://github.com/K1llMan/Yandex.Music.Api).

#### PHP

Частично переписанная текущая библиотека на PHP: [LuckyWins/yandex-music-api](https://github.com/LuckyWins/yandex-music-api).

#### JavaScript

API wrapper на Node.JS. Не обновлялся больше двух лет: [itsmepetrov/yandex-music-api](https://github.com/itsmepetrov/yandex-music-api). Продолжение разработки заброшенной библиотеки: [kontsevoye/ym-api](https://github.com/kontsevoye/ym-api).

### Разработанные проекты

#### Плагин для Kodi

Плагин может проигрывать пользовательские плейлисты и плейлисты Яндекса, поиск по Яндекс Музыке, радио.

Сайт проекта: [ymkodi.ru](https://ymkodi.ru/). Исходный код: [kodi.plugin.yandex-music](https://github.com/Angel777d/kodi.plugin.yandex-music).
Автор: [@Angel777d](https://github.com/Angel777d).

[![Плагин для Kodi](https://raw.githubusercontent.com/Angel777d/kodi.plugin.yandex-music/master/assets/img/kody_yandex_music_plugin.png)](https://ymkodi.ru/)

#### Telegram бот-клиент

Неофициальный бот. Умные и ваши плейлисты, понравившиеся треки. Лайки, дизлайки, текста песен, поиск, распознавание песен, похожие треки! Полноценный клиент на базе мессенджера.

Сайт проекта: [music-yandex-bot.ru](https://music-yandex-bot.ru/). Бот в Telegram: [@music\_yandex\_bot](https://t.me/music_yandex_bot). Автор: [@MarshalX](https://github.com/MarshalX).

Статья на habr.com с описанием реализации: [Под капотом бота-клиента Яндекс.Музыки](https://habr.com/ru/post/487428/).

[![Telegram бот-клиент](https://hsto.org/webt/uv/4s/a3/uv4sa3pslohuzlmuzrjzteju2dk.png)](https://music-yandex-bot.ru/)

### Благодарность

Спасибо разработчикам `python-telegram-bot`. Выбрал Вас в качестве примера.

### Внесение своего вклада в проект

Внесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан в [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",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "~=3.7",
    "maintainer_email": "",
    "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": "Ilya (Marshal)",
    "author_email": "ilya@marshal.dev",
    "download_url": "https://files.pythonhosted.org/packages/ad/3f/9a0a4735c40f3ffc91ccf5ac4b28f14b993febeed62195d6de7b54fa7f7c/yandex-music-2.1.1.tar.gz",
    "platform": null,
    "description": "## Yandex Music API\n\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.\n\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.\n\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!\n\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/)\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)\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)\n[![\u0421\u0442\u0430\u0442\u0443\u0441 \u0442\u0435\u0441\u0442\u043e\u0432](https://github.com/MarshalX/yandex-music-api/actions/workflows/pytest_full.yml/badge.svg)](https://github.com/MarshalX/yandex-music-api/actions/workflows/pytest_full.yml)\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)\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)\n\n### \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\n  - [\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435](#\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435)\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)\n  - [\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430](#\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430)\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)\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)\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)\n    3.  [\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435](#\u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)\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)\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)\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)\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)\n    1.  [C#](#c)\n    2.  [PHP](#php)\n    3.  [JavaScript](#javascript)\n  - [\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b](#\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435-\u043f\u0440\u043e\u0435\u043a\u0442\u044b)\n    1.  [\u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Kodi](#\u043f\u043b\u0430\u0433\u0438\u043d-\u0434\u043b\u044f-kodi)\n    2.  [Telegram \u0431\u043e\u0442-\u043a\u043b\u0438\u0435\u043d\u0442](#telegram-\u0431\u043e\u0442-\u043a\u043b\u0438\u0435\u043d\u0442)\n  - [\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c](#\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c)\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)\n  - [\u0421\u043f\u043e\u043d\u0441\u043e\u0440\u044b](#\u0441\u043f\u043e\u043d\u0441\u043e\u0440\u044b)\n  - [\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f](#\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f)\n\n### \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\n\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\u0441\u044f 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.\n\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\u043e\u043c, \u0442\u0430\u043a \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c (asyncio) \u043a\u043e\u0434\u043e\u043c.\n\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 \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.\n\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\n\n\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 [2.0.0](https://github.com/MarshalX/yandex-music-api/blob/a30082f4929e56381c870cb03103777ae29bcc6b/CHANGES.rst#%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F-200) \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OAuth \u042f\u043d\u0434\u0435\u043a\u0441 \u0438 \u042f\u043d\u0434\u0435\u043a\u0441.\u041f\u0430\u0441\u043f\u043e\u0440\u0442. \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 \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.\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\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 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438:\n\n``` shell\npip install -U yandex-music\n```\n\n\u0418\u043b\u0438 \u0412\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:\n\n``` shell\ngit clone https://github.com/MarshalX/yandex-music-api\ncd yandex-music-api\npython setup.py install\n```\n\n### \u041d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b\n\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.\n\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:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client()\nclient.init()\n\n# \u0438\u043b\u0438\n\nclient = Client().init()\n```\n\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:\n\n``` python\nfrom yandex_music import ClientAsync\n\nclient = ClientAsync()\nawait client.init()\n\n# \u0438\u043b\u0438\n\nclient = await Client().init()\n```\n\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\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\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 \u043f\u043e\u0434 \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.\n\n\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0432\u043e\u0438\u043c \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.\n\n\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client('token').init()\n```\n\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 \u0412\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).\n\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\u0430:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client('token').init()\nclient.users_likes_tracks()[0].fetch_track().download('example.mp3')\n```\n\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()`.\n\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:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client().init()\nclient.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])\n```\n\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**\n\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 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:\n\n``` python\nfrom yandex_music.utils.request import Request\nfrom yandex_music import Client\n\nrequest = Request(proxy_url='socks5://user:password@host:port')\nclient = Client(request=request).init()\n```\n\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b proxy url:\n  - socks5://user:<password@host>:port\n  - <http://host:port>\n  - <https://host:port>\n  - <http://user:password@host>\n\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)\n\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 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:\n\n``` python\nfrom yandex_music.utils.request_async import Request\nfrom yandex_music import ClientAsync\n\nrequest = Request(proxy_url='http://user:pass@some.proxy.com')\nclient = await ClientAsync(request=request).init()\n```\n\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.\n\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)\n\n#### \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\n\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 \u0412\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.\n\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 \u0412\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 \u0441\u0432\u043e\u0451.\n\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.\n\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\n\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\n\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:\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`.\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`.\n\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:\n\n``` python\nfrom yandex_music import ClientAsync\n\nclient = await ClientAsync('token').init()\nliked_short_track = (await client.users_likes_tracks())[0]\n\n# \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\nfull_track = await liked_short_track.fetch_track_async()\nawait full_track.download_async()\n\n# \u041d\u0415\u041f\u0420\u0410\u0412\u0418\u041b\u042c\u041d\u041e\nfull_track = await liked_short_track.fetch_track()\nawait full_track.download()\n```\n\n#### \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\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 `logging` \u043c\u043e\u0434\u0443\u043b\u044c. \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\n\n``` python\nimport logging\nlogging.basicConfig(\n    level=logging.DEBUG,\n    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'\n)\n```\n\n\u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.\n\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 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435:\n\n``` python\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\n```\n\n\u0415\u0441\u043b\u0438 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 `DEBUG` \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:\n\n``` python\nlogger.setLevel(logging.DEBUG)\n```\n\n### \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\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 \u0412\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).\n\n### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0449\u0438\n\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:\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\\!\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=).\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).\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/).\n\n### \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439\n\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).\n\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\n\n#### C#\n\n\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f API \u0434\u043b\u044f frontend'a, \u0430 \u043d\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: [Winster332/Yandex.Music.Api](https://github.com/Winster332/Yandex.Music.Api).\n\n[@Winster332](https://github.com/Winster332) \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u043d\u0430\u0447\u0430\u0442\u043e\u0435. \u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u0441 \u0444\u0440\u043e\u043d\u0442\u043e\u0432\u044b\u0445 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435: [K1llMan/Yandex.Music.Api](https://github.com/K1llMan/Yandex.Music.Api).\n\n#### PHP\n\n\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 PHP: [LuckyWins/yandex-music-api](https://github.com/LuckyWins/yandex-music-api).\n\n#### JavaScript\n\nAPI wrapper \u043d\u0430 Node.JS. \u041d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u043b\u0435\u0442: [itsmepetrov/yandex-music-api](https://github.com/itsmepetrov/yandex-music-api). \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: [kontsevoye/ym-api](https://github.com/kontsevoye/ym-api).\n\n### \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b\n\n#### \u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Kodi\n\n\u041f\u043b\u0430\u0433\u0438\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b \u0438 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b \u042f\u043d\u0434\u0435\u043a\u0441\u0430, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u042f\u043d\u0434\u0435\u043a\u0441 \u041c\u0443\u0437\u044b\u043a\u0435, \u0440\u0430\u0434\u0438\u043e.\n\n\u0421\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: [ymkodi.ru](https://ymkodi.ru/). \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434: [kodi.plugin.yandex-music](https://github.com/Angel777d/kodi.plugin.yandex-music).\n\u0410\u0432\u0442\u043e\u0440: [@Angel777d](https://github.com/Angel777d).\n\n[![\u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Kodi](https://raw.githubusercontent.com/Angel777d/kodi.plugin.yandex-music/master/assets/img/kody_yandex_music_plugin.png)](https://ymkodi.ru/)\n\n#### Telegram \u0431\u043e\u0442-\u043a\u043b\u0438\u0435\u043d\u0442\n\n\u041d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043e\u0442. \u0423\u043c\u043d\u044b\u0435 \u0438 \u0432\u0430\u0448\u0438 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b, \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0442\u0440\u0435\u043a\u0438. \u041b\u0430\u0439\u043a\u0438, \u0434\u0438\u0437\u043b\u0430\u0439\u043a\u0438, \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0435\u0441\u0435\u043d, \u043f\u043e\u0438\u0441\u043a, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0441\u0435\u043d, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0442\u0440\u0435\u043a\u0438! \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430.\n\n\u0421\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: [music-yandex-bot.ru](https://music-yandex-bot.ru/). \u0411\u043e\u0442 \u0432 Telegram: [@music\\_yandex\\_bot](https://t.me/music_yandex_bot). \u0410\u0432\u0442\u043e\u0440: [@MarshalX](https://github.com/MarshalX).\n\n\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430 habr.com \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: [\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u043e\u0442\u0430-\u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0438](https://habr.com/ru/post/487428/).\n\n[![Telegram \u0431\u043e\u0442-\u043a\u043b\u0438\u0435\u043d\u0442](https://hsto.org/webt/uv/4s/a3/uv4sa3pslohuzlmuzrjzteju2dk.png)](https://music-yandex-bot.ru/)\n\n### \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c\n\n\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c `python-telegram-bot`. \u0412\u044b\u0431\u0440\u0430\u043b \u0412\u0430\u0441 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430.\n\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\n\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).\n\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).\n\n### \u0421\u043f\u043e\u043d\u0441\u043e\u0440\u044b\n\n#### JetBrains\n\n<img height=\"150\" width=\"150\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png\" alt=\"JetBrains Logo (Main) logo.\">\n\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.\n\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)\n\n### \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\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.",
    "bugtrack_url": null,
    "license": "LGPLv3",
    "summary": "\u041d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u041c\u0443\u0437\u044b\u043a\u0430.",
    "version": "2.1.1",
    "project_urls": {
        "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"
    },
    "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": "ad3f9a0a4735c40f3ffc91ccf5ac4b28f14b993febeed62195d6de7b54fa7f7c",
                "md5": "b129bd26493bffbbcdc527d767031aaf",
                "sha256": "57b7d48917992bf3696070b4f0b2f51d5e24c35c0af522f08c4e1e00c3e9d4f0"
            },
            "downloads": -1,
            "filename": "yandex-music-2.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "b129bd26493bffbbcdc527d767031aaf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "~=3.7",
            "size": 168592,
            "upload_time": "2023-05-04T19:14:42",
            "upload_time_iso_8601": "2023-05-04T19:14:42.957339Z",
            "url": "https://files.pythonhosted.org/packages/ad/3f/9a0a4735c40f3ffc91ccf5ac4b28f14b993febeed62195d6de7b54fa7f7c/yandex-music-2.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-04 19:14:42",
    "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"
}
        
Elapsed time: 0.06805s