diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549a44e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Ignore dossier docker +Docker diff --git a/Docker/spotdlweb.yaml b/Docker/spotdlweb.yaml new file mode 100644 index 0000000..442ab0c --- /dev/null +++ b/Docker/spotdlweb.yaml @@ -0,0 +1,10 @@ +version: '3.3' +services: + spotdlweb: + ports: + - '80:3000' + container_name: spotdlweb + #volumes: + #- '/docker/containers/spotdl/musics:/app/downloads' + restart: unless-stopped + image: 'spotdlweb:latest' diff --git a/Docker/src/app.py b/Docker/src/app.py new file mode 100644 index 0000000..9a2bf29 --- /dev/null +++ b/Docker/src/app.py @@ -0,0 +1,68 @@ +from flask import Flask, request, redirect, url_for, send_file, render_template, send_from_directory +from subprocess import run +from datetime import datetime +import os +import logging + +app = Flask(__name__) + +def process_file(urls): + download_param_album = '{artist}/{album}/{artist} - {title}' + download_param_playlist = '{playlist}/{artists}/{album} - {title} {artist}' + + os.chdir('downloads') + os.system(f'rm -rf *') + #run(['rm', '-rf', '*']) ne fonctionne pas ... ?? + + for url in urls: + if url: + if "album" in url: + run(['python3', '-m', 'spotdl', url, '--output', download_param_album]) + elif "playlist" in url: + run(['python3', '-m', 'spotdl', url, '--output', download_param_playlist]) + + #os.system(f'zip -r musics.zip ./downloads') + run(['zip', '-r', 'musics.zip', '.']) + os.chdir('../') + +@app.route('/', methods=['GET', 'POST']) +def upload_form(): + return render_template('index.html') + +#Fonctionne +# @app.route('/download/') +# def download_file(filename): +# PATH='file.txt' +# return send_file(PATH, as_attachment=True) + +@app.route('/download', methods=['POST']) +def download_file(): + # votre code de téléchargement ici +# now = datetime.now() +# date_time = now.strftime("%Y-%m-%d %H-%M-%S") +# with open(f"file.txt", "w") as file: +# file.write(date_time) + if request.method == 'POST': + url1 = request.form['url1'] + url2 = request.form['url2'] + url3 = request.form['url3'] + url4 = request.form['url4'] + url5 = request.form['url5'] + + # Vérifier si au moins un champ est vide + if not url1 and not url2 and not url3 and not url4 and not url5: + return render_template('erreur.html') + + urls = [url1, url2, url3, url4, url5] + + process_file(urls) + PATH = "downloads/musics.zip" + return send_file(PATH, as_attachment=True) + +@app.errorhandler(404) +def page_not_found(error): + return render_template('404.html'), 404 + + +if __name__ == '__main__': + app.run(host='0.0.0.0', debug=True, port=3000) \ No newline at end of file diff --git a/Docker/src/static/css/style.css b/Docker/src/static/css/style.css new file mode 100644 index 0000000..0e36080 --- /dev/null +++ b/Docker/src/static/css/style.css @@ -0,0 +1,193 @@ + body { + margin: 0; + font-family: Arial, Helvetica, sans-serif; + background-color: #131313; + color: #ffffff; + } + + .container { + max-width: 900px; + margin: 0 auto; + padding: 20px; + box-sizing: border-box; + } + + .bordered { + border: 1px solid rgb(24,216,96); + border-radius: 5px; + padding: 20px; + margin-bottom: 20px; + } + + li { + font-weight: bold; + } + + a { + text-decoration-color: rgb(24,216,96); + color: rgb(24,216,96); + } + + + .form-group { + display: flex; + flex-direction: column; + margin-bottom: 20px; + } + + .form-group label { + font-weight: bold; + margin-bottom: 5px; + } + + .form-control { + background-color: #232323; + border: none; + border-radius: 5px; + padding: 10px; + color: #ffffff; + } + + /* .form-control:focus { + outline: none; + box-shadow: 0 0 0 2px rgb(24,216,96); + } */ + .form-control:valid:not(:placeholder-shown) { + outline: none; + border: 2px solid rgb(24,216,96); + } + .form-control:invalid { + outline: none; + border: 2px solid red; + } + + + + .btn { + background-color: rgb(24,216,96); + border: none; + border-radius: 5px; + padding: 10px 20px; + color: #131313; + font-weight: bold; + cursor: pointer; + text-decoration:none + } + + .btn2 { + margin-top: 10px; + background-color: rgb(24,216,96); + border: none; + border-radius: 5px; + padding: 10px 20px; + color: #131313; + font-weight: bold; + cursor: pointer; + text-decoration:none + } + + .btn:hover { + background-color: rgb(24,216,96); + color: whitesmoke + } + + h1 { + color: rgb(24,216,96); + } + + @media (max-width: 600px) { + body { + margin: 0; + font-family: Arial, Helvetica, sans-serif; + background-color: #131313; + color: #ffffff; + } + + .container { + max-width: 100%; + margin: 0; + padding: 10px; + box-sizing: border-box; + } + + .bordered { + border: 1px solid rgb(24,216,96); + border-radius: 5px; + padding: 10px; + margin-bottom: 10px; + } + + li { + font-weight: bold; + } + + a { + text-decoration-color: rgb(24,216,96); + color: rgb(24,216,96); + } + + .form-group { + display: flex; + flex-direction: column; + margin-bottom: 10px; + } + + .form-group label { + font-weight: bold; + margin-bottom: 5px; + } + + .form-control { + background-color: #232323; + border: none; + border-radius: 5px; + padding: 10px; + color: #ffffff; + } + + /* .form-control:focus { + outline: none; + box-shadow: 0 0 0 2px rgb(24,216,96); + } */ + .form-control:valid:not(:placeholder-shown) { + outline: none; + border: 2px solid rgb(24,216,96); + } + .form-control:invalid { + outline: none; + border: 2px solid red; + } + + .btn { + background-color: rgb(24,216,96); + border: none; + border-radius: 5px; + padding: 10px 20px; + color: #131313; + font-weight: bold; + cursor: pointer; + text-decoration:none + } + + .btn2 { + margin-top: 10px; + background-color: rgb(24,216,96); + border: none; + border-radius: 5px; + padding: 10px 20px; + color: #131313; + font-weight: bold; + cursor: pointer; + text-decoration:none + } + + .btn:hover { + background-color: rgb(24,216,96); + color: whitesmoke + } + + h1 { + color: rgb(24,216,96); + } +} + diff --git a/Docker/src/templates/404.html b/Docker/src/templates/404.html new file mode 100644 index 0000000..8382b12 --- /dev/null +++ b/Docker/src/templates/404.html @@ -0,0 +1,15 @@ + + + + SpotDL Web + + + +
+

Error 404

+

Il semble que vous soyez perdu. Revenez à la page d'accueil

+ +
+ + + diff --git a/Docker/src/templates/erreur.html b/Docker/src/templates/erreur.html new file mode 100644 index 0000000..fee662d --- /dev/null +++ b/Docker/src/templates/erreur.html @@ -0,0 +1,18 @@ + + + + SpotDL Web + + + +
+

SpotDL Web

+

Veuillez entrer au moins une URL !

+ + + {% if message %} +

{{ message }}

+ {% endif %} +
+ + diff --git a/Docker/src/templates/index.html b/Docker/src/templates/index.html new file mode 100644 index 0000000..4a98c25 --- /dev/null +++ b/Docker/src/templates/index.html @@ -0,0 +1,56 @@ + + + + + + + SpotDL Web + + + +
+

SpotDL Web

+
+

+

Procédure

+
    +
  • Se rendre sur Spotify en cliquant ici
  • +
  • Chercher un Album ou une Playlist
  • +
  • Sur Ordinateur : A droite du coeur, cliquez sur ... puis Partager et Copier le lien vers (Album ou Playlist)
  • +
  • Sur Smartphone : Cliquez sur le logo de partage puis Copier le lien
  • +
+

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+ + +
+ + + +