From 666e79e8ce762d9765bd24e5b03fcd222abe44e2 Mon Sep 17 00:00:00 2001 From: mikka Date: Fri, 1 May 2026 22:07:06 +0200 Subject: [PATCH] datei() fix --- app.py | 249 ++++++++++++++++++++++++----------------------- static/script.js | 3 +- 2 files changed, 127 insertions(+), 125 deletions(-) diff --git a/app.py b/app.py index fda6def..7a963fa 100644 --- a/app.py +++ b/app.py @@ -6,166 +6,167 @@ import json import os 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] + 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 + 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 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 "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 + 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+".*") - audio = file[0].replace("static/", "") + 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/", "") - return audio + return audio def kartenGeneriren(song): - id = song["wikiid"] - 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"] + 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" app = Flask(__name__) @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) + print(liste) + 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"]) 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"]) 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) diff --git a/static/script.js b/static/script.js index 815e345..e97cb97 100644 --- a/static/script.js +++ b/static/script.js @@ -7,6 +7,7 @@ playcolor = "#00ff3c" loop = true function onplay(id){ + //What is id id = parseInt(id) if(id>0){ articles[id-1].style.filter = "grayscale("+(id+1)*20+"%)" @@ -98,4 +99,4 @@ for (const [index,audio] of audios.entries()){ } } }) -} \ No newline at end of file +}