Package: yandex-music
Yandex Music APIДелаю то, что по определённым причинам не сделала компания Yandex.⚠️ Это неофициальная библиотека.Сообщество разработчиков общаются и помогают друг другу вTelegram чате, присоединяйтесь!СодержаниеВведениеДоступ к вашим данным Яндекс.МузыкаУстановкаНачало работыИзучение по примерамОсобенности использования асинхронного клиентаЛогированиеДокументацияПолучение помощиСписок измененийРеализации на других языкахВнесение своего вклада в проектСпонсорыЛицензияВведениеЭта библиотека предоставляет Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.Она совместима с версиями Python 3.7+ и поддерживает работу как с синхронным, так и с асинхронным (asyncio) кодом.В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток — объектов высокого уровня, дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки (reverse engineering) API.Доступ к вашим данным Яндекс.МузыкаЗадача по получению токена для доступа к данным лежит на плечах разработчиков, использующих данную библиотеку. О том как получить токен читайте вдокументации.УстановкаВы можете установить или обновить Yandex Music API с помощью команды:pipinstall-Uyandex-musicИли вы можете установить из исходного кода с помощью команды:gitclonehttps://github.com/MarshalX/yandex-music-apicdyandex-music-api
pythonsetup.pyinstallНачало работыПриступив к работе, первым делом необходимо создать экземпляр клиента.Инициализация синхронного клиента:fromyandex_musicimportClientclient=Client()client.init()# илиclient=Client().init()Инициализация асинхронного клиента:fromyandex_musicimportClientAsyncclient=ClientAsync()awaitclient.init()# илиclient=awaitClient().init()Вызовinit()необходим для получения информации — упрощения будущих запросов.Работа без авторизации ограничена. Так, например, для загрузки будут доступны только первые 30 секунд аудиофайла. Для понимания всех ограничений зайдите на сайт Яндекс.Музыка в режиме инкогнито и воспользуйтесь сервисом.Для доступа к личным данным следует авторизоваться. Это осуществляется через токен аккаунта Яндекс.Музыка.Авторизация:fromyandex_musicimportClientclient=Client('token').init()После успешного создания клиента вы вольны в выборе необходимого метода из API. Все они доступны у объекта классаClient. Подробнее в методах клиента вдокументации.Пример получения первого трека из плейлиста "Мне нравится" и его загрузки:fromyandex_musicimportClientclient=Client('token').init()client.users_likes_tracks()[0].fetch_track().download('example.mp3')В примере выше клиент получает список треков, которые были отмечены как понравившиеся. API возвращает объектTracksList, в котором содержится список с треками классаTrackShort. Данный класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методуfetch_track(). Затем можно скачать трек методомdownload().Пример получения треков по ID:fromyandex_musicimportClientclient=Client().init()client.tracks(['10994777:1193829','40133452:5206873','48966383:6693286','51385674:7163467'])В качестве ID трека выступает его уникальный номер и номер альбома. Первым треком из примера является следующий трек:music.yandex.ru/album/1193829/track/10994777Выполнение запросов с использованием прокси в синхронной версии:fromyandex_music.utils.requestimportRequestfromyandex_musicimportClientrequest=Request(proxy_url='socks5://user:password@host:port')client=Client(request=request).init()Примеры Proxy URL:socks5://user:password@host:porthttp://host:porthttps://host:porthttp://user:password@hostБольше примеров тут:proxies - advanced usage - requestsВыполнение запросов с использованием прокси в асинхронной версии:fromyandex_music.utils.request_asyncimportRequestfromyandex_musicimportClientAsyncrequest=Request(proxy_url='http://user:pass@some.proxy.com')client=awaitClientAsync(request=request).init()Socks прокси не поддерживаются в асинхронной версии.Про поддерживаемые прокси тут:proxy support - advanced usage - aiohttpИзучение по примерамВот несколько примеров для обзора. Даже если это не ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их.Код примеров опубликован в открытом доступе, поэтому вы можете взять его и начать писать вокруг него свой.Посетитеэту страницу, чтобы изучить официальные примеры.Особенности использования асинхронного клиентаПри работе с асинхронной версией библиотеке стоит всегда помнить
следующие особенности:Клиент следует импортировать с названиемClientAsync, а не простоClient.При использовании методов-сокращений нужно выбирать метод с суффиксом_async.Пояснение ко второму пункту:fromyandex_musicimportClientAsyncclient=awaitClientAsync('token').init()liked_short_track=(awaitclient.users_likes_tracks())[0]# правильноfull_track=awaitliked_short_track.fetch_track_async()awaitfull_track.download_async()# НЕПРАВИЛЬНОfull_track=awaitliked_short_track.fetch_track()awaitfull_track.download()ЛогированиеДанная библиотека использует модульlogging. Чтобы настроить логирование на стандартный вывод, поместите в начало вашего скрипта следующий код:importlogginglogging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')Вы также можете использовать логирование в вашем приложении, вызвавlogging.getLogger()и установить уровень какой вы хотите:logger=logging.getLogger()logger.setLevel(logging.INFO)Если вы хотитеDEBUGлогирование:logger.setLevel(logging.DEBUG)ДокументацияДокументацияyandex-music-apiрасположена наreadthedocs.io. Вашей отправной точкой должен быть классClient, а точнее его методы. Именно они выполняют все запросы на API и возвращают вам готовые объекты.Класс Client на readthedocs.io.Получение помощиПолучить помощь можно несколькими путями:Задать вопрос вTelegram чате, где мы помогаем друг другу, присоединяйтесь!Сообщить о баге можносоздав Bug Report.Предложить новую фичу или задать вопрос можносоздав discussion.Найти ответ на вопрос вдокументации библиотеки.Список измененийВесь список изменений ведётся в файлеCHANGES.md.Реализации на других языкахOpenAPI спецификацияC#PHPTSJSВнесение своего вклада в проектВнесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан вCONTRIBUTING.md.Вы можете помочь и сообщив обагеили оновом поле пришедшем от API.СпонсорыJetBrainsJetBrains предоставляет бесплатный набор инструментов для разработки активным контрибьюторам некоммерческих проектов с открытым исходным кодом.Лицензии для проектов с открытым исходным кодом — Программы поддержкиЛицензияВы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии сLGPL-3. Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.