Nettoyage du code

This commit is contained in:
Gu1llaum-3 2023-01-07 17:13:33 +01:00
parent 1d1e3d4b3d
commit cfd041495c
18 changed files with 65 additions and 802 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
# Ignore dossier docker
Docker
Docker/*
# Ignorer ce qu'il y a dans downloads
downloads/*

View File

@ -1,82 +0,0 @@
from flask import Flask, request, redirect, url_for, send_file, render_template
from subprocess import run
import os
import logging
app = Flask(__name__)
@app.route('/')
def upload_form():
return render_template('upload.html')
def process_file(urls):
# path = os.path.expanduser('~/musics/downloads')
#path = '/home/gu1ll4um3/github/SpotDL_Web/downloads'
#path = 'downloads/'
download_param_album = '{artist}/{album}/{artist} - {title}'
download_param_playlist = '{playlist}/{artists}/{album} - {title} {artist}'
os.chdir('downloads')
#os.system(f'rm -rf *')
logs = [] # Créer une liste vide pour stocker les logs
for url in urls:
if url:
if "album" in url:
#os.system(f'python3 -m spotdl {url} --output "{download_param_album}"')
run(['python3', '-m', 'spotdl', url, '--output', download_param_album])
logs.append(f'Téléchargement de l album à l\'adresse {url}')
elif "playlist" in url:
os.system(f'python3 -m spotdl {url} --output "{download_param_playlist}"')
logs.append(f'Téléchargement de la playlist à l\'adresse {url}')
# os.system(f'zip -r musics.zip ./downloads')
run(['zip', '-r', 'musics.zip', '.'])
logs.append(f'Création du fichier ZIP musics.zip')
return logs # Retourner la liste des logs
@app.route('/', methods=['GET', 'POST'])
def index():
message = None
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]
logs = process_file(urls)
#process_file(urls)
#print(resultProcessFile)
with open('/home/gu1ll4um3/github/SpotDL_Web/logs/erreurs.log', 'r') as f:
result2 = f.readlines()
return render_template('download_complete.html', logs=logs)
#return render_template('download_complete.html', result2=result2)
@app.route('/download', methods=['GET'])
def download():
# PATH='/home/gu1ll4um3/musics/downloads/musics.zip'
#os.chdir('downloads')
PATH='downloads/musics.zip'
return send_file(PATH,as_attachment=True)
# @app.route('/errors')
# def errors():
# with open('erreurs.txt', 'r') as f:
# lines = f.readlines()
# return render_template('logs.html', lines=lines)
@app.route('/test')
def test():
return render_template('test.html')
if __name__ == '__main__':
app.run(debug=True, port=3000)

View File

@ -1,3 +0,0 @@
Des erreurs se sont produites et la ou les piste(s) suivante(s) sont manquantes :
Aldebert - La danse

View File

@ -1,72 +0,0 @@
body{
display: flex;
justify-content: center;
align-items: center;
background-color: black;
}
.erreur {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.download_complete {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.all {
align-items: center;
flex-direction: column;
}
.titre{
display: flex;
justify-content: center;
color: rgb(24,216,96);
/* align-items: center; */
}
.procedure {
display: flex;
justify-content: center;
flex-direction: column;
text-align: center;
}
h2, a {
color: white;
}
.url {
display: block;
justify-content:center;
width: auto;
flex: 1 1 0;
/* align-items: center; */
}
.urlbox {
display: block;
/* align-items: flex-start; */
flex: 1 1 0;
width: 225;
}
form {
display: flex ;
justify-content: center;
align-items: center;
flex-direction: column;
width : auto ;
}
button {
display: block;
margin: 10px auto;
}

View File

