diff --git a/app.js b/app.js
index 5d21914..991af03 100644
--- a/app.js
+++ b/app.js
@@ -3,38 +3,18 @@
var TWITCH_CHANNEL = "duda_xd";
- /* ------------------------------------------------------------------
- * YouTube: Liest die Datei videos.json, die auf dem Server von
- * fetch_videos.py (einmal am Tag per Cron) mit den aktuellen
- * Video-IDs deines Kanals aktualisiert wird.
- *
- * Dein API-Key ist dabei NIE im Browser - er bleibt komplett auf
- * dem Server versteckt (siehe fetch_videos.py).
- * ------------------------------------------------------------------ */
- function loadYouTube() {
- var grid = document.getElementById("yt-grid");
- if (!grid) return;
-
- fetch("videos.json", { cache: "no-cache" })
- .then(function (r) {
- if (!r.ok) throw new Error("HTTP " + r.status);
- return r.json();
- })
- .then(function (ids) {
- if (!Array.isArray(ids) || !ids.length) {
- grid.innerHTML = '
';
- });
- }
-
+ /* Rendert die Video-IDs aus videos.js als iframes.
+ * Standard-iframe laut YouTube-Empfehlung. Bewusst OHNE
+ * referrerpolicy und OHNE ?si-Parameter: Dann sendet der Browser
+ * immer einen Referer (auch bei HTTP-Seite), den YouTube braucht,
+ * um den Embedder zu erkennen (sonst Fehler 152/153). */
function renderYouTubeGrid(videoIds) {
var grid = document.getElementById("yt-grid");
+ if (!grid) return;
+ if (!videoIds || !videoIds.length) {
+ grid.innerHTML = '
Noch keine Videos vorhanden.
';
+ return;
+ }
var html = "";
for (var i = 0; i < videoIds.length; i++) {
var id = String(videoIds[i]).trim();
@@ -42,17 +22,31 @@
html +=
'
' +
'
' +
- '' +
+ '' +
'
' +
'
';
}
grid.innerHTML = html || '
Keine Videos gefunden.
';
}
+ /* ------------------------------------------------------------------
+ * YouTube: Liest die Video-IDs aus videos.js, die auf dem Server
+ * von fetch_videos.py (einmal am Tag per Cron) mit den aktuellen
+ * Video-IDs deines Kanals aktualisiert wird.
+ *
+ * Dein API-Key ist dabei NIE im Browser - er bleibt komplett auf
+ * dem Server versteckt (siehe fetch_videos.py).
+ * ------------------------------------------------------------------ */
+ function loadYouTube() {
+ var ids = (typeof DUDA17_VIDEOS !== "undefined") ? DUDA17_VIDEOS : [];
+ renderYouTubeGrid(ids);
+ }
+
/* ------------------------------------------------------------------
* Twitch: Live-Player einbetten.
* ------------------------------------------------------------------ */
diff --git a/fetch_videos.py b/fetch_videos.py
index f4d082c..230ccc2 100644
--- a/fetch_videos.py
+++ b/fetch_videos.py
@@ -6,8 +6,8 @@ Dieses Skript laeuft auf deinem Server (einmal am Tag per Cron)
und holt automatisch die aktuellen Video-IDs deines YouTube-Kanals
ueber die offizielle YouTube Data API v3.
-Es schreibt die Video-IDs in die Datei "videos.json", die deine
-Webseite dann einfach liest und anzeigt. So bleibt dein API-Key
+Es schreibt die Video-IDs in die Datei "videos.js", die deine
+Webseite dann per Script-Tag laedt und anzeigt. So bleibt dein API-Key
auf dem Server versteckt und ist NICHT im Browser/DevTools sichtbar.
EINRICHTUNG:
@@ -102,14 +102,18 @@ def main():
# hier nach Erscheinungsdatum sortieren, um sicherzugehen)
items.sort(key=lambda x: x.get("published") or "", reverse=True)
- # Nur die IDs in die Datei schreiben - schlank fuer die Webseite,
- # die nur die Embed-URLs braucht.
+ # Nur die Video-IDs in die Datei "videos.js" schreiben.
+ # videos.js wird per Script-Tag geladen - dadurch gibt es KEINE
+ # CORS-/fetch-Probleme und die Seite funktioniert ueberall.
video_ids = [v["id"] for v in items]
os.makedirs(OUT_DIR, exist_ok=True)
- out_path = os.path.join(OUT_DIR, "videos.json")
+ out_path = os.path.join(OUT_DIR, "videos.js")
with open(out_path, "w", encoding="utf-8") as f:
- json.dump(video_ids, f, ensure_ascii=False, indent=2)
+ f.write("/* Automatisch generiert von fetch_videos.py - nicht manuell editieren. */\n")
+ f.write("var DUDA17_VIDEOS = ")
+ json.dump(video_ids, f, ensure_ascii=False, indent=4)
+ f.write(";\n")
print(f"Erfolgreich. {len(video_ids)} Videos geschrieben nach {out_path}")
diff --git a/index.html b/index.html
index 1970d77..d9bae5c 100644
--- a/index.html
+++ b/index.html
@@ -162,6 +162,7 @@
+