Logo und andere kleinen Dinge
This commit is contained in:
parent
587f2546f9
commit
2623dfdf1a
9 changed files with 422 additions and 255 deletions
330
app.py
330
app.py
|
|
@ -1,175 +1,231 @@
|
|||
from flask import Flask, render_template, request, redirect
|
||||
from glob import glob
|
||||
import subprocess
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
from glob import glob
|
||||
|
||||
import requests
|
||||
from flask import Flask, redirect, render_template, request
|
||||
|
||||
|
||||
def wikiapi(id, field):
|
||||
if os.path.isdir("data"):
|
||||
pass
|
||||
else:
|
||||
os.mkdir("data")
|
||||
name = f"data/{id}_{field}.json"
|
||||
try:
|
||||
with open(name, "r") as f:
|
||||
data = json.load(f)
|
||||
except OSError:
|
||||
r = requests.get(
|
||||
"https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/"
|
||||
+ id
|
||||
+ "?_fields="
|
||||
+ field,
|
||||
headers={
|
||||
"user-agent": "esc/0.0(mikka@kleinrot.net)",
|
||||
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU",
|
||||
},
|
||||
)
|
||||
data = r.json()
|
||||
with open(name, "x") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
return data[field]
|
||||
|
||||
def wikiapi(id,field):
|
||||
if os.path.isdir("data"):
|
||||
pass
|
||||
else:
|
||||
os.mkdir("data")
|
||||
name = f"data/{id}_{field}.json"
|
||||
try:
|
||||
with open(name, "r") as f:
|
||||
data = json.load(f)
|
||||
except OSError:
|
||||
r = requests.get("https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/"+id+"?_fields="+field, headers={"user-agent":'esc/0.0(mikka@kleinrot.net)','Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU'})
|
||||
data = r.json()
|
||||
with open(name, "x") as f:
|
||||
json.dump(data, f,indent=2,ensure_ascii=False)
|
||||
return data[field]
|
||||
|
||||
def wikisuche(text):
|
||||
mitp1344 = []
|
||||
ohnep1344 = []
|
||||
r = requests.get("https://www.wikidata.org/w/rest.php/wikibase/v1/search/items?q="+text+"&language=en", headers={"user-agent":'esc/0.0(mikka@kleinrot.net)','Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU'})
|
||||
for result in r.json()["results"]:
|
||||
if getescedition(result["id"]):
|
||||
mitp1344.append(result)
|
||||
else:
|
||||
ohnep1344.append(result)
|
||||
return mitp1344 + ohnep1344
|
||||
mitpartsin = []
|
||||
ohnepartsin = []
|
||||
r = requests.get(
|
||||
"https://www.wikidata.org/w/rest.php/wikibase/v1/search/items?q="
|
||||
+ text
|
||||
+ "&language=en",
|
||||
headers={
|
||||
"user-agent": "esc/0.0(mikka@kleinrot.net)",
|
||||
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJhNDBhYmZjYzQxZTlkOTc2YzJiN2NmODZkYzIwMmQzZiIsImp0aSI6ImQ3ODQ4YmJhNjZlMWYzYzdhZGZmODU5NTdmZWE1YjMxODBhMzE2NTc4YWYyMWMzZGZhZGJiOTZlZmM3ZTgyMmJkMTE4YTQ4YWMzMDM2ZmQyIiwiaWF0IjoxNzc1OTE4OTc1LjkzMjQsIm5iZiI6MTc3NTkxODk3NS45MzI0MDEsImV4cCI6MzMzMzI4Mjc3NzUuOTI5NDA1LCJzdWIiOiIxMzEiLCJpc3MiOiJodHRwczovL21ldGEud2lraW1lZGlhLm9yZyIsInJhdGVsaW1pdCI6eyJyZXF1ZXN0c19wZXJfdW5pdCI6NTAwMCwidW5pdCI6IkhPVVIifSwic2NvcGVzIjpbImJhc2ljIl19.WLXRXxNjsZ1kIK2RX-Wds59W8Z1CWphbiV3UBEWvm5STWZ6uvpHZpx5d9lomK5-H56G3259_DavuTymdebQTmAwkeuCGh1gb60u9_4MzmGgspQHBPq3mWX879AUVW69uqsSz2x2zIz-ZUmt5TrZM7X3OBxE01nhVBoiDWnlW4Gt19FjwBQ9WjXzrFHsH9A7BtPzgbKROMXACRQBqh9XZXkN23PvnEV08sx63AGB0cZBkteIsnIfm49-Ht2_DTZKd4_MpEw9TZjOHSjY9odyImXidZOgy7NadT-LwAKQiVlSn6UZWTvgsG6xwP6sad_ctqU1ZupcOJLzd158DhrLAEMk_Qq9-piTQDYtLzWfLx44Jatjae6-0nilOgvrB0XQJC6cTihVk3-9Lyn6Y-e6yIDnEHIIIBj0J8PUv5IJjAojo-2uZ4w8omEzCWDEzf95_GSZmRwj_nRNCVs5jQpVhG9hFpOm2OrTrhqPgYet_dsl3QVEbvtGnlVzCw7j9sj_86axAC1hklQQso6AiAAzEmOiTfC6VyrP8sFjbnDlLBCEiTkYTvOTp5nuYRC8VdwJQm6NJIafjNn5ihp4T8OvJQyzsK1HDYlthvW54-co2gPoeIX-cBItvdrCBNDofoA9bIP3zzwGXdvy1b7lofx5WekWKAGytPCfsr7i2ZJB93xU",
|
||||
},
|
||||
)
|
||||
for result in r.json()["results"]:
|
||||
if getescedition(result["id"]):
|
||||
mitpartsin.append(result)
|
||||
else:
|
||||
ohnepartsin.append(result)
|
||||
return mitpartsin + ohnepartsin
|
||||
|
||||
|
||||
def getescedition(songId):
|
||||
statements = wikiapi(songId,"statements")
|
||||
if "P1344" in statements:
|
||||
for statement in statements["P1344"]:
|
||||
id = statement["value"]["content"]
|
||||
escdata = wikiapi(id,"statements")
|
||||
if escdata["P31"][0]["value"]["content"] == "Q110288240":
|
||||
return id,statement
|
||||
|
||||
statements = wikiapi(songId, "statements")
|
||||
if "partsin" in statements:
|
||||
for statement in statements["partsin"]:
|
||||
id = statement["value"]["content"]
|
||||
escdata = wikiapi(id, "statements")
|
||||
if escdata["P31"][0]["value"]["content"] == "Q110288240":
|
||||
return id, statement
|
||||
|
||||
|
||||
def datei(id):
|
||||
file = glob("static/"+id+".*")
|
||||
file = glob("static/" + id + ".*")
|
||||
|
||||
if file == []:
|
||||
subprocess.run(
|
||||
["yt-dlp", f"http://youtu.be/{id}", "-x", "-o", id], cwd="static"
|
||||
)
|
||||
file = glob("static/" + id + ".*")
|
||||
if file != []:
|
||||
audio = file[0].replace("static/", "")
|
||||
else:
|
||||
audio = None
|
||||
print(audio)
|
||||
return audio
|
||||
|
||||
if file == []:
|
||||
subprocess.run(["yt-dlp",f"http://youtu.be/{id}","-x","-o",id],cwd="static")
|
||||
file = glob("static/"+id+".*")
|
||||
if file != []:
|
||||
audio = file[0].replace("static/", "")
|
||||
else:
|
||||
audio = None
|
||||
print(audio)
|
||||
return audio
|
||||
|
||||
def kartenGeneriren(song):
|
||||
id = song["wikiid"]
|
||||
print(id)
|
||||
statements = wikiapi(id,"statements")
|
||||
labels = wikiapi(id,"labels")
|
||||
song["titel"] = statements.get("P1476",[{"value": {"content":{"text":labels["en"]}}}])[0]["value"]["content"]["text"]
|
||||
song["laenge"] = int(statements.get("P2047",[{"value": {"content":{"amount":"0"}}}])[0]["value"]["content"]["amount"])
|
||||
escedition = getescedition(id)
|
||||
if escedition:
|
||||
(escedition,statement)=escedition
|
||||
song["jahrgang"] = wikiapi(escedition,"labels")["en"]
|
||||
qualifiers = statement["qualifiers"]
|
||||
for qualifier in qualifiers:
|
||||
if qualifier["property"]["id"] == "P1352":
|
||||
song["plazirung"] = str(int(qualifier["value"]["content"]["amount"]))+"."
|
||||
song["interprete"] = " x ".join(set(wikiapi(statement["value"]["content"],"labels")["en"] for statement in statements.get("P175",[])))
|
||||
if "ytid" not in song and "P1651" in statements:
|
||||
song["ytid"] = statements["P1651"][0]["value"]["content"]
|
||||
if "ytid" in song:
|
||||
song["datei"] = datei(song["ytid"])
|
||||
song["img"] = f"http://img.youtube.com/vi/{ song["ytid"] }/sddefault.jpg"
|
||||
if "P6218" in statements:
|
||||
song["text"] = f"//genius.com/{statements["P6218"][0]["value"]["content"]}"
|
||||
if "P18" in statements:
|
||||
song["img"] = f"https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/{statements["P18"][0]["value"]["content"]}&width=300"
|
||||
if "img" not in song:
|
||||
song["img"] = "https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Eurovision_Song_Contest_heart_(2014–2025).svg&width=300"
|
||||
id = song["wikiid"]
|
||||
print(id)
|
||||
statements = wikiapi(id, "statements")
|
||||
labels = wikiapi(id, "labels")
|
||||
song["titel"] = statements.get(
|
||||
"P1476", [{"value": {"content": {"text": labels["en"]}}}]
|
||||
)[0]["value"]["content"]["text"]
|
||||
song["laenge"] = int(
|
||||
statements.get("P2047", [{"value": {"content": {"amount": "0"}}}])[0]["value"][
|
||||
"content"
|
||||
]["amount"]
|
||||
)
|
||||
escedition = getescedition(id)
|
||||
if escedition:
|
||||
(escedition, statement) = escedition
|
||||
song["jahrgang"] = wikiapi(escedition, "labels")["en"]
|
||||
qualifiers = statement["qualifiers"]
|
||||
for qualifier in qualifiers:
|
||||
if qualifier["property"]["id"] == "P1352":
|
||||
song["plazirung"] = (
|
||||
str(int(qualifier["value"]["content"]["amount"])) + "."
|
||||
)
|
||||
song["interprete"] = " x ".join(
|
||||
set(
|
||||
wikiapi(statement["value"]["content"], "labels")["en"]
|
||||
for statement in statements.get("P175", [])
|
||||
)
|
||||
)
|
||||
if "land" not in song and "P495" in statements:
|
||||
song["land"] = wikiapi(statements["P495"][0]["value"]["content"], "labels")[
|
||||
"de"
|
||||
]
|
||||
if "ytid" not in song and "P1651" in statements:
|
||||
song["ytid"] = statements["P1651"][0]["value"]["content"]
|
||||
if "ytid" in song:
|
||||
song["datei"] = datei(song["ytid"])
|
||||
song["img"] = f"http://img.youtube.com/vi/{song['ytid']}/sddefault.jpg"
|
||||
if "P6218" in statements:
|
||||
song["text"] = f"//genius.com/{statements['P6218'][0]['value']['content']}"
|
||||
if "P18" in statements:
|
||||
song["img"] = (
|
||||
f"https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/{statements['P18'][0]['value']['content']}&width=300"
|
||||
)
|
||||
if "img" not in song:
|
||||
song["img"] = (
|
||||
"https://commons.wikimedia.org/w/index.php?title=Special:Redirect/file/Eurovision_Song_Contest_heart_(2014–2025).svg&width=300"
|
||||
)
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.template_filter('zeit')
|
||||
|
||||
@app.template_filter("zeit")
|
||||
def zeit(sekunden):
|
||||
minuten = sekunden // 60
|
||||
rest = sekunden - minuten * 60
|
||||
return f"{minuten}:{rest:02}"
|
||||
minuten = sekunden // 60
|
||||
rest = sekunden - minuten * 60
|
||||
return f"{minuten}:{rest:02}"
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def hello_world():
|
||||
liste = request.args.get("liste")
|
||||
if liste is None:
|
||||
return redirect("/playlists")
|
||||
with open(liste+".json","r") as f:
|
||||
songs = json.load(f)
|
||||
for song in songs:
|
||||
kartenGeneriren(song)
|
||||
gesamtLaenge = 0
|
||||
for song in songs:
|
||||
gesamtLaenge += song["laenge"]
|
||||
return render_template('index.html', karten=songs,gesamtLaenge=gesamtLaenge,liste=liste )
|
||||
liste = request.args.get("liste")
|
||||
if liste is None:
|
||||
return redirect("/playlists")
|
||||
with open(liste + ".json", "r") as f:
|
||||
songs = json.load(f)
|
||||
for song in songs:
|
||||
kartenGeneriren(song)
|
||||
gesamtLaenge = 0
|
||||
for song in songs:
|
||||
gesamtLaenge += song["laenge"]
|
||||
return render_template(
|
||||
"index.html", karten=songs, gesamtLaenge=gesamtLaenge, liste=liste
|
||||
)
|
||||
|
||||
|
||||
@app.route("/playlists")
|
||||
def playlists():
|
||||
listen = glob("*.json")
|
||||
listen = (liste.replace(".json","") for liste in listen)
|
||||
return render_template('playlists.html',lists=listen)
|
||||
listen = glob("*.json")
|
||||
listen = (liste.replace(".json", "") for liste in listen)
|
||||
return render_template("playlists.html", lists=listen)
|
||||
|
||||
|
||||
@app.route("/neueliste")
|
||||
def neueliste():
|
||||
name = request.args.get("name")
|
||||
if name is not None:
|
||||
with open(name +".json", "x") as f:
|
||||
json.dump([],f)
|
||||
return redirect("/?liste="+name)
|
||||
print(liste)
|
||||
return render_template('neueliste.html',name=name)
|
||||
name = request.args.get("name")
|
||||
if name is not None:
|
||||
with open(name + ".json", "x") as f:
|
||||
json.dump([], f)
|
||||
return redirect("/?liste=" + name)
|
||||
return render_template("neueliste.html", name=name)
|
||||
|
||||
|
||||
@app.route("/suche")
|
||||
def suche():
|
||||
such = request.args.get("suche")
|
||||
liste = request.args.get("liste")
|
||||
if such is not None:
|
||||
ergebnisse = wikisuche(such)
|
||||
else:
|
||||
ergebnisse = []
|
||||
return render_template('suche.html', ergebnisse=ergebnisse,anfrage=such,liste=liste)
|
||||
such = request.args.get("suche")
|
||||
liste = request.args.get("liste")
|
||||
if such is not None:
|
||||
ergebnisse = wikisuche(such)
|
||||
else:
|
||||
ergebnisse = []
|
||||
return render_template(
|
||||
"suche.html", ergebnisse=ergebnisse, anfrage=such, liste=liste
|
||||
)
|
||||
|
||||
@app.route("/suche",methods=["POST"])
|
||||
|
||||
@app.route("/suche", methods=["POST"])
|
||||
def suche_finden():
|
||||
liste = request.args.get("liste")
|
||||
with open(liste +".json","r") as f:
|
||||
songs = json.load(f)
|
||||
song = {"wikiid":request.form.get("id")}
|
||||
kartenGeneriren(song)
|
||||
songs.append(song)
|
||||
with open(liste+".json","w") as f:
|
||||
json.dump(songs,f,indent=2,ensure_ascii=False)
|
||||
return redirect("/suche?liste="+liste,303)
|
||||
liste = request.args.get("liste")
|
||||
with open(liste + ".json", "r") as f:
|
||||
songs = json.load(f)
|
||||
song = {"wikiid": request.form.get("id")}
|
||||
kartenGeneriren(song)
|
||||
songs.append(song)
|
||||
with open(liste + ".json", "w") as f:
|
||||
json.dump(songs, f, indent=2, ensure_ascii=False)
|
||||
return redirect("/suche?liste=" + liste, 303)
|
||||
|
||||
|
||||
@app.route("/remove")
|
||||
def admin():
|
||||
liste = request.args.get("liste")
|
||||
if liste is None:
|
||||
return redirect("/playlists")
|
||||
with open(liste+".json","r") as f:
|
||||
songs = json.load(f)
|
||||
for song in songs:
|
||||
kartenGeneriren(song)
|
||||
gesamtLaenge = 0
|
||||
for song in songs:
|
||||
gesamtLaenge += song["laenge"]
|
||||
return render_template('index.html', karten=songs,gesamtLaenge=gesamtLaenge,liste=liste,admin=True)
|
||||
liste = request.args.get("liste")
|
||||
if liste is None:
|
||||
return redirect("/playlists")
|
||||
with open(liste + ".json", "r") as f:
|
||||
songs = json.load(f)
|
||||
for song in songs:
|
||||
kartenGeneriren(song)
|
||||
gesamtLaenge = 0
|
||||
for song in songs:
|
||||
gesamtLaenge += song["laenge"]
|
||||
return render_template(
|
||||
"index.html", karten=songs, gesamtLaenge=gesamtLaenge, liste=liste, admin=True
|
||||
)
|
||||
|
||||
@app.route("/remove",methods=["POST"])
|
||||
|
||||
@app.route("/remove", methods=["POST"])
|
||||
def loeschen():
|
||||
liste = request.args.get("liste")
|
||||
song = int(request.form.get("index"))
|
||||
with open(liste+".json","r") as f:
|
||||
print(liste+".json")
|
||||
songs = json.load(f)
|
||||
print(songs)
|
||||
print(songs)
|
||||
del songs[song]
|
||||
with open(liste+".json","w") as f:
|
||||
json.dump(songs,f,indent=2,ensure_ascii=False)
|
||||
return redirect("/remove?liste="+liste,303)
|
||||
liste = request.args.get("liste")
|
||||
song = int(request.form.get("index"))
|
||||
with open(liste + ".json", "r") as f:
|
||||
print(liste + ".json")
|
||||
songs = json.load(f)
|
||||
print(songs)
|
||||
print(songs)
|
||||
del songs[song]
|
||||
with open(liste + ".json", "w") as f:
|
||||
json.dump(songs, f, indent=2, ensure_ascii=False)
|
||||
return redirect("/remove?liste=" + liste, 303)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue