Делаю то, что по определённым причинам не сделала компания Yandex.
Маленькое сообщество разработчиков общаются и помогают друг другу в Telegram чатике, присоединяйтесь!
- Введение
- Установка
- Начало работы
- Получение помощи
- Реализации на других языках
- Разработанные проекты
- Благодарность
- Лицензия
Эта библиотека предоставляется Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.
Она совместима с версиями Python 3.6+.
В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток объектов высокого уровня дабы сделать разработку клиентов и скриптов простой и понятной.
Значения констант CLIENT_ID и CLIENT_SECRET позаимствовано у официального приложения-клиента сервиса Яндекс.Музыка из магазина Microsoft Store. Так как API является закрытым и используется только внутри компании Яндекс сейчас невозможно зарегистрировать своё собственное приложение на oauth.yandex.ru, а следовательно, использовать свои значения констант.
Библиотека находится в стадии разработки
Вы можете установить или обновить yandex-music-api при помощи:
$ pip install yandex-music --upgrade
Или Вы можете установить из исходного кода с помощью:
$ git clone https://github.com/MarshalX/yandex-music-api --recursive
$ cd yandex-music-api
$ python setup.py install
Приступив к работе первым делом необходимо создать экземпляр клиента.
Инициализация клиента:
from yandex_music.client import Client
client = Client()
Для доступа к своим личным данным следует авторизоваться. Это можно осуществить через OAuth токен или логин с паролем.
Авторизация по логину и паролю:
from yandex_music.client import Client
client = Client.from_credentials('example@yandex.com', 'password')
Авторизация по токену:
from yandex_music.client import Client
client = Client.from_token('token')
# или
client = Client('token')
После успешного создания клиента Вы вольны в выборе необходимого метода из API. Все они доступны у объекта класса Client. Подробнее в методах клиента в документации.
Пример получения первого трека из плейлиста "Мне нравится" и его загрузка:
from yandex_music.client import Client
client = Client.from_credentials('example@yandex.com', 'password')
client.users_likes_tracks()[0].track.download('example.mp3')
В примере выше клиент получает список треков которые были отмечены как понравившиеся. API возвращает объект TracksList в котором содержится список с треками класса TrackShort. Данные класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к свойству track. Затем можно скачать трек методом download().
Пример получения треков по ID:
from yandex_music.client import Client
client = Client()
client.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])
В качестве ID трека выступает его уникальный номер и номер альбома. Первым треком из примера является следующий трек: music.yandex.ru/album/1193829/track/10994777
Выполнение запросов с использование прокси:
from yandex_music.utils.request import Request
from yandex_music.client import Client
request = Request(proxy_url='socks5://user:password@host:port')
client = Client(request=request)
Примеры proxy url:
- socks5://user:password@host:port
- http://host:port
- https://host:port
- http://user:password@host
Больше примеров тут: proxies - advanced usage - requests
Пример инициализации клиента с обработкой капчи:
def init_client():
client = captcha_key = captcha_answer = None
while not client:
try:
client = Client.from_credentials('login', 'pass', captcha_answer, captcha_key)
except Captcha as e:
e.captcha.download('captcha.png')
captcha_key = e.captcha.x_captcha_key
captcha_answer = input('Число с картинки: ')
return client
Пример инициализации клиента с обработкой капчи при помощи callback-функции:
def proc_captcha(captcha):
captcha.download('captcha.png')
return input('Число с картинки: ')
client = Client.from_credentials('login', 'pass', captcha_callback=proc_captcha)
Вот несколько примеров для обзора. Даже если это не Ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их.
Код примеров опубликован в открытом доступе, поэтому Вы можете взять его и начать писать вокруг своё.
Посетите эту страницу чтобы изучить официальные примеры.
Данная библиотека использует logging
модуль. Чтобы настроить логирование на
стандартный вывод, поместите
import logging
logging.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 чатике, где мы помогаем друг другу, присоединяйтесь!
- Сообщить о баге, предложить новую фичу или задать вопрос можно создав issue.
- Найти ответ на вопрос в документации библиотеки.
Реализация с совершенно другим подходом, так как используется API для frontend'a, а не мобильных и десктопных приложений: Winster332/Yandex.Music.Api.
Автор не сильно проявляет активность, но появился форк, который продолжил начатое. Более того, @K1llMan (автор форка) планирует изменить эндпоинты с фронтовых на те, что используются в данной библиотеке. K1llMan/Yandex.Music.Api
Частично переписанная текущая библиотека на PHP: LuckyWins/yandex-music-api.
API wrapper на Node.JS. Не обновлялся больше двух лет: itsmepetrov/yandex-music-api.
Плагин может проигрывать пользовательские плейлисты и плейлисты Яндекса, поиск по Яндекс Музыке, радио.
Сайт проекта: ymkodi.ml.
Исходный код: kodi.plugin.yandex-music
Автор: @Angel777d
Неофициальный бот. Умные и ваши плейлисты, понравившиеся треки. Лайки, дизлайки, текста песен, поиск, распознавание песен, похожие треки! Полноценный клиент на базе мессенджера.
Сайт проекта: music-yandex-bot.ru
Username в Telegram: @music_yandex_bot
Статья на habr.com с описанием реализации: Под капотом бота-клиента Яндекс.Музыки
Автор: @MarshalX
Спасибо разработчикам python-telegram-bot
. Выбрал Вас в качестве примера.
Вы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с LGPL-3. Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.