From 51f594014023da75b297e8a776be12ff014ecc66 Mon Sep 17 00:00:00 2001 From: Lev Plyusnin Date: Mon, 4 Sep 2023 21:09:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B5=20400?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++++++++- pyproject.toml | 2 +- ymd/cli.py | 4 +++- ymd/core.py | 8 ++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c960c63..1e9d9c1 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,8 @@ usage: yandex-music-downloader [-h] [--hq] [--skip-existing] [--add-lyrics] (--artist-id | --album-id | --track-id | --playlist-id <владелец плейлиста>/<тип плейлиста> | -u URL) [--unsafe-path] [--dir <Папка>] [--path-pattern <Паттерн>] --session-id [--user-agent ] + сессии> [--spravka ] + [--user-agent ] Загрузчик музыки с сервиса Яндекс.Музыка @@ -129,11 +130,24 @@ ID: Авторизация: --session-id + --spravka --user-agent по умолчанию: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 ``` +## Ошибка 400 +Ниже приведена инструкция по устранению ошибки 400. +Перейдите на сайт Яндекс.Музыки, затем проделайте следующие шаги: + +### Для Firefox +1. Нажмите на иконку замочка слева от адреса сайта +2. Нажмите `Clear cookies and site data` +3. Нажмите `Remove` +4. Перезагрузите страницу +5. Прорешайте капчу +6. Скопируйте значение куки `spravka` - передайте его как аргумент + `--spravka` ## Спасибо Разработчикам проекта [yandex-music-download](https://github.com/kaimi-io/yandex-music-download). Оттуда был взят [код хэширования](https://github.com/kaimi-io/yandex-music-download/blob/808443cb32be82e1f54b2f708884cb7c941b4371/src/ya.pl#L720). diff --git a/pyproject.toml b/pyproject.toml index bd801d9..fd51d1f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "yandex-music-downloader" -version = "1.0.3" +version = "1.0.4" description = "Загрузчик музыки с сервиса Яндекс.Музыка" requires-python = ">=3.9" readme = "README.md" diff --git a/ymd/cli.py b/ymd/cli.py index 3a3b98b..e69fa8c 100644 --- a/ymd/cli.py +++ b/ymd/cli.py @@ -120,6 +120,7 @@ def main(): auth_group.add_argument('--session-id', required=True, metavar='') + auth_group.add_argument('--spravka', metavar='') auth_group.add_argument('--user-agent', default=DEFAULT_USER_AGENT, metavar='', @@ -149,7 +150,8 @@ def main(): time.sleep(args.delay) def setup_session(session: Session): - core.setup_session(session, args.session_id, args.user_agent) + core.setup_session(session, args.session_id, args.user_agent, + args.spravka) session.hooks = {'response': response_hook} session = cached_session = Session() diff --git a/ymd/core.py b/ymd/core.py index e845bdf..d3127c8 100644 --- a/ymd/core.py +++ b/ymd/core.py @@ -73,9 +73,13 @@ def set_id3_tags(path: Path, track: BasicTrackInfo, lyrics: Optional[str], tag.save() -def setup_session(session: Session, session_id: str, - user_agent: str) -> Session: +def setup_session(session: Session, + session_id: str, + user_agent: str, + spravka: Optional[str] = None) -> Session: session.cookies.set('Session_id', session_id, domain='yandex.ru') + if spravka: + session.cookies.set('spravka', spravka, domain='yandex.ru') session.headers['User-Agent'] = user_agent session.headers['X-Retpath-Y'] = urllib.parse.quote_plus( 'https://music.yandex.ru')