All Projects → MarshalX → Yandex Music Api

MarshalX / Yandex Music Api

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

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Yandex Music Api

Item Nbt Api
Add custom NBT tags to Items/Tiles/Entities without NMS!
Stars: ✭ 163 (-51.34%)
Mutual labels:  api, library
Newsapi Python
A Python Client for News API
Stars: ✭ 196 (-41.49%)
Mutual labels:  api, library
Riot Api Java
Riot Games API Java Library
Stars: ✭ 184 (-45.07%)
Mutual labels:  api, library
Colore
A powerful C# library for Razer Chroma's SDK
Stars: ✭ 121 (-63.88%)
Mutual labels:  api, library
Mtproto Core
Telegram API JS (MTProto) client library for browser and nodejs
Stars: ✭ 242 (-27.76%)
Mutual labels:  api, library
Coinbasepro Csharp
The unofficial .NET/C# client library for the Coinbase Pro/GDAX API
Stars: ✭ 143 (-57.31%)
Mutual labels:  api, library
Libmoji
📚 Bitmoji's API made easy for everyone
Stars: ✭ 189 (-43.58%)
Mutual labels:  api, library
Grammers
(tele)gramme.rs - use Telegram's API from Rust
Stars: ✭ 109 (-67.46%)
Mutual labels:  api, library
Instagram Api Python
Unofficial instagram API, give you access to ALL instagram features (like, follow, upload photo and video and etc)! Write on python.
Stars: ✭ 2,357 (+603.58%)
Mutual labels:  api, library
Messenger4j
A Java library for building Chatbots on the Facebook Messenger Platform - easy and fast.
Stars: ✭ 199 (-40.6%)
Mutual labels:  api, library
Stripe Sdk
A simple and flexible Stripe library for Flutter with complete support for SCA and PSD2.
Stars: ✭ 120 (-64.18%)
Mutual labels:  api, library
Discordeno
Discord API library for Deno
Stars: ✭ 254 (-24.18%)
Mutual labels:  api, library
Tik4net
Manage mikrotik routers with .NET C# code via ADO.NET like API or enjoy O/R mapper like highlevel api.
Stars: ✭ 118 (-64.78%)
Mutual labels:  api, library
Deeply
PHP client for the DeepL.com translation API (unofficial)
Stars: ✭ 152 (-54.63%)
Mutual labels:  api, library
Typescript Hapi Starter
🚀 Starter for building APIs with Hapi + Typescript!
Stars: ✭ 117 (-65.07%)
Mutual labels:  api, library
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (-43.88%)
Mutual labels:  api, library
Soundcloud
Soundcloud.com API wrapper written in PHP with OAuth2 support.
Stars: ✭ 94 (-71.94%)
Mutual labels:  api, library
Xseries
Library for cross-version Minecraft Bukkit support and various efficient API methods.
Stars: ✭ 109 (-67.46%)
Mutual labels:  api, library
Aegis.cpp
Discord C++ library for interfacing with the API. Join our server:
Stars: ✭ 198 (-40.9%)
Mutual labels:  api, library
Stripe
A comprehensive PHP Library for the Stripe.
Stars: ✭ 256 (-23.58%)
Mutual labels:  api, library

API Yandex Music - неофициальная Python библиотека

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

Маленькое сообщество разработчиков общаются и помогают друг другу в Telegram чатике <https://t.me/yandex_music_api>_, присоединяйтесь!

.. image:: https://img.shields.io/pypi/v/yandex-music.svg :target: https://pypi.org/project/yandex-music/ :alt: Версия пакета PyPi

.. image:: https://img.shields.io/badge/python-3.6+-blue.svg :target: https://pypi.org/project/yandex-music/ :alt: Поддерживаемые Python версии

.. image:: https://codecov.io/gh/MarshalX/yandex-music-api/branch/development/graph/badge.svg :target: https://codecov.io/gh/MarshalX/yandex-music-api :alt: Покрытие кода тестами

.. image:: https://api.codacy.com/project/badge/Grade/27011a5a8d9f4b278d1bfe2fe8725fed :target: https://www.codacy.com/manual/MarshalX/yandex-music-api :alt: Качество кода