@ -1,208 +0,0 @@
@media (max-width: 600px) {
.urlbox {
/* les styles pour les appareils mobiles vont ici */
width: 100%; /* étend l'élément sur toute la largeur de l'écran */
}
}
@media (min-width: 601px) and (max-width: 900px) {
.urlbox {
/* les styles pour les tablettes vont ici */
width: 50%; /* étend l'élément sur la moitié de la largeur de l'écran */
}
}
@media (min-width: 901px) {
.urlbox {
/* les styles pour les écrans de bureau vont ici */
width: 25%; /* étend l'élément sur un quart de la largeur de l'écran */
}
}
body {
background-color: black;
}
h1 {
/* border: 2px #eee solid; */
color: rgb(24,216,96);
background-color: black;
text-align: center;
padding: 10px;
}
h2 {
text-align: center;
margin: auto;
padding: 10px;
color: white;
}
.url {
display: flex;
justify-content: center;
align-items: center;
/* min-height:100%; */
background-color: black;
color: white
}
div {
display: flex;
justify-content: center;
/* align-items: center; */
/* min-height:100%; */
background-color: black;
color: white
}
.logs {
justify-content: center;
background-color: black;
color: white
}
input[type="submit"] {
display: block;
margin: auto;
}
button {
display: block;
margin: 10px auto;
}
.urlbox:empty {
border: 2px solid grey;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
.urlbox:valid:not(:placeholder-shown) {
border: 2px solid rgb(24,216,96);
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
.urlbox:invalid {
border: 2px solid red;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
button{
/* margin-right: 0px; */
height: 30px;
width:130px;
border-radius: 5px ;
border: none;
/* float: right; */
background-color: #ddd;
font-weight: bold;
}
button:hover{
background-color: rgb(24,216,96);
color: white;
}
@media (max-width: 600px) {
body {
background-color: black;
}
h1 {
color: rgb(24,216,96);
background-color: black;
text-align: center;
padding: 10px;
}
h2 {
text-align: center;
margin: auto;
padding: 10px;
color: white;
}
.url {
display: flex;
justify-content: center;
align-items: center;
background-color: black;
color: white;
}
div {
display: flex;
justify-content: center;
background-color: black;
color: white;
}
.logs {
justify-content: center;
background-color: black;
color: white;
}
input[type="submit"] {
display: block;
margin: auto;
}
button {
display: block;
margin: 10px auto;
}
.urlbox {
border: 2px solid grey;
font-size: 13px;
padding: 7px;
border-radius: 9px;
width: 100%;
height: 30px;
box-sizing: border-box;
}
.urlbox:valid:not(:placeholder-shown) {
border: 2px solid rgb(24,216,96);
}
.urlbox:invalid {
border: 2px solid red;
}
button {
height: 30px;
width: 130px;
border-radius: 5px;
border: none;
background-color: #ddd;
font-weight: bold;
box-sizing: border-box;
}
button:hover {
background-color: rgb(24,216,96);
color: white;
}
}

View File

@ -1,191 +0,0 @@
/* Mise en forme générale */
body {
background-color: black;
}
/* Titre principal */
h1 {
color: rgb(24,216,96);
background-color: black;
text-align: center;
padding: 10px;
margin-top: 10px;
}
/* Titre secondaire */
h2 {
text-align: center;
margin: auto;
padding: 10px;
color: white;
}
/* Conteneur principal */
.url {
display: flex;
flex-direction: column;
align-items: center;
background-color: black;
color: white;
}
/* Conteneurs secondaires */
div {
display: flex;
flex-direction: column;
align-items: center;
background-color: black;
color: white;
}
/* Conteneur des logs */
.logs {
display: flex;
flex-direction: column;
align-items: center;
background-color: black;
color: white;
}
/* Bouton de soumission du formulaire */
input[type="submit"] {
display: block;
margin: auto;
}
/* Bouton générique */
button {
display: block;
margin: 10px auto;
}
/* Champ de saisie de l'URL */
.urlbox:empty {
border: 2px solid grey;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
height: 30px;
/* width: 150; */
}
.urlbox:valid:not(:placeholder-shown) {
border: 2px solid rgb(24,216,96);
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
/* width: 150%; */
height: 30px;
}
.urlbox:invalid {
border: 2px solid red;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
/* width: 150%; */
height: 30px;
}
/* Bouton de téléchargement */
button {
height: 30px;
width: 130px;
border-radius: 5px;
border: none;
background-color: #ddd;
font-weight: bold;
}
button:hover {
background-color: rgb(24,216,96);
color: white;
}
/* Mise en forme pour écrans de smartphone */
@media only screen and (max-width: 480px) {
/* Titre principal */
h1 {
font-size: 18px;
}
/* Titre secondaire */
h2 {
font-size: 14px;
}
/* Conteneur principal */
.url {
padding: 0 5px;
}
/* Champ de saisie de l'URL */
.urlbox {
width: 150%;
padding: 0 10%;
}
/* Bouton de téléchargement */
button {
width: 80%;
}
}
/* Mise en forme pour écrans de tablette */
@media only screen and (min-width: 481px) and (max-width: 768px) {
/* Titre principal */
h1 {
font-size: 22px;
}
/* Titre secondaire */
h2 {
font-size: 16px;
}
/* Conteneur principal */
.url {
padding: 0 10px;
}
/* Champ de saisie de l'URL */
.urlbox {
width: 150%;
}
/* Bouton de téléchargement */
button {
width: 80%;
}
}
/* Mise en forme pour écrans d'ordinateur */
@media only screen and (min-width: 769px) {
/* Titre principal */
h1 {
font-size: 28px;
}
/* Titre secondaire */
h2 {
font-size: 20px;
}
/* Conteneur principal */
.url {
padding: 0 20px;
}
/* Champ de saisie de l'URL */
.urlbox {
width: 200%;
}
/* Bouton de téléchargement */
button {
width: 80%;
}
}

View File

@ -1,34 +0,0 @@
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{{ url_for('static', filename= 'css/style.css') }}">
<title>SpotDL Web</title>
</head>
<body>
<div class="download_complete">
<h1> SpotDL Web </h1>
<h2> Téléchargement Terminé </h2>
<!-- <a class="btn btn-success" href="{{url_for('download')}}">Download</a> -->
<button onclick="window.location.href ='{{url_for('download')}}';">Download</button>
<button onclick="window.location.href = '/';">Télécharger à nouveau</button>
<form class="logs">
<div><h1>Fichier de texte</h1></div>
<div>
<a>
{% for line in result2 %}
<p>{{ line }}<br></p>
{% endfor %}
</a>
</div>
<div>
<a>
{% for log in logs %}
<p>{{ log }}<br></p>
{% endfor %}
</a>
</div>
</form>
</div>
</body>

View File

@ -1,19 +0,0 @@
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{{ url_for('static', filename= 'css/style.css') }}">
<title>SpotDL Web</title>
</head>
<body>
<div class="erreur">
<h1> SpotDL Web </h1>
<h2> Veuillez entrer au moins une URL ! </h2>
<button onclick="window.location.href = '/';">Télécharger à nouveau</button>
{% if message %}
<p>{{ message }}</p>
{% endif %}
</div>
</body>

View File

@ -1,11 +0,0 @@
<head>
<title>Fichier de texte</title>
</head>
<body>
<h1>Fichier de texte</h1>
<ul>
{% for log in logs %}
<p>{{ log }}</p>
{% endfor %}
</ul>
</body>

View File

@ -1,53 +0,0 @@
<style>
button:hover {
background-color: blue;
color: white;
}
button:active::before {
content: "Bouton cliqué";
}
input:empty {
border: 2px solid grey;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
input:valid:not(:placeholder-shown) {
border: 2px solid green;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
input:invalid {
border: 2px solid red;
font-size: 13px;
padding-left: 7px;
padding-right: 7px;
border-radius: 9px;
width:100%;
height:30px;
}
</style>
<!-- L'élément input suivant aura une bordure grise s'il est vide, verte s'il contient une valeur valide, ou rouge s'il contient une valeur qui ne respecte pas le format défini par la regex -->
<input type="text" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)$" placeholder="url"/>
<button id="mon-bouton">Mon bouton</button>
<script>
// Récupère l'élément bouton grâce à son ID
const bouton = document.getElementById('mon-bouton');
// Ajoute un écouteur d'événement 'click' au bouton
bouton.addEventListener('click', function() {
// Met à jour la valeur de l'attribut innerHTML du bouton
this.innerHTML = "Bouton cliqué";
});
</script>

View File

@ -1,64 +0,0 @@
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{{ url_for('static', filename= 'css/style.css') }}">
<title>SpotDL Web</title>
</head>
<body>
<div class="all">
<div class="procedure">
<h1 class="titre">SpotDL Web</h1>
<a href="https://open.spotify.com/" style="color:white;" target="_blank">Aller sur Spotify <br> </a>
<a>- Chercher un album ou une playlist <br> </a>
<a>- Copier le ou les lien(s) url ci-dessous <br> </a>
</div>
<div class="url" style="padding-top: 10px;">
<form method="POST">
<!-- <label for="url">URL:</label>
<input type="text" name="url" id="url"> -->
<!-- regex="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" -->
<div style="margin-top: 10px;">
<!-- <label for="url1">URL 1:</label> -->
<input type="text" name="url1" id="url1" class="urlbox" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" placeholder="Copier un lien d'album ou de playlist">
</div>
<div style="margin-top: 10px;">
<!-- <label for="url2">URL 2:</label> -->
<input type="text" name="url2" id="url2" class="urlbox" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" placeholder="Copier un lien d'album ou de playlist">
</div>
<div style="margin-top: 10px;">
<!-- <label for="url3">URL 3:</label> -->
<input type="text" name="url3" id="url3" class="urlbox" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" placeholder="Copier un lien d'album ou de playlist">
</div>
<div style="margin-top: 10px;">
<!-- <label for="url4">URL 4:</label> -->
<input type="text" name="url4" id="url4" class="urlbox" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" placeholder="Copier un lien d'album ou de playlist">
</div>
<div style="margin-top: 10px;">
<!-- <label for="url5">URL 5:</label> -->
<input type="text" name="url5" id="url5" class="urlbox" pattern="^https://open\.spotify\.com/(?:album|playlist)/[\w-]+(?:\?si=[\w-]+)?$" placeholder="Copier un lien d'album ou de playlist">
</div>
<div style="margin-top: 10px;">
<button type="submit" id="btn" class="btn" value="Téléchargement">Téléchargement</button>
</div>
</form>
</div>
</div>
<script>
// Récupère l'élément bouton grâce à son ID
const bouton = document.getElementById('btn');
// Ajoute un écouteur d'événement 'click' au bouton
bouton.addEventListener('click', function() {
// Met à jour la valeur de l'attribut innerHTML du bouton
this.innerHTML = "Téléchargement en cours ...";
});
</script>
</body>

19
app.py
View File

@ -5,8 +5,9 @@ import os, logging, json
app = Flask(__name__)
with open("identifiants.json") as f:
identifiants = json.load(f)
#Page d'identification en cours de développement
# with open("identifiants.json") as f:
# identifiants = json.load(f)
def process_file(urls):
download_param_album = '{artist}/{album}/{artist} - {title}'
@ -14,7 +15,6 @@ def process_file(urls):
os.chdir('downloads')
os.system(f'rm -rf *')
#run(['rm', '-rf', '*']) ne fonctionne pas ... ??
for url in urls:
if url:
@ -23,7 +23,6 @@ def process_file(urls):
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('../')
@ -31,19 +30,9 @@ def process_file(urls):
def upload_form():
return render_template('index.html')
#Fonctionne
# @app.route('/download/<filename>')
# 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']

6
static/js/script.js Normal file
View File

@ -0,0 +1,6 @@
function startDownload() {
document.getElementById('download-button').innerHTML = 'Téléchargement en cours...';
}
function refreshPage() {
window.location.reload();
}

View File

@ -1,15 +1,14 @@
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="static/css/style.css", filename= 'style.css'>
<title>SpotDL Web</title>
</head>
{% extends 'layout.html' %}
<body>
<div class="container">
<h1>Error 404</h1>
<h2>Il semble que vous soyez perdu. Revenez à la page d'accueil</h2>
<button class="btn" onclick="window.location.href = '/';">Accueil</button>
</div>
{% block body %}
</body>
<body>
<div class="container">
<h1>Error 404</h1>
<h2>Il semble que vous soyez perdu. Revenez à la page d'accueil</h2>
<button class="btn" onclick="window.location.href = '/';">Accueil</button>
</div>
</body>
{% endblock body %}

View File

@ -1,18 +1,18 @@
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="static/css/style.css", filename= 'style.css'>
<title>SpotDL Web</title>
</head>
{% extends 'layout.html' %}
<body>
<div class="container">
<h1 class="title"> SpotDL Web </h1>
<h2> Veuillez entrer au moins une URL ! </h2>
<button class="btn" onclick="window.location.href = '/';">Accueil</button>
{% block body %}
{% if message %}
<p>{{ message }}</p>
{% endif %}
</div>
<body>
<div class="container">
<h1 class="title"> SpotDL Web </h1>
<h2> Veuillez entrer au moins une URL ! </h2>
<button class="btn" onclick="window.location.href = '/';">Accueil</button>
</body>
{% if message %}
<p>{{ message }}</p>
{% endif %}
</div>
</body>
{% endblock body %}

View File

@ -1,13 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="static/css/style.css", filename= 'style.css'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SpotDL Web</title>
</head>
{% extends 'layout.html' %}
{% block body %}
<body>
<div class="container">
<h1 class="title">SpotDL Web</h1>
<div class="bordered">
@ -40,17 +34,6 @@
<button type="submit" class="btn" id="download-button" onclick="startDownload()">Télécharger</button>
<button type="reset" class="btn" id="refresh-button" onclick="refreshPage()">Rafraîchir</button>
</form>
<!-- <button class="btn2" id="refresh-button" onclick="refreshPage()">Rafraîchir</button> -->
<!-- <button type="reset" class="btn" id="refresh-button" onclick="refreshPage()">Rafraîchir</button> -->
</div>
<script>
function startDownload() {
document.getElementById('download-button').innerHTML = 'Téléchargement en cours...';
}
function refreshPage() {
window.location.reload();
}
</script>
</body>
</html
{% endblock body %}

16
templates/layout.html Normal file
View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="static/css/style.css", filename= 'style.css'>
<script src="/static/js/script.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SpotDL Web</title>
</head>
<body>
{% block body %}{% endblock body %}
</body>
</html>

7
templates/modele.html Normal file
View File

@ -0,0 +1,7 @@
{% extends 'layout.html' %}
{% block body %}
{% endblock body %}