Skip to main content

Неофициальная Python библиотека для работы с API сервиса Яндекс.Музыка。

项目描述

Yandex 音乐 API

Делаю то, что по определённым причинам не сделала компания Yandex。

⚠️ Это неофициальная библиотека。

Сообщество разработчиков общаются и помогают друг другу в Telegram чате , присоединяйтесь!

Поддерживаемые Python версии Покрытие кода тестами Качество кода Статус тестов Статус документации Лицензия LGPLv3

Содержание

Введение

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

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

В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток объектов высокого уровня дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки(逆向工程)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。Все они доступны у объекта класса客户。Подробнее в методах клиента в документации

Пример получения первого трека из плейлиста “Мне нравится” и его загрузка:

from yandex_music import Client

client = Client('token').init()
client.users_likes_tracks()[0].fetch_track().download('example.mp3')

В примере выше клиент получает список треков которые были отмечены как понравившиеся。API возвращает объект TracksList в котором содержится список с треками класса TrackShort。Данный класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методу fetch_track() . Затем можно скачать трек методом下载()

Пример получения треков по 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()

Примеры 代理网址:

Больше примеров тут:代理 - 高级用法 - 请求

Выполнение запросов с использование прокси в асинхронной версии:

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()

袜子 прокси не поддерживаются в асинхронной версии。

Про поддерживаемые прокси тут:代理支持 - 高级用法 - aiohttp

Изучение по примерам

Вот несколько примеров для обзора。Даже если это не Ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их。

Код примеров опубликован в открытом доступе, поэтому Вы можете взять его и начать писать вокруг своё。

Посетите эту страницу чтобы изучить официальные примеры。

Особенности использования асинхронного клиента

При работе с асинхронной версией библиотеке стоит всегда помнить следующие особенности:

  • Клиент следует импортировать с названием ClientAsync , а не просто Client

  • При использовании методов-сокращений нужно выбирать метод с суффиксом _async

Пояснение ко второму пункту:

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

Получение помощи

Получить помощь можно несколькими путями:

Список изменений

Весь список изменений ведётся в файле CHANGES.rst

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

C#

Реализация с совершенно другим подходом, так как используется API для frontend'a, а не мобильных и десктопных приложений: Winster332/Yandex.Mus .

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

PHP

Частично переписанная текущая библиотека на PHP: LuckyWins/yandex-music-api

JavaScript

API 包装器 - Node.JS。Не обновлялся больше двух лет: itsmepetrov/yandex-music-api。Продолжение разработки заброшенной библиотеки: kontsevoye/ym-api

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

Плагин для Kodi

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

Сайт проекта: ymkodi.ru。Исходный код: kodi.plugin.yandex-music。Автор: @Angel777d

Плагин для Kodi

电报бот-клиент

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

Сайт проекта: music-yandex-bot.ru。Бот в 电报:@music_yandex_bot。Автор:@MarshalX

Статья на habr.com с описанием реализации: Под капотом бота-клиента Яндекс.Музыки

电报бот-клиент

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

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

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

Внесение своего вклада максимально приветствуется!Есть перечень пунктов, который стоит соблюдать。Каждый пункт перечня расписан в CONTRIBUTING.md

Вы можете помочь и сообщив о баге или о новом поле пришедшем от API

Лицензия

Вы можете копировать, распространять и модифициров​​ать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с LGPL-3 . Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

yandex-music-2.0.1.tar.gz (158.8 kB 查看哈希

已上传 source