.. image:: https://github.com/MarshalX/yandex-music-api/workflows/Full%20test/badge.svg :target: https://github.com/MarshalX/yandex-music-api/actions?query=workflow%3A%22Full+test%22 :alt: Статус тестов

.. image:: https://readthedocs.org/projects/yandex-music/badge/?version=latest :target: https://yandex-music.readthedocs.io/ru/latest/?badge=latest :alt: Статус документации

.. image:: https://img.shields.io/badge/license-LGPLv3-lightgrey.svg :target: https://www.gnu.org/licenses/lgpl-3.0.html :alt: Лицензия LGPLv3

.. image:: https://img.shields.io/badge/telegram-чат-blue.svg :target: https://t.me/yandex_music_api :alt: Telegram чат

========== Содержание

  • Введение_

    #. Доступ к вашим данным на Яндексе_

  • Установка_

  • Начало работы_

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

    #. Логирование_

    #. Документация_

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

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

    #. C#_

    #. PHP_

    #. JavaScript_

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

    #. Плагин для Kodi_

    #. Telegram бот-клиент_

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

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

  • Лицензия_

======== Введение

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

Она совместима с версиями Python 3.6+.

В дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток объектов высокого уровня дабы сделать разработку клиентов и скриптов простой и понятной.


Доступ к вашим данным на Яндексе

Значения констант CLIENT_ID и CLIENT_SECRET <https://github.com/MarshalX/yandex-music-api/blob/main/yandex_music/client.py#L52>_ позаимствовано у официального приложения-клиента сервиса Яндекс.Музыка из магазина Microsoft Store. Так как API является закрытым и используется только внутри компании Яндекс сейчас невозможно зарегистрировать своё собственное приложение на oauth.yandex.ru <https://oauth.yandex.ru/>_, а следовательно, использовать свои значения констант.

========= Установка

Вы можете установить или обновить yandex-music-api при помощи:

.. code:: shell

$ pip install yandex-music --upgrade

Или Вы можете установить из исходного кода с помощью:

.. code:: shell

$ git clone https://github.com/MarshalX/yandex-music-api --recursive
$ cd yandex-music-api
$ python setup.py install

============= Начало работы

Приступив к работе первым делом необходимо создать экземпляр клиента.

Инициализация клиента:

.. code:: python

from yandex_music import Client

client = Client()

Для доступа к своим личным данным следует авторизоваться. Это можно осуществить через OAuth токен или логин с паролем.

Авторизация по логину и паролю:

.. code:: python

from yandex_music import Client

client = Client.from_credentials('[email protected]', 'password')

Авторизация по токену:

.. code:: python

from yandex_music import Client

client = Client('token')
# или
client = Client.from_token('token')

После успешного создания клиента Вы вольны в выборе необходимого метода из API. Все они доступны у объекта класса Client. Подробнее в методах клиента в документации <https://yandex-music.readthedocs.io/ru/latest/yandex_music.client.html>_.

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

.. code:: python

from yandex_music import Client

client = Client.from_credentials('[email protected]', 'password')
client.users_likes_tracks()[0].fetch_track().download('example.mp3')

В примере выше клиент получает список треков которые были отмечены как понравившиеся. API возвращает объект TracksList <https://yandex-music.readthedocs.io/ru/latest/yandex_music.tracks_list.html>_ в котором содержится список с треками класса TrackShort <https://yandex-music.readthedocs.io/ru/latest/yandex_music.track_short.html>_. Данные класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методу fetch_track(). Затем можно скачать трек методом download().

Пример получения треков по ID:

.. code:: python

from yandex_music import Client

client = Client()
client.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])

В качестве ID трека выступает его уникальный номер и номер альбома. Первым треком из примера является следующий трек: music.yandex.ru/album/1193829/track/10994777

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

.. code:: python

from yandex_music.utils.request import Request
from yandex_music import Client

request = Request(proxy_url='socks5://user:[email protected]:port')
client = Client(request=request)

Примеры proxy url:

Больше примеров тут: proxies - advanced usage - requests <https://2.python-requests.org/en/master/user/advanced/#proxies>_

