YDL-Yandex-Audio: Как я чинил UUID через Deno и Bash

Проект по мульти-загрузке c ютубчека да с ЯндексМузыки: https://github.com/mnnoee/Yandex-YouTube-Audio-Grabber

Давайте будем честны: мой быдлоскрипт написаный на коленке не вершина программной инженерии.
Это костыль на костыле, созданный с одной целью:
заставить yt-dlp нормально качать плейлисты с Яндекс Музыки в 2026 году.

В чем проблема?

yt-dlp как нам всем известно швейцарский нож, но даже он пасует перед хитрожопостью ссылок Яндекса. Короткие ссылки, странные редиректы и структура плейлистов часто приводят к тому, что загрузка просто не начинается. А если и начинается, то HTTPS может отвалиться в самый неподходящий момент.

Главный костыль: yandex.ts

Я понял, что пытаться парсить современные веб-страницы голым Bash - это путь к безумию и бесконечной борьбе с капчей, это можно реализовать через grep, sed, awk, но борьба с капчей не уйдёт, а я и не хотел глубоко копаться.
Поэтому я делегировал мозги рантайму Deno, который к тому же скоро станет полноценой частью yt-dlp

Мой скрипт yandex.ts делает ровно одну вещь: фиксит и парсит UUID. Он притворяется браузером, идет по ссылке и вытаскивает login и kind (ID плейлиста) прямо из JSON-потрохов страницы.

Код "выпрямителя" ссылок:

const finalUrl = response.url;
  
  if (finalUrl.includes("/users/")) {
    console.log("Clean URL:", finalUrl);
  } else {
    const text = await response.text();
    const login = text.match(/"login":"([^"]+)"/)?.[1];
    const kind = text.match(/"kind":([0-9]+)/)?.[1];
    
    if (login && kind) {
      console.log(`https://music.yandex.ru/users/${login}/playlists/${kind}`); 

Дирижер хаоса: audio_grab.sh

Сам Bash-скрипт выступает в роли менеджера. Он принимает опции, проверяет зависимости и, самое главное, ловит вывод от Deno, чтобы скормить его yt-dlp.

Быдлокодинг он и в душе такой, главное выполняет свою работу:

  • Интеграция: Подтягивает куки из вашего браузера (флаг -b), чтобы получить максимальный битрейт при наличии подписки.

  • Логирование: Внутри полно душевных логов вроде «тык-тык-тык. это костыль».

  • Архив: Ведет файл .downloaded.txt, чтобы не качать по кругу одно и то же.

 
# Тот самый кусок с костылем
if [[ "$url" == *"music.yandex.ru/playlists/"* ]]; then
    log "тык-тык-тык. это костыль. тык-тык-тык"
    cleaned_url=$(deno run --allow-net "$DENO_SCRIPT" "$url" | tail -n 1)
    # ... дальше аргемнты + yt-dlp = рабочий скрипт

Важный нюанс про HTTPS

На текущий момент официальный yt-dlp имеет проблемы с обработкой некоторых HTTPS-запросов Яндекса. Поэтому мой скрипт работает пока что только с моим форкомgithub.com/mnnoee/yt-dlp (ветка yandexmusic-https).

Я отправил Pull Request в основной репозиторий, но пока его не приняли - сидим на моем "самопале". Кому интересен PR вот он: https://github.com/yt-dlp/yt-dlp/pull/15427

Итог

Оно работает? Да. Это красиво? ну... тут каждый решит сам за себя 

!!YAPPI!!