Spaces:
Sleeping
Sleeping
| 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() |