Powrót do strony głównej

Skrypt eksportu playlisty Yandex Muzyki w JS

Artykuł opisuje skrypt JavaScript do eksportu playlist Yandex Muzyki przez DevTools. Uwzględnia virtualized list, zbiera utwory przy przewijaniu do TXT/CSV. Pełny kod, przykłady i ulepszenia dla deweloperów.

Eksport utworów Yandex Muzyki: skrypt JS w 10 s
Advertisement 728x90

Eksport playlisty z Yandex Muzyki za pomocą JavaScript w DevTools

Deweloperzy często potrzebują wyodrębnić listę utworów z Yandex Muzyki, aby przenieść je do innych serwisów, wykonać kopię zapasową lub przeprowadzić analizę. Oficjalna funkcja eksportu nie istnieje, ale skrypt w JavaScript rozwiązuje ten problem poprzez symulację przewijania. Działa w konsoli przeglądarki, uwzględniając wirtualizowaną listę: utwory są ładowane dynamicznie, a DOM zawiera tylko widoczną część.

Skrypt zbiera dane artysty, tytuł i czas trwania, eksportując do TXT lub CSV. Proces trwa sekundy dla playlist zawierających tysiące utworów.

Przygotowanie i uruchomienie

  • Otwórz wybraną playlistę w Yandex Muzyce.
  • Uruchom DevTools (F12) i przejdź do zakładki Console.
  • Wklej skrypt do konsoli i wykonaj go.
  • Przewiń playlistę do końca — skrypt przechwyci wszystkie utwory.
  • Wykonaj polecenie finalizeCapture() w celu zakończenia.
  • Pobierz plik za pomocą wygenerowanego linku.
// Wklej ten kod w 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(`Captured ${tracks.length} tracks`);
};

Ten kod wykorzystuje MutationObserver do śledzenia nowych elementów w DOM. Selekcje są dostosowane do aktualnej struktury Yandex Muzyki — sprawdź je w przypadku zmian.

Google AdInline article slot

Formaty wyjściowe i przykłady

  • TXT: Prosta lista wierszy Artysta - Tytuł lub z czasem trwania.
  • CSV: Kolumny Artysta,Tytuł,Czas trwania do importu do arkuszy.

Przykład TXT dla playlisty z muzyką elektroniczną:

Daft Punk - One More Time
The Weeknd - Blinding Lights
Justice - D.A.N.C.E.

Wariant CSV:

Daft Punk,One More Time,4:02
The Weeknd,Blinding Lights,3:20
Justice,D.A.N.C.E.,4:00

Wirtualizowana lista wymaga ręcznego przewijania: skrypt nie automatyzuje scrollowania, aby uniknąć blokad. Dla dużych playlist użyj zdarzenia wheel lub klawisza Page Down.

Google AdInline article slot

Szczegóły techniczne implementacji

Wirtualizowana lista (np. oparta na react-window lub podobnych) renderuje tylko widoczne wiersze, oszczędzając pamięć. Standardowy querySelectorAll przechwyci 20–50 utworów, reszta jest ukryta.

Kluczowe komponenty skryptu:

  • MutationObserver: Reaguje na dodawanie węzłów DOM podczas przewijania.
  • Flaga dataset: Zapobiega duplikatom (item.dataset.captured).
  • Blob i URL.createObjectURL: Generowanie pliku do pobrania bez serwera.
  • Selekcje data-testid: Stabilne, rzadziej zmieniają się w SPA.

Dla CSV dodaj konwersję:

Google AdInline article slot
const csv = tracks.map(t => `${t.artist},"${t.title}",${t.duration || ''}`).join('\n');

Przetwórz znaki cudzysłowu w tytule dla poprawnego CSV.

Możliwe ulepszenia dla produkcji

  • Automatyczne przewijanie: setInterval(() => window.scrollBy(0, 500), 100) z przerwami.
  • Eksport JSON: JSON.stringify(tracks, null, 2).
  • Obsługa albumów: Podobne selekcje dla /artist/ i /album/.
  • Filtry: Wykluczanie duplikatów według ID utworu.
  • Rozszerzenie przeglądarki: Content script z interfejsem dla przycisków.

Testuj na różnych playlistach — struktura może się różnić dla podcastów lub nagrań na żywo.

Co jest ważne

  • Skrypt działa wyłącznie w przeglądarce, bez API lub rozszerzeń.
  • Uwzględnia wirtualizowaną listę — zbiera utwory tylko podczas przewijania.
  • Eksport do TXT/CSV gotowy do importu do Spotify, Apple Music.
  • Łatwy do modyfikacji: dodaj ID utworu lub okładki.
  • Aktualny dla analiz: statystyki według gatunków, czasu trwania.

— Editorial Team

Advertisement 728x90

Czytaj dalej