Пример инициализации клиента с обработкой капчи:

.. code:: python

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-функции:

.. code:: python

def proc_captcha(captcha):
    captcha.download('captcha.png')
    return input('Число с картинки: ')

client = Client.from_credentials('login', 'pass', captcha_callback=proc_captcha)

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

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

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

Посетите эту страницу <https://github.com/MarshalX/yandex-music-api/blob/main/examples/>_ чтобы изучить официальные примеры.


Логирование

Данная библиотека использует logging модуль. Чтобы настроить логирование на стандартный вывод, поместите

.. code:: python

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

в начало вашего скрипта.

Вы также можете использовать логирование в вашем приложении, вызвав logging.getLogger() и установить уровень какой Вы хотите:

.. code:: python

logger = logging.getLogger()
logger.setLevel(logging.INFO)

Если Вы хотите DEBUG логирование:

.. code:: python

logger.setLevel(logging.DEBUG)

============ Документация

Документация yandex-music-api расположена на readthedocs.io <https://yandex-music.readthedocs.io/>. Вашей отправной точкой должен быть класс Client, а точнее его методы. Именно они выполняют все запросы на API и возвращают Вам готовые объекты. Класс Client на readthedocs.io <https://yandex-music.readthedocs.io/ru/latest/yandex_music.client.html>.

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

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

  • Задать вопрос в Telegram чатике <https://t.me/yandex_music_api>_, где мы помогаем друг другу, присоединяйтесь!
  • Сообщить о баге, предложить новую фичу или задать вопрос можно создав issue <https://github.com/MarshalX/yandex-music-api/issues/new/choose>_.
  • Найти ответ на вопрос в документации библиотеки <https://yandex-music.readthedocs.io/ru/latest/>_.

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

-- C#

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

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


PHP

Частично переписанная текущая библиотека на PHP: LuckyWins/yandex-music-api <https://github.com/LuckyWins/yandex-music-api>_.


JavaScript

API wrapper на Node.JS. Не обновлялся больше двух лет: itsmepetrov/yandex-music-api <https://github.com/itsmepetrov/yandex-music-api>. Продолжение разработки заброшенной библиотеки: kontsevoye/ym-api <https://github.com/kontsevoye/ym-api>.

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


Плагин для Kodi

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

Сайт проекта: ymkodi.ml <https://ymkodi.ml/>. Исходный код: kodi.plugin.yandex-music <https://github.com/Angel777d/kodi.plugin.yandex-music>. Автор: @Angel777d <https://github.com/Angel777d>_.

.. image:: https://raw.githubusercontent.com/Angel777d/kodi.plugin.yandex-music/master/assets/img/kody_yandex_music_plugin.png :target: https://ymkodi.ml/ :alt: Плагин для Kodi


Telegram бот-клиент

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

Сайт проекта: music-yandex-bot.ru <https://music-yandex-bot.ru/>. Бот в Telegram: @music_yandex_bot <https://t.me/music_yandex_bot>. Автор: @MarshalX <https://marshal.by/>_.

Статья на habr.com с описанием реализации: Под капотом бота-клиента Яндекс.Музыки <https://habr.com/ru/post/487428/>_.

.. image:: https://hsto.org/webt/uv/4s/a3/uv4sa3pslohuzlmuzrjzteju2dk.png :target: https://music-yandex-bot.ru/ :alt: Telegram бот-клиент

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

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

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

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

Вы можете помочь и сообщив о баге <https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX&labels=bug&template=bug-report.md&title=>_ или о новом поле пришедшем от API <https://github.com/MarshalX/yandex-music-api/issues/new?assignees=&labels=feature&template=found-unknown-fields.md&title=%D0%9D%D0%BE%D0%B2%D0%BE%D0%B5+%D0%BD%D0%B5%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%BD%D0%BE%D0%B5+%D0%BF%D0%BE%D0%BB%D0%B5+%D0%BE%D1%82+API>_.

======== Лицензия

Вы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с LGPL-3 <https://www.gnu.org/licenses/lgpl-3.0.html>_. Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].