Export playlistu z Yandex Music pomocí JavaScriptu v DevTools
Vývojáři často potřebují získat seznam skladeb z Yandex Music pro přenos do jiných služeb, zálohování nebo analýzu. Oficiální funkce exportu neexistuje, ale skript v JavaScriptu problém řeší simulací posouvání. Funguje v konzoli prohlížeče, bere v úvahu virtualizovaný seznam: skladby se načítají dynamicky, DOM obsahuje pouze viditelnou část.
Skript shromažďuje data o interpretovi, názvu a délce skladby a exportuje je do TXT nebo CSV. Proces trvá sekundy i pro playlisty s tisíci skladbami.
Příprava a spuštění
- Otevřete požadovaný playlist v Yandex Music.
- Spusťte DevTools (F12) a přejděte na záložku Console.
- Vložte skript do konzole a spusťte ho.
- Posouvejte playlist až do konce – skript zachytí všechny skladby.
- Spusťte příkaz
finalizeCapture()pro dokončení. - Stáhněte soubor pomocí nabídnutého odkazu.
// Vložte tento kód do Console
let tracks = [];
const observer = new MutationObserver(() => {
const items = document.querySelectorAll('[data-testid="track-row"]');
items.forEach(item => {
if (!item.dataset.captured) {
const artist = item.querySelector('[data-testid="artist-name"]')?.textContent.trim();
const title = item.querySelector('[data-testid="track-title"]')?.textContent.trim();
const duration = item.querySelector('[data-testid="track-duration"]')?.textContent.trim();
if (artist && title) {
tracks.push({artist, title, duration});
item.dataset.captured = 'true';
}
}
});
});
observer.observe(document.body, {childList: true, subtree: true});
window.finalizeCapture = () => {
observer.disconnect();
const data = tracks.map(t => `${t.artist} - ${t.title}${t.duration ? ` (${t.duration})` : ''}`).join('\n');
const blob = new Blob([data], {type: 'text/plain'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'playlist.txt';
a.click();
console.log(`Zachyceno ${tracks.length} skladeb`);
};
Tento kód používá MutationObserver pro sledování nových prvků v DOM. Selektory jsou přizpůsobeny aktuální struktuře Yandex Music – při změnách je zkontrolujte.
Formáty výstupu a příklady
- TXT: Jednoduchý seznam řádků
Interpret - Názevnebo s délkou. - CSV: Sloupce
Interpret,Název,Délkapro import do tabulek.
Příklad TXT pro playlist s elektronikou:
Daft Punk - One More Time
The Weeknd - Blinding Lights
Justice - D.A.N.C.E.
CSV varianta:
Daft Punk,One More Time,4:02
The Weeknd,Blinding Lights,3:20
Justice,D.A.N.C.E.,4:00
Virtualizovaný seznam vyžaduje ruční posouvání: skript neautomatizuje scroll, aby se předešlo blokování. Pro velké playlisty použijte wheel event nebo Page Down.
Technické detaily implementace
Virtualizovaný seznam (například na bázi react-window nebo analogů) vykresluje pouze viditelné řádky, čímž šetří paměť. Běžný querySelectorAll zachytí 20–50 skladeb, zbytek je skrytý.
Klíčové komponenty skriptu:
- MutationObserver: Reaguje na přidání DOM uzlů při scrollování.
- Dataset příznak: Zabraňuje duplikátům (
item.dataset.captured). - Blob a URL.createObjectURL: Generace stahovatelného souboru bez serveru.
- Selektory data-testid: Jsou stabilní, méně často se mění v SPA.
Pro CSV přidejte transformaci:
const csv = tracks.map(t => `${t.artist},"${t.title}",${t.duration || ''}`).join('\n');
Zpracujte escapování uvozovek v názvu pro korektní CSV.
Možná vylepšení pro produkci
- Automatické posouvání:
setInterval(() => window.scrollBy(0, 500), 100)s pauzami. - JSON export:
JSON.stringify(tracks, null, 2). - Podpora alb: Analogické selektory pro /artist/ a /album/.
- Filtry: Vyloučení duplikátů podle ID skladby.
- Rozšíření prohlížeče: Content script s UI pro tlačítka.
Testujte na různých playlistech – struktura se může lišit pro podcasty nebo živé nahrávky.
Co je důležité
- Skript funguje výhradně v prohlížeči, bez API nebo rozšíření.
- Bere v úvahu virtualizovaný seznam – shromažďuje skladby pouze při posouvání.
- Export do TXT/CSV je připraven pro import do Spotify, Apple Music.
- Snadno upravitelný: přidejte ID skladby nebo obrázek.
- Aktuální pro analýzu: statistika podle žánrů, délky.
— Editorial Team
Zatím žádné komentáře.