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()