Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork89
Неофициальная Python библиотека для работы с API сервиса Яндекс.Музыка
License
MarshalX/yandex-music-api
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Делаю то, что по определённым причинам не сделала компания Yandex.
Сообщество разработчиков общаются и помогают друг другу вTelegram чате, присоединяйтесь!
- Введение
- Установка
- Начало работы
- Получение помощи
- Список изменений
- Реализации на других языках
- Внесение своего вклада в проект
- Спонсоры
- Лицензия
Эта библиотека предоставляет Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.
Она совместима с версиями Python 3.8+ и поддерживает работу как с синхронным, так и с асинхронным (asyncio) кодом.
В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток — объектов высокого уровня, дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки (reverse engineering) API.
Задача по получению токена для доступа к данным лежит на плечах разработчиков, использующих данную библиотеку. О том как получить токен читайте вдокументации.
Вы можете установить или обновить Yandex Music API с помощью команды:
pip install -U yandex-music
Или вы можете установить из исходного кода с помощью команды:
git clone https://github.com/MarshalX/yandex-music-apicd yandex-music-apipython setup.py install
Приступив к работе, первым делом необходимо создать экземпляр клиента.
Инициализация синхронного клиента:
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:port
- http://host:port
- https://host:port
- http://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.
Внесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан вCONTRIBUTING.md.
Вы можете помочь и сообщив обаге или оновом поле пришедшем от API.
JetBrains предоставляет бесплатный набор инструментов для разработки активным контрибьюторам некоммерческих проектов с открытым исходным кодом.
Лицензии для проектов с открытым исходным кодом — Программы поддержки
Вы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии сLGPL-3. Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.
About
Неофициальная Python библиотека для работы с API сервиса Яндекс.Музыка
Topics
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.