Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

kion-playlist-import

Массовый импорт треков в плейлист КИОН Музыки (бывшая МТС Музыка) из обычного текстового списка.

Штатного переноса плейлистов в сервисе сейчас нет — справка МТС прямо пишет, что функция недоступна. Сторонние конвертеры (Soundiiz, TuneMyMusic) КИОН как приёмник не поддерживают. Этот скрипт закрывает дыру: берёт список вида Исполнитель — Название, находит треки в каталоге и добавляет их в твой плейлист.

Работает в консоли браузера от имени уже вошедшего пользователя. Никаких паролей, никакой отправки данных наружу.

Дисклеймер

За качество кода не ручаюсь. Весь скрипт написан Claude Opus 5, я только гонял его в консоли, приносил ответы сервера и говорил, что сломалось. Задача была не «сделать красиво», а перестать вручную вбивать сотню треков в поиск.

Работает — но ревью его никто не делал, тестов нет, обработка ошибок ровно такая, какой хватило для моего случая. Если собираетесь запускать у себя: сначала scan(), гляньте глазами, что нашлось, и только потом push(). Ничего страшнее «в плейлист попал не тот трек» случиться не должно, но обещать не могу.

Правки и issue приветствуются, особенно от тех, кто в JS разбирается.

Как пользоваться

  1. Открой music.mts.ru, войди в аккаунт.
  2. Создай плейлист и открой его страницу — адрес будет вида /custom-playlist/<uid>/<kind>.
  3. Нажми F12 → вкладка Console. Если Chrome ругается на вставку, набери allow pasting и нажми Enter.
  4. Вставь содержимое kion-playlist-import.js, нажми Enter.
  5. Загрузи список и запусти поиск:
KION.load(`
Игорь Тальков — Я вернусь
КИНО — Кукушка
Би-2 — Серебро
`);

await KION.scan();   // ищет треки, ничего не меняет
await KION.push();   // заливает найденное в плейлист

scan() печатает по строке на трек: слева — что искали, справа — что нашлось. Пробеги глазами перед push().

Команды

Команда Что делает
KION.load(text) загрузить список, убрать дубликаты
KION.scan() найти треки в каталоге, ничего не добавляя
KION.push() залить найденное в плейлист
KION.report() показать промахи текстом
KION.config({...}) поменять настройки (см. ниже)
KION.help() справка

Настройки

KION.config({
  batchSize: 20,      // треков в одном запросе на изменение
  searchDelay: 350,   // пауза между запросами поиска, мс
  minScore: 7,        // порог совпадения (макс. 14), ниже — считается промахом
  uid: '...',         // если не удалось определить плейлист из адреса
  kind: '...'
});

Откуда взять список треков

Мой txt я получил, распарсив страницу своего плейлиста в Яндекс Музыке — просто вытащил из разметки строки «исполнитель — название». Годится любой способ: выгрузка из Soundiiz или TuneMyMusic в текстовый файл, экспорт из локального плеера, да хоть руками набранный список. Скрипту всё равно, откуда текст, — лишь бы одна строка на трек.

Формат списка

Одна строка — один трек. Разделители: —, –, -, таб. Строки без разделителя считаются названием без исполнителя. Пустые строки и начинающиеся с # игнорируются.

Исполнитель — Название
КИНО — Пачка сигарет
# это комментарий

Скрипт сам срезает хвосты, которые ломают поиск: 2024 Remastered, из фильма «...», (feat. ...).

Пример: tracks.example.txt.

Как это устроено

КИОН Музыка — витрина поверх бэкенда Яндекс.Музыки: запросы идут на music.mts.ru/ya-proxy/api/..., ответы приходят с полем hostname вида music-web-...yp-c.yandex.net, обложки лежат на avatars.yandex.net. Отсюда и знакомая механика API.

Используются три эндпоинта:

GET  /ya-proxy/api/search-playlist/{uid}/{kind}?part={запрос}
     → { result: { suggestedTrackIds: ["38633760", ...] } }

GET  /ya-proxy/api/tracks?trackIds=1,2,3
     → { result: [ { id, title, artists: [...], albums: [...] } ] }

POST /ya-proxy/api/users/{uid}/playlists/{kind}/change?revision={N}&diff={JSON}
     diff: [{ "op": "insert", "at": 0, "tracks": [{ "id": "...", "albumId": "..." }] }]

Два нюанса, на которых легко споткнуться:

  • revision — номер версии плейлиста. Каждое изменение его увеличивает; с устаревшим номером сервер откажет. Скрипт берёт новый номер из ответа сервера.
  • Авторизация — GET-запросы проходят по кукам, а POST сайт отправляет с credentials: 'omit' и заголовками Authorization: OAuth <токен>, X-Yandex-Music-Client и X-Yandex-Music-Web-Cookie. Без них прилетает 401 даже при живой сессии. Токен читается из localStorage["ya_token"] в момент запроса — скрипт его не сохраняет и не логирует.

Поиск идёт через эндпоинт подсказок, а он возвращает всего несколько кандидатов. Кандидаты ранжируются по совпадению названия и исполнителя; при счёте ниже minScore трек уходит в промахи, а не добавляется наугад. На практике на списке из 124 треков нашлось 118 — не находятся в основном сборные записи с длинным перечнем исполнителей.

Вставка всегда идёт в позицию 0, поэтому пачки отправляются с конца списка — так итоговый порядок совпадает с исходным.

Ограничения

  • Только веб-версия, с телефона не запустить.
  • Чего нет в каталоге — того нет; промахи придётся добить руками.
  • Скрипт со временем сломается. API неофициальный, МТС ничего никому не обещал: поменяется формат ответа, путь эндпоинта или проверка версии клиента в X-Yandex-Music-Client — и всё встанет. Написано и проверено в августе 2026 года на версии клиента MTSMusicWebPremium/2.20.0-release-18717274. Если репозиторий давно не обновлялся, считайте описание API историческим документом, а не инструкцией.
  • Когда отвалится: повесьте перехватчик на fetch, добавьте один трек руками через интерфейс и посмотрите, какой запрос уходит на самом деле — заголовки, путь, параметры. Дальше правится в одном месте: authHeaders(), findTrack() или applyDiff(). Актуальную версию клиента можно взять оттуда же.
  • Инструмент для переноса своей музыки в своём аккаунте. Не гоняйте его пачками и не выкручивайте задержки в ноль.

Лицензия

MIT. Неофициальный проект, никак не связан с МТС, КИОН и Яндексом.

About

Массовый импорт треков в плейлист КИОН Музыки (МТС) из текстового списка — скрипт для консоли браузера

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages