Retour à l'accueil

Script d'export de playlist Yandex Music en JS

L'article décrit un script JavaScript pour exporter les playlists Yandex Music via DevTools. Prend en compte la liste virtualisée, collecte les pistes au scroll vers TXT/CSV. Code complet, exemples et améliorations pour les développeurs.

Export des pistes Yandex Music : script JS en 10 sec
Advertisement 728x90

Exporter une playlist Yandex Music via JavaScript dans DevTools

Les développeurs ont souvent besoin d'extraire une liste de titres de Yandex Music pour les transférer vers d'autres services, les sauvegarder ou les analyser. Il n'existe pas de fonction d'export officielle, mais un script JavaScript résout le problème en simulant le défilement. Il s'exécute dans la console du navigateur, en tenant compte de la liste virtualisée : les titres se chargent dynamiquement, le DOM ne contenant que la partie visible.

Le script collecte les données d'artiste, de titre et de durée, et les exporte en TXT ou CSV. Le processus prend quelques secondes pour des playlists allant jusqu'à des milliers de titres.

Préparation et exécution

  • Ouvrez la playlist souhaitée dans Yandex Music.
  • Lancez DevTools (F12) et allez dans l'onglet Console.
  • Collez le script dans la console et exécutez-le.
  • Défilez la playlist jusqu'à la fin — le script capturera tous les titres.
  • Exécutez la commande finalizeCapture() pour terminer.
  • Téléchargez le fichier via le lien fourni.
// Collez ce code dans la 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(`Capturé ${tracks.length} titres`);
};

Ce code utilise MutationObserver pour suivre les nouveaux éléments dans le DOM. Les sélecteurs sont adaptés à la structure actuelle de Yandex Music — vérifiez-les en cas de modifications.

Google AdInline article slot

Formats de sortie et exemples

  • TXT : Une simple liste de chaînes Artiste - Titre ou avec durée.
  • CSV : Colonnes Artiste,Titre,Durée pour importation dans des tableurs.

Exemple TXT pour une playlist électronique :

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

Version CSV :

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

La liste virtualisée nécessite un défilement manuel : le script n'automatise pas le défilement pour éviter les blocages. Pour les grandes playlists, utilisez l'événement de molette ou Page Down.

Google AdInline article slot

Détails techniques d'implémentation

La liste virtualisée (par exemple, basée sur react-window ou similaire) affiche uniquement les lignes visibles, économisant la mémoire. Un querySelectorAll standard capturera 20 à 50 titres, le reste étant masqué.

Composants clés du script :

  • MutationObserver : Répond aux ajouts de nœuds DOM pendant le défilement.
  • Indicateur Dataset : Empêche les doublons (item.dataset.captured).
  • Blob et URL.createObjectURL : Génère un fichier téléchargeable sans serveur.
  • Sélecteurs data-testid : Stables, moins susceptibles de changer dans les SPAs.

Pour le CSV, ajoutez la conversion :

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

Gérez l'échappement des guillemets dans les titres pour un CSV correct.

Améliorations possibles pour la production

  • Défilement automatique : setInterval(() => window.scrollBy(0, 500), 100) avec pauses.
  • Export JSON : JSON.stringify(tracks, null, 2).
  • Prise en charge d'album : Sélecteurs similaires pour /artist/ et /album/.
  • Filtres : Exclure les doublons par ID de titre.
  • Extension navigateur : Script de contenu avec interface pour boutons.

Testez sur différentes playlists — la structure peut varier pour les podcasts ou enregistrements live.

Points clés

  • Le script fonctionne exclusivement dans le navigateur, sans API ni extensions.
  • Tient compte de la liste virtualisée — collecte les titres uniquement pendant le défilement.
  • L'export TXT/CSV est prêt pour importation dans Spotify, Apple Music.
  • Facile à modifier : ajoutez ID de titre ou pochette.
  • Utile pour l'analyse : statistiques par genre, durée.

— Editorial Team

Advertisement 728x90

Lire ensuite