Расстройств много, а что делать? Есть два варианта:
- Мигрировать на другой сервис. Альтернативы: Youtube Music, Spotify, Apple Music и тд. Но есть нюанс — нужна карта, которую будут принимать данные сервисы, и МИР, к сожалению, в их число не входит. Поэтому данный вариант не рассматривается.
- Скачивать оставшиеся треки для сохранения нажитого непосильным трудом. Вот об этом способе и поговорим.
Для скачивания существующих плейлистов (да и вообще музыки с Яндекс.Музыки) я нашел два инструмента:
- На Perl — Yandex Music Downloader | наиболее стабильный вариант
- На Python — yandex-music-downloader | периодически чудит
Базовый функционал +/- одинаковый, но так как у меня уже стоял python, выбор пал на yandex-music-downloader.
yandex-music-downloader / 2023-07-14
Установка:
git clone https://github.com/llistochek/yandex-music-downloader.git
cd yandex-music-downloader
pip install -r requirements.txt
python3 main.py
+ вытаскиваем из вашего браузера cookie для авторизации = Session_id
и можно начинать.
Синтаксис скрипта:
usage: main.py [-h] [--hq] [--skip-existing] [--add-lyrics] [--embed-cover]
[--stick-to-artist] [--cover-resolution <Разрешение обложки>]
[--delay <Задержка>]
[--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET,VERBOSE}]
(--artist-id <ID исполнителя> | --album-id <ID альбома> | --track-id <ID трека> | --playlist-id <владелец плейлиста>/<тип плейлиста> | -u URL)
[--unsafe-path] [--dir <Папка>] [--path-pattern <Паттерн>]
--session-id <ID сессии> [--user-agent <User-Agent>]
Загрузчик музыки с сервиса Яндекс.Музыка
optional arguments:
-h, --help show this help message and exit
Общие параметры:
--hq Загружать треки в высоком качестве
--skip-existing Пропускать уже загруженные треки
--add-lyrics Загружать тексты песен
--embed-cover Встраивать обложку в .mp3 файл
--stick-to-artist Загружать только альбомы созданные данным исполнителем
--cover-resolution <Разрешение обложки>
по умолчанию: 400
--delay <Задержка> Задержка между запросами, в секундах (по умолчанию: 3)
--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET,VERBOSE}
ID:
--artist-id <ID исполнителя>
--album-id <ID альбома>
--track-id <ID трека>
--playlist-id <владелец плейлиста>/<тип плейлиста>
-u URL, --url URL URL исполнителя/альбома/трека/плейлиста
Указание пути:
--unsafe-path Не очищать путь от недопустимых символов
--dir <Папка> Папка для загрузки музыки (по умолчанию: .)
--path-pattern <Паттерн>
Поддерживает следующие заполнители: #number, #artist,
#album-artist, #title, #album, #year (по умолчанию:
#album-artist/#album/#number - #title)
Авторизация:
--session-id <ID сессии>
--user-agent <User-Agent>
по умолчанию: Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/106.0.0.0 Safari/537.36
Скачивание плейлиста «Мне нравиться» у меня выглядит так:
python3 main.py --session-id="ВАШ SESSION-ID" --hq --add-lyrics --embed-cover --url "ВАШ URL НА ПЛЕЙЛИСТ"
Важное примечание, если вы в процессе работы скрипта получаете ошибку формата:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Необходимо проверить чтобы в настройках профиля была включена настройка «Публичный доступ к моей фонотеке» и чтобы в настройках самого плейлиста была отключена галка «Приватный плейлист».
Так же, если вы не хотите чтобы у вас в файле была отметка «Encoded by : https://github.com/llistochek/yandex-music-downloader«, в скрипте нужно закомментировать:
tag.encoded_by = ENCODED_BY
ИТОГ по yandex-music-downloader:
Минусы:
- Под Windows дико нестабильный скрипт. Если качать отдельно альбомы и треки, то проблем нет. При попытке скачать плейлист «Мне нравится» ошибки лезут как из рога изобилия.
- Второй минус, который для меня критичен: если у трека несколько исполнителей, тогда трек будет помещен в папку первого исполнителя.
- Бесячая нумерация — 1,2,3 и т.д. ну кто так делает?))) 01,02,03 — вот наш выбор. Тут, конечно, личный загон, переделал под себя, но пул реквеста не стоит ждать.
- Заполнители. Не знаю как словами описать. Они работают как-то не так. Вот в Yandex Music Downloader всё норм.
Плюсы:
- В целом, продуманная каталогизация по умолчанию. VA скидываются в отдельную папку — «сборник». Удобно.
- Засунул под крон в докере на unraid. Вроде работает стабильней, чем под Windows. Буду дальше тестировать.
Примеры ошибок которые вываливались при эксплуатации:
Yandex Music Downloader / 2023-07-14
С Perl не дружу, поэтому рассматривал этот скрипт в последнюю очередь. И зря.
Установка:
- Качаем и устанавливаем Strawberry Perl, добавляем PATH
- Устанавливаем модули:
cpan install Digest::MD5 File::Copy File::Spec File::Temp File::Util Getopt::Long::Descriptive HTML::Entities HTTP::Cookies JSON::PP LWP::Protocol::https LWP::UserAgent MP3::Tag Term::ANSIColor Mozilla::CA Win32::API Win32::Console Win32API::File
- Клонируем, запускаем, проверяем:
git clone https://github.com/kaimi-io/yandex-music-download.git
cd yandex-music-download/src
perl ya.pl -h
Синтаксис скрипта:
ya.pl [-adhklpstu] [long options...]
-p[=INT] --playlist[=INT] playlist id to download
-k[=STR] --kind[=STR] playlist kind (eg. ya-playlist,
music-blog, music-partners, etc.)
-a[=INT] --album[=INT] album to download
-t[=INT] --track[=INT] track to download (album id must be
specified)
-u[=STR] --url[=STR] download by URL
-d[=STR] --dir[=STR] download path (current direcotry will be
used by default)
--skip-existing skip downloading tracks that already exist
on the specified path
--proxy STR HTTP-proxy (format: 1.2.3.4:8888)
--exclude STR skip tracks specified in file
--include STR download only tracks specified in file
--delay INT delay between downloads (in seconds)
--mobile INT use mobile API
--auth STR authorization header for mobile version
(OAuth...)
--cookie STR authorization cookie for web version
(Session_id=...)
--bitrate INT bitrate (eg. 64, 128, 192, 320)
--pattern STR track naming pattern
--path STR path saving pattern
Available placeholders: #number, #artist,
#title, #album, #year
Path pattern will be used in addition to
the download path directory
Example path pattern: #artist/#album-#year
-l --link do not fetch, only print links to the
tracks
-s --silent do not print informational messages
--debug print debug info during work
-h --help print usage
--include and --exclude options use weak
match i.e. ~/$term/
Синтаксис неполный, как раз тот случай, когда автор положил болт на документацию. Читайте код. Точно можно заставить скрипт мимикрировать под мобильное приложение, но пока не получилось реализовать задумку.
Скачивание плейлиста «Мне нравиться» у меня выглядит так:
perl ya.pl --url "ВАШ URL НА ПЛЕЙЛИСТ" --cookie Session_id="ВАШ SESSION-ID" --skip-existing --delay 3 --bitrate 320
ИТОГ по Yandex Music Downloader:
Минусы:
- Один. Perl. Я его не знаю и ничего не могу сделать со скриптом
Плюсы:
- Стабильная работа. Работает как задумано и нужно.
- Гибкая настройка.
- Поддержка прокси.
- Готовый докер образ.
Общий итог:
Продолжаю тестировать yandex-music-downloader, но уже есть понимание что на постоянную работу уйдет Yandex Music Downloader. Да он на Perl. Но! Его функционала вполне хватает.