Экспорт плейлиста из Яндекс.Музыки в 2026: когда API закрыт, а расширения сломались (JS-сниппет)

Введение: Хроника боли

Скриншот от друга стал поводом для N попытки перейти на Spotify
Скриншот от друга стал поводом для N попытки перейти на Spotify

Любой, кто как и я пытался недавно перенести свою медиатеку из Яндекс.Музыки в столкнулся с тем, что привычные инструменты превратились в тыкву.

Популярные сервисы для трансфера (вроде TuneMyMusic или Soundiiz) больше не принимают прямые ссылки на плейлисты Яндекса. Расширения для браузера (YaMuTools и аналоги) после обновления дизайна Яндекс.Музыки выдают ошибки или смущенно "не включаются".

В этой статье я расскажу, почему всё сломалось, и поделюсь рабочим JS-скриптом, который помог мне вытащить плейлист на 1000+ треков за пару минут.

Почему всё сломалось?

Tunemymusic предлагает жаловаться в Спортлото 
Tunemymusic предлагает жаловаться в Спортлото 
Soundiiz использует альтернативные способы, честно предупреждает "Для этого мы используем неофициальный API — доступ может исчезнуть в любой момент.", но тоже не справляется.
Soundiiz использует альтернативные способы, честно предупреждает "Для этого мы используем неофициальный API — доступ может исчезнуть в любой момент.", но тоже не справляется.

2. Реактивный фронтенд и Virtual Scroll. Новый дизайн Яндекс.Музыки — это полноценное SPA (Single Page Application)

  • Обфускация классов: Раньше можно было найти треки по классу .d-track. Теперь классы генерируются динамически или вовсе отсутствуют семантические привязки.
  • Ленивая загрузка (Lazy Loading): Это главная проблема. В коде страницы (DOM) существуют только те 20-30 треков, которые вы видите на экране прямо сейчас. Как только вы скроллите вниз, верхние узлы удаляются из DOM, чтобы экономить память.

Именно поэтому, если просто выделить страницу Ctrl+A или попытаться спарсить её через document.querySelectorAll, вы получите лишь малую часть списка.

Решение: Observer Pattern «на коленке»

Раз мы не можем запросить весь список у сервера (API закрыт) и не можем забрать его со страницы разом (Virtual Scroll), нам остается один путь имитировать поведение пользователя.

Мы напишем скрипт, который:

  1. «Смотрит» на экран с интервалом в 1 секунду.
  2. Находит ссылки на треки и артистов (единственное, что остается неизменным — это наличие ссылок href с подстроками /artist/ и /track/).
  3. Складывает уникальные связки «Артист — Трек» в Set (чтобы избежать дублей).
  4. В конце генерирует .txt файл и отдает его вам.

Вам нужно лишь запустить его и пролистать плейлист.

Инструкция (Working Method)

Этот способ не требует установки расширений и ввода паролей. Всё происходит локально в вашей консоли.

Шаг 1. Подготовка

Откройте ваш плейлист в Яндекс.Музыке (например, «Мне нравится») в браузере. Обновите страницу, чтобы убедиться, что вы в самом верху.

Шаг 2. Магия консоли

Нажмите F12 (или правый клик -> «Просмотреть код» / Inspect), перейдите во вкладку Console.

Экспорт плейлиста из Яндекс.Музыки в 2026: когда API закрыт, а расширения сломались (JS-сниппет)

Скопируйте и вставьте следующий код:

let allTracks = new Set(); console.log("👀 Наблюдатель запущен! Начинайте листать плейлист вниз..."); // Запускаем интервал, который каждую секунду сканирует видимую часть списка let timer = setInterval(() => { // Ищем все ссылки, содержащие '/track/' document.querySelectorAll('a[href*="/track/"]').forEach(link => { let title = link.textContent.trim(); if (title) { let artist = "Неизвестен"; // Ищем исполнителя, поднимаясь вверх по дереву элементов let parent = link.parentElement; for (let i = 0; i < 6; i++) { if (parent) { let artistLink = parent.querySelector('a[href*="/artist/"]'); if (artistLink) { artist = artistLink.textContent.trim(); break; } parent = parent.parentElement; } } // Сохраняем в Set, чтобы убрать дубликаты allTracks.add(`${artist} — ${title}`); } }); // Очищаем консоль и выводим статус, чтобы не засорять эфир console.clear(); console.log(`📥 В памяти сохранено треков: ${allTracks.size}`); console.log(`⬇️ ПРОДОЛЖАЙТЕ ЛИСТАТЬ СТРАНИЦУ ВНИЗ ДО КОНЦА...`); console.log(`✅ Когда долистаете, введите в консоль команду: save() и нажмите Enter`); }, 1000); // Функция для сохранения результата в файл window.save = function() { clearInterval(timer); const text = Array.from(allTracks).join('\n'); const blob = new Blob([text], {type: "text/plain"}); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "yandex_music_export.txt"; document.body.appendChild(a); a.click(); document.body.removeChild(a); console.log("🎉 Готово! Файл скачан."); }

Шаг 3. Сбор данных

После нажатия Enter скрипт начнет работать. Просто листайте плейлист вниз (мышкой, колесиком или зажав клавишу End). Не обязательно листать медленно, главное прогрузить все элементы.

Вы увидите, как счетчик в консоли растет: 📥 В памяти сохранено треков: NNN

Шаг 4. Сохранение

Когда вы дойдете до конца списка и счетчик перестанет расти, напишите в этой же консоли команду:

save()

Нажмите Enter. Браузер предложит сохранить файл yandex_music_export.txt.

Вы великолепны!
Вы великолепны!

Что делать с файлом?

Полученный файл имеет формат: Plaintext

Queen — Bohemian Rhapsody Daft Punk — Get Lucky ...
  1. Идете на TuneMyMusic (или аналог).
  2. Выбираете источник: «Из файла» (Upload file).
  3. Загружаете наш .txt.
  4. Выбираете целевую платформу (Spotify, Apple Music, YouTube).
  5. Готово!
Экспорт плейлиста из Яндекс.Музыки в 2026: когда API закрыт, а расширения сломались (JS-сниппет)

Заключение

Способ работает на текущей версии Яндекс.Музыки (начало 2026 года). Вероятно, в будущем верстка снова изменится, но принцип поиска «по ссылкам» (href*="/track/") - один из самых надежных, так как ссылки нужны самому сайту для навигации.

Пост помог написать Germini, он же написал код!

4
4
11 комментариев