73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
import csv
|
|
import re
|
|
import urllib.request
|
|
import json
|
|
import os
|
|
import time
|
|
|
|
SPREADSHEET_ID = "1bsO07WG6ymV4UzHZyB0ayrKCn2zv67SpFaeE4Zmghcc"
|
|
GID = "0"
|
|
CSV_URL = f"https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/gviz/tq?tqx=out:csv&gid={GID}"
|
|
|
|
def parse_csv_data(reader):
|
|
result_data = {}
|
|
users = {}
|
|
|
|
# 1. Zeile auslesen (für die Deadline in Zelle A1)
|
|
# next() holt das nächste (hier: das erste) Element aus dem Reader
|
|
first_row = next(reader, None)
|
|
if first_row and len(first_row) > 0:
|
|
result_data['deadline'] = first_row[0].strip()
|
|
|
|
# 2. Den restlichen Reader durchlaufen (ab Zeile 2)
|
|
for row in reader:
|
|
# Prüfen, ob die Zeile mindestens 5 Spalten hat (wegen Spalte E)
|
|
# und ob Spalte A (Index 0) nicht leer ist
|
|
if len(row) >= 5 and row[0].strip():
|
|
users[row[0].strip()] = row[4].strip()
|
|
|
|
result_data['users'] = users
|
|
return result_data
|
|
|
|
|
|
|
|
def update_data():
|
|
try:
|
|
req = urllib.request.Request(CSV_URL, headers={"User-Agent": "Mozilla/5.0"})
|
|
response = urllib.request.urlopen(req)
|
|
lines = [line.decode("utf-8") for line in response.readlines()]
|
|
|
|
reader = csv.reader(lines)
|
|
parsed_data = parse_csv_data(reader)
|
|
with open("countries.json", "w") as f:
|
|
f.write(json.dumps(parsed_data))
|
|
return parsed_data
|
|
|
|
except Exception as e:
|
|
return {"success": False, "error": str(e)}
|
|
|
|
|
|
def read_data():
|
|
file_path = "countries.json"
|
|
max_age_seconds = 60 * 60 # eine Stunde Cache-Dauer
|
|
|
|
# Prüfen, ob die Datei existiert und wie alt sie ist
|
|
if os.path.exists(file_path):
|
|
# Mtime = Letzte Änderungszeit der Datei in Sekunden seit Epoch
|
|
file_age = time.time() - os.path.getmtime(file_path)
|
|
|
|
if file_age > max_age_seconds:
|
|
update_data()
|
|
else:
|
|
# Falls die Datei noch gar nicht existiert, direkt initial Daten holen
|
|
update_data()
|
|
|
|
# Nach dem potenziellen Update die Datei einlesen
|
|
with open(file_path, "r", encoding="utf-8") as f:
|
|
return json.load(f)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# bindet an 0.0.0.0, damit es im gesamten Netzwerk erreichbar ist
|
|
read_data()
|