{"id":15486515,"url":"https://github.com/marshalx/yandex-music-api","last_synced_at":"2025-05-14T03:10:02.784Z","repository":{"id":39635633,"uuid":"185270983","full_name":"MarshalX/yandex-music-api","owner":"MarshalX","description":"Неофициальная Python библиотека для работы с API сервиса Яндекс.Музыка","archived":false,"fork":false,"pushed_at":"2025-01-18T19:04:48.000Z","size":1630,"stargazers_count":1010,"open_issues_count":31,"forks_count":87,"subscribers_count":32,"default_branch":"main","last_synced_at":"2025-05-08T11:16:15.000Z","etag":null,"topics":["api","async","asynchronous","asyncio","library","python","yandex","yandex-api","yandex-music","yandexmusic"],"latest_commit_sha":null,"homepage":"https://yandex-music.rtfd.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MarshalX.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"MarshalX"}},"created_at":"2019-05-06T20:59:04.000Z","updated_at":"2025-05-05T14:07:56.000Z","dependencies_parsed_at":"2024-01-01T04:06:14.021Z","dependency_job_id":"56c1abd0-e29a-465c-baa6-b7a3626482db","html_url":"https://github.com/MarshalX/yandex-music-api","commit_stats":{"total_commits":503,"total_committers":33,"mean_commits":"15.242424242424242","dds":0.6242544731610338,"last_synced_commit":"2a09dcb6f966303bfb31e594e7d568b32e7e12dd"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshalX%2Fyandex-music-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshalX%2Fyandex-music-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshalX%2Fyandex-music-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MarshalX%2Fyandex-music-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MarshalX","download_url":"https://codeload.github.com/MarshalX/yandex-music-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059511,"owners_count":22007769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","async","asynchronous","asyncio","library","python","yandex","yandex-api","yandex-music","yandexmusic"],"created_at":"2024-10-02T06:08:43.435Z","updated_at":"2025-05-14T03:09:57.769Z","avatar_url":"https://github.com/MarshalX.png","language":"Python","funding_links":["https://github.com/sponsors/MarshalX"],"categories":[],"sub_categories":[],"readme":"## Yandex Music API\n\n\u003e Делаю то, что по определённым причинам не сделала компания Yandex.\n\n⚠️ Это неофициальная библиотека.\n\nСообщество разработчиков общаются и помогают друг другу в [Telegram чате](https://t.me/yandex_music_api), присоединяйтесь!\n\n[![Поддерживаемые Python версии](https://img.shields.io/badge/python-3.8+-blue.svg)](https://pypi.org/project/yandex-music/)\n[![Покрытие кода тестами](https://codecov.io/gh/MarshalX/yandex-music-api/branch/main/graph/badge.svg)](https://codecov.io/gh/MarshalX/yandex-music-api)\n[![Качество кода](https://api.codacy.com/project/badge/Grade/27011a5a8d9f4b278d1bfe2fe8725fed)](https://app.codacy.com/gh/MarshalX/yandex-music-api)\n[![Статус тестов](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml/badge.svg)](https://github.com/MarshalX/yandex-music-api/actions/workflows/test.yml)\n[![Статус документации](https://readthedocs.org/projects/yandex-music/badge/?version=latest)](https://yandex-music.readthedocs.io/en/latest/?badge=latest)\n[![Лицензия LGPLv3](https://img.shields.io/badge/license-LGPLv3-lightgrey.svg)](https://www.gnu.org/licenses/lgpl-3.0.html)\n\n### Содержание\n  - [Введение](#введение)\n    1.  [Доступ к вашим данным Яндекс.Музыка](#доступ-к-вашим-данным-яндексмузыка)\n  - [Установка](#установка)\n  - [Начало работы](#начало-работы)\n    1.  [Изучение по примерам](#изучение-по-примерам)\n    2.  [Особенности использования асинхронного клиента](#особенности-использования-асинхронного-клиента)\n    3.  [Логирование](#логирование)\n    4.  [Документация](#документация)\n  - [Получение помощи](#получение-помощи)\n  - [Список изменений](#список-изменений)\n  - [Реализации на других языках](#реализации-на-других-языках)\n  - [Внесение своего вклада в проект](#внесение-своего-вклада-в-проект)\n  - [Спонсоры](#спонсоры)\n  - [Лицензия](#лицензия)\n\n### Введение\n\nЭта библиотека предоставляет Python интерфейс для никем незадокументированного и сделанного только для себя API Яндекс Музыки.\n\nОна совместима с версиями Python 3.8+ и поддерживает работу как с синхронным, так и с асинхронным (asyncio) кодом.\n\nВ дополнение к реализации чистого API данная библиотека имеет ряд классов-обёрток — объектов высокого уровня, дабы сделать разработку клиентов и скриптов простой и понятной. Вся документация была написана с нуля исходя из логического анализа в ходе обратной разработки (reverse engineering) API.\n\n#### Доступ к вашим данным Яндекс.Музыка\n\nЗадача по получению токена для доступа к данным лежит на плечах разработчиков, использующих данную библиотеку. О том как получить токен читайте в [документации](https://yandex-music.readthedocs.io/en/main/token.html).\n\n### Установка\n\nВы можете установить или обновить Yandex Music API с помощью команды:\n\n``` shell\npip install -U yandex-music\n```\n\nИли вы можете установить из исходного кода с помощью команды:\n\n``` shell\ngit clone https://github.com/MarshalX/yandex-music-api\ncd yandex-music-api\npython setup.py install\n```\n\n### Начало работы\n\nПриступив к работе, первым делом необходимо создать экземпляр клиента.\n\nИнициализация синхронного клиента:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client()\nclient.init()\n\n# или\n\nclient = Client().init()\n```\n\nИнициализация асинхронного клиента:\n\n``` python\nfrom yandex_music import ClientAsync\n\nclient = ClientAsync()\nawait client.init()\n\n# или\n\nclient = await Client().init()\n```\n\nВызов `init()` необходим для получения информации — упрощения будущих запросов.\n\nРабота без авторизации ограничена. Так, например, для загрузки будут доступны только первые 30 секунд аудиофайла. Для понимания всех ограничений зайдите на сайт Яндекс.Музыка в режиме инкогнито и воспользуйтесь сервисом.\n\nДля доступа к личным данным следует авторизоваться. Это осуществляется через токен аккаунта Яндекс.Музыка.\n\nАвторизация:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client('token').init()\n```\n\nПосле успешного создания клиента вы вольны в выборе необходимого метода из API. Все они доступны у объекта класса `Client`. Подробнее в методах клиента в [документации](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).\n\nПример получения первого трека из плейлиста \"Мне нравится\" и его загрузки:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client('token').init()\nclient.users_likes_tracks()[0].fetch_track().download('example.mp3')\n```\n\nВ примере выше клиент получает список треков, которые были отмечены как понравившиеся. API возвращает объект [TracksList](https://yandex-music.readthedocs.io/en/latest/yandex_music.tracks_list.html), в котором содержится список с треками класса [TrackShort](https://yandex-music.readthedocs.io/en/latest/yandex_music.track_short.html). Данный класс содержит наиважнейшую информацию о треке и никаких подробностей, поэтому для получения полной версии трека со всей информацией необходимо обратиться к методу `fetch_track()`. Затем можно скачать трек методом `download()`.\n\nПример получения треков по ID:\n\n``` python\nfrom yandex_music import Client\n\nclient = Client().init()\nclient.tracks(['10994777:1193829', '40133452:5206873', '48966383:6693286', '51385674:7163467'])\n```\n\nВ качестве ID трека выступает его уникальный номер и номер альбома. Первым треком из примера является следующий трек:music.yandex.ru/album/**1193829**/track/**10994777**\n\nВыполнение запросов с использованием прокси в синхронной версии:\n\n``` python\nfrom yandex_music.utils.request import Request\nfrom yandex_music import Client\n\nrequest = Request(proxy_url='socks5://user:password@host:port')\nclient = Client(request=request).init()\n```\n\nПримеры Proxy URL:\n  - socks5://user:\u003cpassword@host\u003e:port\n  - \u003chttp://host:port\u003e\n  - \u003chttps://host:port\u003e\n  - \u003chttp://user:password@host\u003e\n\nБольше примеров тут: [proxies - advanced usage - requests](https://2.python-requests.org/en/master/user/advanced/#proxies)\n\nВыполнение запросов с использованием прокси в асинхронной версии:\n\n``` python\nfrom yandex_music.utils.request_async import Request\nfrom yandex_music import ClientAsync\n\nrequest = Request(proxy_url='http://user:pass@some.proxy.com')\nclient = await ClientAsync(request=request).init()\n```\n\nSocks прокси не поддерживаются в асинхронной версии.\n\nПро поддерживаемые прокси тут: [proxy support - advanced usage - aiohttp](https://docs.aiohttp.org/en/stable/client_advanced.html#proxy-support)\n\n#### Изучение по примерам\n\nВот несколько примеров для обзора. Даже если это не ваш подход к обучению, пожалуйста, возьмите и бегло просмотрите их.\n\nКод примеров опубликован в открытом доступе, поэтому вы можете взять его и начать писать вокруг него свой.\n\nПосетите [эту страницу](https://github.com/MarshalX/yandex-music-api/blob/main/examples/), чтобы изучить официальные примеры.\n\n#### Особенности использования асинхронного клиента\n\nПри работе с асинхронной версией библиотеке стоит всегда помнить\nследующие особенности:\n  - Клиент следует импортировать с названием `ClientAsync`, а не просто `Client`.\n  - При использовании методов-сокращений нужно выбирать метод с суффиксом `_async`.\n\nПояснение ко второму пункту:\n\n``` python\nfrom yandex_music import ClientAsync\n\nclient = await ClientAsync('token').init()\nliked_short_track = (await client.users_likes_tracks())[0]\n\n# правильно\nfull_track = await liked_short_track.fetch_track_async()\nawait full_track.download_async()\n\n# НЕПРАВИЛЬНО\nfull_track = await liked_short_track.fetch_track()\nawait full_track.download()\n```\n\n#### Логирование\n\nДанная библиотека использует модуль `logging`. Чтобы настроить логирование на стандартный вывод, поместите в начало вашего скрипта следующий код:\n\n``` python\nimport logging\nlogging.basicConfig(\n    level=logging.DEBUG,\n    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'\n)\n```\n\nВы также можете использовать логирование в вашем приложении, вызвав `logging.getLogger()` и установить уровень какой вы хотите:\n\n``` python\nlogger = logging.getLogger()\nlogger.setLevel(logging.INFO)\n```\n\nЕсли вы хотите `DEBUG` логирование:\n\n``` python\nlogger.setLevel(logging.DEBUG)\n```\n\n### Документация\n\nДокументация `yandex-music-api` расположена на [readthedocs.io](https://yandex-music.readthedocs.io/). Вашей отправной точкой должен быть класс `Client`, а точнее его методы. Именно они выполняют все запросы на API и возвращают вам готовые объекты. [Класс Client на readthedocs.io](https://yandex-music.readthedocs.io/en/latest/yandex_music.client.html).\n\n### Получение помощи\n\nПолучить помощь можно несколькими путями:\n  - Задать вопрос в [Telegram чате](https://t.me/yandex_music_api), где мы помогаем друг другу, присоединяйтесь\\!\n  - Сообщить о баге можно [создав Bug Report](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX\u0026labels=bug\u0026template=bug-report.md\u0026title=).\n  - Предложить новую фичу или задать вопрос можно [создав discussion](https://github.com/MarshalX/yandex-music-api/discussions/new).\n  - Найти ответ на вопрос в [документации библиотеки](https://yandex-music.readthedocs.io/en/latest/).\n\n### Список изменений\n\nВесь список изменений ведётся в файле [CHANGES.md](https://github.com/MarshalX/yandex-music-api/blob/main/CHANGES.md).\n\n### Реализации на других языках\n\n- [OpenAPI спецификация](https://github.com/acherkashin/yandex-music-open-api/blob/main/src/yandex-music.yaml)\n- [C#](https://github.com/K1llMan/Yandex.Music.Api)\n- [PHP](https://github.com/LuckyWins/yandex-music-api)\n- [TS](https://github.com/acherkashin/yandex-music-open-api)\n- [JS](https://github.com/kontsevoye/ym-api)\n\n### Внесение своего вклада в проект\n\nВнесение своего вклада максимально приветствуется! Есть перечень пунктов, который стоит соблюдать. Каждый пункт перечня расписан в [CONTRIBUTING.md](https://github.com/MarshalX/yandex-music-api/blob/main/CONTRIBUTING.md).\n\nВы можете помочь и сообщив о [баге](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=MarshalX\u0026labels=bug\u0026template=bug-report.md\u0026title=) или о [новом поле пришедшем от API](https://github.com/MarshalX/yandex-music-api/issues/new?assignees=\u0026labels=feature\u0026template=found-unknown-fields.md\u0026title=%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).\n\n### Спонсоры\n\n#### JetBrains\n\n\u003cimg height=\"150\" width=\"150\" src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png\" alt=\"JetBrains Logo (Main) logo.\"\u003e\n\n\u003e JetBrains предоставляет бесплатный набор инструментов для разработки активным контрибьюторам некоммерческих проектов с открытым исходным кодом.\n\n[Лицензии для проектов с открытым исходным кодом — Программы поддержки](https://jb.gg/OpenSourceSupport)\n\n### Лицензия\n\nВы можете копировать, распространять и модифицировать программное обеспечение при условии, что модификации описаны и лицензированы бесплатно в соответствии с [LGPL-3](https://www.gnu.org/licenses/lgpl-3.0.html). Произведения производных (включая модификации или что-либо статически связанное с библиотекой) могут распространяться только в соответствии с LGPL-3, но приложения, которые используют библиотеку, необязательно.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshalx%2Fyandex-music-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarshalx%2Fyandex-music-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarshalx%2Fyandex-music-api/lists"}