yandex-music · PyPI
Yandex Music API
Делаю то, что по определённым причинам не сделала компания Yandex.
⚠️ Это неофициальная библиотека.
Сообщество разработчиков общаются и помогают друг другу в Telegram чате, присоединяйтесь!
Содержание
Введение
Доступ к вашим данным Яндекс.Музыка
Установка
Начало работы
Изучение по примерам
Особенности использования асинхронного клиента
Логирование
Документация
Получение помощи
Список изменений
Реализации на других языках
C#
PHP
JavaScript
Разработанные проекты
Плагин для Kodi
Telegram бот-клиент
Благодарность
Внесение своего вклада в проект
Лицензия
Введение
Она совместима с версиями Python 3.7+ и поддерживает работу как с синхронном, так и асинхронным (asyncio) кодом.
В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток объектов высокого уровня дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки (reverse engineering) API.
Доступ к вашим данным Яндекс.Музыка
Начиная с версии 2.0.0 библиотека больше не предоставляет интерфейсы для работы с OAuth Яндекс и Яндекс.Паспорт. Задача по получению токена для доступа к данным на плечах разработчиков использующих данную библиотеку.
Установка
Вы можете установить или обновить Yandex Music API при помощи:
pip install yandex-music --upgrade
Или Вы можете установить из исходного кода с помощью:
git clone https://github.com/MarshalX/yandex-music-api cd yandex-music-api python setup.py install
Начало работы
Приступив к работе первым делом необходимо создать экземпляр клиента.
Инициализация синхронного клиента:
from yandex_music import Client client = Client() client.init() # или client = Client().init()
Инициализация асинхронного клиента:
from yandex_music import ClientAsync client = ClientAsync() await client.init() # или client = await Client().init()
Вызов init() необходим для получение информации для упрощения будущих запросов.
Работа без авторизации ограничена. Так, например, для загрузки будут доступны только первые 30 секунд аудиофайла. Для понимания всех ограничений зайдите на сайт Яндекс.Музыка под инкогнито и воспользуйтесь сервисом.
Для доступа к своим личным данным следует авторизоваться. Это осуществляется через токен аккаунта Яндекс.Музыка.
Авторизация:
from yandex_music import Client client = Client('token').init()
После успешного создания клиента Вы вольны в выборе необходимого метода из API. Все они доступны у объекта класса Client. Подробнее в методах клиента в документации.
Пример получения первого трека из плейлиста “Мне нравится” и его загрузка:
from yandex_music import Client client = Client('token').init() client.users_likes_tracks()[0].fetch_track().download('example.mp3')
В примере выше клиент получает список треков которые были отмечены как понравившиеся. API возвращает объект TracksList в котором содержится список с треками класса TrackShort. Данный класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методу fetch_track(). Затем можно скачать трек методом download().
Пример получения треков по ID:
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
Выполнение запросов с использование прокси в синхронной версии:
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
Выполнение запросов с использование прокси в асинхронной версии:
from yandex_music.utils.request_async import Request from yandex_music import ClientAsync request = Request(proxy_url='http://user:[email protected]') client = await ClientAsync(request=request).init()
Socks прокси не поддерживаются в асинхронной версии.
Про поддерживаемые прокси тут: proxy support — advanced usage — aiohttp
Изучение по примерам
Вот несколько примеров для обзора. Даже если это не Ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их.
Код примеров опубликован в открытом доступе, поэтому Вы можете взять его и начать писать вокруг своё.
Посетите эту страницу чтобы изучить официальные примеры.
Особенности использования асинхронного клиента
При работе с асинхронной версией библиотеке стоит всегда помнить следующие особенности:Пояснение ко второму пункту:
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 модуль. Чтобы настроить логирование на стандартный вывод, поместите
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 чате, где мы помогаем друг другу, присоединяйтесь!
Сообщить о баге можно создав Bug Report.
Предложить новую фичу или задать вопрос можно создав discussion.
Найти ответ на вопрос в документации библиотеки.
Список изменений
Весь список изменений ведётся в файле CHANGES.
rst.Реализации на других языках
C#
Реализация с совершенно другим подходом, так как используется API для frontend’a, а не мобильных и десктопных приложений: Winster332/Yandex.Music.Api.
@Winster332 не сильно проявляет активность, но существует форк, который продолжил начатое. Эндпоинты изменены с фронтовых на мобильные: K1llMan/Yandex.Music.Api.
PHP
Частично переписанная текущая библиотека на PHP: LuckyWins/yandex-music-api.
JavaScript
API wrapper на Node.JS. Не обновлялся больше двух лет: itsmepetrov/yandex-music-api. Продолжение разработки заброшенной библиотеки: kontsevoye/ym-api.
Разработанные проекты
Плагин для Kodi
Плагин может проигрывать пользовательские плейлисты и плейлисты Яндекса, поиск по Яндекс Музыке, радио.
Сайт проекта: ymkodi.ru. Исходный код: kodi.plugin.yandex-music. Автор: @Angel777d.
Telegram бот-клиент
Неофициальный бот. Умные и ваши плейлисты, понравившиеся треки.
Сайт проекта: music-yandex-bot.ru. Бот в Telegram: @music_yandex_bot. Автор: @MarshalX.
Статья на habr.com с описанием реализации: Под капотом бота-клиента Яндекс.Музыки.
Благодарность
Спасибо разработчикам python-telegram-bot. Выбрал Вас в качестве примера.
Внесение своего вклада в проект
Внесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан в CONTRIBUTING.md.
Вы можете помочь и сообщив о баге или о новом поле пришедшем от API.
Лицензия
Вы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с LGPL-3. Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.
Как перенести треки из Spotify в Яндекс.Музыку (полное руководство) / Хабр
Недавно компания Spotify заявила о временном уходе с рынка РФ. Сейчас не понятно, что будет с аккаунтами российских пользователей и сохраненной ими музыкой, поэтому самое время позаботиться о переносе своих любимых треков в другой сервис. В Яндекс.Музыку можно перенести треки и без подписки, поэтому пока что я выбрал её.
Итак, чтобы не потерять свою музыку, вам нужно воспользоваться одним из сервисов по ее переносу. (Как оказалось, у спотифай нет возможности вывести музыку в файл без сторонних приложений, по крайней мере я не нашел).
Способ 1. Автоперенос
У этого способа есть свои недостатки:
Если вам это не подходит — переходите сразу к способу 2.
1. Заходим на новую страницу импорта Яндекс.Музыки — видим возможность выбора сервиса из которого будет экспортироваться музыка, выбираем спотифай:
шаг 1. выбор2. Откроется страница со входом в спотифай, после входа появится предложение дать разрешение боту на использование ваших данных — соглашаемся (отключение бота показано в самом низу страницы)
шаг 2. принятие условий3. После этого вас вернет на страницу Яндекс.Музыки и вам нужно будет просто дождаться переноса ваших треков — все треки и плейлисты, которые есть в наличии перенесутся и станут доступны в вашем профиле.
шаг 3. ждем экспортаСпособ 2: Вручную и надежно
Буду показывать на примере tunemymusic, но, думаю, что порядок действий в других сервисах не будет сильно отличаться.
Если каких-то треков не найдется, вы можете загрузить их прямо со своего компьютера — инструкция. Они будут доступны только вам, конечно.
добавить свои треки с компьютера1. Зайдя на главную страницу сайта tunemymusic вы увидите большой банер, собственно, на нем нужно нажать кнопку «Давайте приступим».
шаг 1. начало2. После этого вам предложат выбрать сервис, из которого вы хотите перенести музыку — выбираем, конечно, Spotify (благо он идет первым).
шаг 2. выбор сервиса3. Далее вас автоматически перенесет на страницу Spotify, либо сверху появится плашка, на которую нужно нажать и вы окажитесь на этой самой странице. Тут нужно просто войти в свой аккаунт (если вы оплачивали подписку, то наверняка это уже делали раньше)
шаг 3. авторизация4. После входа вам откроется окно, в котором нужно резрешить приложению доступ к вашим данным (позже это можно будет отключить в настройках) сейчас нажимаем «Принимаю»
шаг 4. согласие5. Вас снова перенесет на сайт сервиса, где нужно нажать на кнопку «Загрузить из вашей учетной записи»
шаг 5. загрузка6. Приложение покажет все ваши треки и плейлисты, вам нужно выбрать те, которые вы хотите перенести.
шаг 6. выбор музыкиВыбираем и нажимаем «Далее: Выберите целевую платформу»
7. Здесь есть нюанс. Вы можете экспортировать всё файлом или же перенести на платформу напрямую. К сожалению, когда нажимаешь на Яндекс.Музыку он предлагает нам ввести пароль и логин от нее (без каких либо безопасных подключений к аккаунту, что кажется подозрительным), поэтому я просто перенес музыку в файл.
шаг 7.1. Выбор целевой платформыДля Яндекс.Музыки выбираем формат . txt.
шаг 7.2. Выбор форматаСервис заботливо переспросит нас о том, хотим ли мы перенести выбранную музыку — просто нажмите «Начать перенос музыки»
По завершению работы вы получите текстовый файл такого вида:
полученный файл8. Далее просто переходим на страницу импорта Яндекс.Музыки.
Не переживайте, чтобы импортировать музыку в этот сервис, не обязательно быть на него подписанным, я, например, на момент написания статьи не подписан.
Здесь вы можете выбрать файл, либо просто вставить весь его текст в соответствующее поле. Я вставил текстом и нажал «Найти»
шаг 8. вставка в яндекс.музыкуКакое-то время запрос будет обрабатываться, не переживайте, по завершению работы все ваши треки (если они есть в Яндекс.Музыке) найдутся и выпадет такой список:
шаг 9. сохранение в плейлист9. Нажмите кнопку «Сохранить в плейлист» и далее выберите плейлист в который хотите сохранить все свои треки. Либо вы можете сделать тоже самое для каждого трека отдельно.
Готово. Музыка теперь в вашем аккаунте, даже если нет подписки!
Пункт 10 не обязательный, но я бы на вашем месте позаботился о своих данных, зашел в спотифай, во вкладку «Account» далее «Apps» и нажал «Remove access»
удаление приложения из аккаунта spotifyТак приложение больше не сможет получать ваши личные данные.
Player — Яндекс.Музыка. Помощь
- Выбор плеера
- Управление плеером
- Настройка эквалайзера
- HQ audio
- Комбинации клавиш
По умолчанию плеер выбирается автоматически. При выборе учитывается ваш браузер и скорость браузера.
Войти с Яндекс ID.
Зайдите в настройки.
На вкладке Другое справа от Типа проигрывателя нажмите Выбрать автоматически.
Выберите игрока из списка.
Если у вас Windows XP или Windows Server 2003, вы можете выбрать плеер (Flash или HTML5):
Вы можете управлять параметрами прослушивания в плеере внизу экрана и из списка воспроизведения. Чтобы открыть список воспроизведения, щелкните в проигрывателе.
Для управления порядком воспроизведения дорожек используйте следующие значки:
Значок | Действие |
---|---|
Перейти к предыдущей дорожке. | |
или | Воспроизведение или приостановка дорожки. |
Перейти к следующему треку. | |
Откройте очередь прослушивания. | |
Добавьте трек в свою библиотеку. | |
Добавьте трек в очередь прослушивания или список воспроизведения. | |
Поделись треком. | |
Трек больше не рекомендую. | |
Включите качественный звук. | |
Воспроизведение дорожек в случайном порядке. | |
, нажмите один раз | Повтор списка треков. |
, нажмите дважды | Повтор текущего трека. |
Отрегулируйте громкость. Чтобы регулировать громкость постепенно, без резких изменений, зайдите в настройки Яндекс. Музыки и включите опцию Логарифмическая шкала громкости. | |
Изменение скорости воспроизведения подкаста. |
- Добавить треки
На всех страницах Яндекс.Музыки для всех треков и альбомов (постоянно или при наведении на них курсора) отображаются следующие значки:
- — включить музыку.
- → — добавить музыку в очередь воспроизведения или плейлист.
- Просмотр треков
Чтобы просмотреть очередь прослушивания, нажмите в плеере.
Примечание. Вы не можете просматривать плейлист во время прослушивания Яндекс Радио.
- Изменить порядок дорожек
Перейти в очередь на прослушивание.
Нажмите и удерживайте дорожку, затем перетащите ее в нужное место в списке.
- Удалить треки из очереди на прослушивание
Чтобы удалить:
Один трек — наведите на него курсор и нажмите
Все треки — нажмите Очистить в правом верхнем углу.
Ограничение. Эквалайзер доступен только в Яндекс.Браузере, Firefox, Chrome, Opera (кроме версии 12). Эквалайзер не поддерживается в других браузерах.
Чтобы включить эквалайзер:
Нажмите на панели плеера.
В верхней части шкалы громкости нажмите .
Задайте частоты или выберите автоматические настройки из списка в разделе «По умолчанию».
Чтобы выключить эквалайзер:
Нажмите на панели плеера.
В верхней части шкалы громкости нажмите .
В левом верхнем углу открывшегося окна установите для параметра Вкл значение Выкл.
В каталоге может быть один и тот же трек с разным качеством звука. В стандартном режиме качество трека выбирается автоматически. Обычно это MP3 с размером 19.Битрейт 2 Кбит/с. Чтобы воспроизвести музыку с битрейтом 320 Кбит/с, нажмите (Высокое качество) в плеере. В режиме высокого качества всегда будет воспроизводиться самая качественная версия трека.
Примечание. Качество звука меняется не сразу, а со следующим треком. Если вы хотите прослушать текущий трек в высоком качестве, воспроизведите его еще раз.
Звук высокого качества доступен только при наличии платной подписки. Вы будете использовать больше данных, если будете слушать музыку с высоким битрейтом.
- Формат — MP3.
- Частота дискретизации — 44 100 Гц.
Прочие технические характеристики
In most browsers, you can control the player using keyboard shortcuts under the active tab in Yandex Music:
Key | Action |
---|---|
+ and – | Adjust объем. |
0 | Включение и выключение звука без прерывания воспроизведения. |
P или пробел | Остановить или запустить трек. |
Shift + > | Перемотка вперед на 5 секунд. |
Shift + < | Перемотать на 5 секунд назад. |
K | Перейти к предыдущей дорожке. |
L | Перейти к следующему треку. |
F | Добавьте трек в свою библиотеку. |
D | Трек больше не рекомендую. |
Связаться со службой поддержки