File size: 2,396 Bytes
47d60d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import os
import shutil
import subprocess
import gradio as def_gradio # Import standard
import gradio as gr

def download_playlist(spotify_url):
    if not spotify_url:
        return "Veuillez entrer un lien Spotify valide."
    
    # Dossier temporaire pour stocker les mp3
    output_dir = "mes_musiques"
    if os.path.exists(output_dir):
        shutil.rmtree(output_dir)
    os.makedirs(output_dir)
    
    try:
        # Exécution de spotDL dans le dossier temporaire
        gr.Info("Téléchargement en cours... Cela peut prendre quelques minutes selon la taille.")
        subprocess.run(["spotdl", "download", spotify_url], cwd=output_dir, check=True)
        
        # Vérifie si des fichiers ont bien été téléchargés
        files = os.listdir(output_dir)
        if not files:
            return "Aucun morceau trouvé ou erreur lors du téléchargement.", None
        
        # On compresse le tout en un fichier ZIP
        zip_path = "ma_playlist"
        shutil.make_archive(zip_path, 'zip', output_dir)
        final_zip = f"{zip_path}.zip"
        
        # Nettoyage du dossier temporaire
        shutil.rmtree(output_dir)
        
        return "Téléchargement réussi ! Cliquez ci-dessous pour récupérer votre ZIP.", final_zip
        
    except subprocess.CalledProcessError as e:
        return f"Erreur lors de l'exécution de spotDL : {str(e)}", None
    except Exception as e:
        return f"Une erreur est survenue : {str(e)}", None

# Interface Graphique (Style épuré / Dark Mode par défaut)
with gr.Blocks(theme=gr.themes.Soft(primary_hue="green", neutral_hue="slate")) as demo:
    gr.Markdown("# 🎵 Mon spotDL Privé")
    gr.Markdown("Entre le lien d'une musique, d'un album ou d'une playlist Spotify pour générer un fichier ZIP.")
    
    with gr.Row():
        url_input = gr.Textbox(
            label="Lien Spotify", 
            placeholder="https://open.spotify.com/playlist/...",
            lines=1
        )
    
    status_output = gr.Markdown("Statut : En attente...")
    file_output = gr.File(label="Télécharger le package ZIP")
    
    download_btn = gr.Button("Lancer le téléchargement", variant="primary")
    
    # Action du bouton
    download_btn.click(
        fn=download_playlist, 
        inputs=url_input, 
        outputs=[status_output, file_output]
    )

if __name__ == "__main__":
    demo.launch()