尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Browser-App, die Spielstände, Tabellen und News aus der öffentlichen ESPN-API anzeigt. Gehostet auf Vercel, Code auf GitHub – ohne Build-Schritt, ohne Abhängigkeiten.
logo: 'logos/datei.png' im LEAGUES-Eintrag). Jede Liga hat eine Akzentfarbe; die zuletzt gewählte Liga je Sportart wird gemerkt.currentGameTime (Sekunden im aktuellen Drittel) und modus (Drittel-/Verlängerungslänge, z. B. 20-20-20-OT5-PSO): Länge der abgeschlossenen Drittel + volle Minuten im laufenden Drittel, nie über das Drittelende hinaus; Verlängerung zählt ab 61'; beim Penaltyschießen entfällt die Minute (api/_hockeyapp.js, liveMinute). Aktualisierung alle 30 s./api/live, jede Minute aktualisiert, ESPN-Ligen).ger.dfb_pokal ganz hinten unter Fußball (Gruppe „Pokal“, eigenes Logo logos/dfbpokal.png). Als K.-o.-Wettbewerb hat er keinen Tab „Tabelle“ (cup: true im LEAGUES-Eintrag). ESPN liefert für Pokale (DFB-Pokal, Champions/Europa/Conference League) keine Tagesliste, sondern Runden mit Zeitraum, und lehnt Datumsbereiche bei Fußball mit 400 ab. Der Proxy (api/espn.js) zerlegt deshalb Bereiche bis 14 Tage selbst in Einzeltage und meldet die Tage mit Spielen (days); die App holt die Spieltage wochenweise nach – daraus entstehen Tagesnavigation (‹ › springen nur zu Tagen mit Spiel), Kalenderpunkte und „Heute“-Markierung./api/logo, im Browser gespeichert). Live-Spiele pulsieren rot, Favoriten-Spiele haben einen goldenen Rahmen. Vor Spielbeginn zeigt jede Karte oben mittig einen minutengenauen Countdown bis zum Anpfiff (z. B. „1 Tag 23 Stunden 15 Minuten“, Einheiten mit 0 entfallen; bei Beginn verschwindet er)./ oder Strg+K): findet Ligen, Teams aller Ligen (ESPN-Teamlisten, Kreisliga- und Hockeyweb-Tabellen) und Spieler über die ESPN-Suche. Teams lassen sich direkt in der Trefferliste per ★ favorisieren; Auswahl öffnet das Team- bzw. Spielerprofil (Kreisliga/Eishockey: Tabelle mit hervorgehobenem Team).…/?sync=CODE öffnen oder Code eingeben. Bestehende Favoriten beider Geräte werden zusammengeführt; danach gewinnt je Team/Spiel die neueste Änderung (auch Löschungen werden übertragen). Abgleich beim Start, bei jeder Änderung, beim Zurückkehren zur Seite und alle 2 Minuten. Grüner Punkt = Sync aktiv, rot = Fehler. Gespeichert in Vercel Blob (api/sync.js, Store „sport-dashboard-sync“, Umgebungsvariable BLOB_READ_WRITE_TOKEN) unter dem SHA-256-Hash des Codes – der Code selbst wird nirgends gespeichert./api/translate: mit DeepL, sobald die Umgebungsvariable DEEPL_API_KEY gesetzt ist (kostenloser Schlüssel „DeepL API Free“), sonst mit dem Übersetzer des Browsers (Chrome, falls Sprachpaket vorhanden) bzw. dem kostenlosen Dienst MyMemory (Tageslimit). Übersetzungen werden im Browser zwischengespeichert.teams/{id}, …/roster, …/schedule, …/statistics, news?team=, standings (Proxy api/espn.js).athletes/{id}, …/overview, …/gamelog, …/bio (Proxy api/espn.js).espn-dashboard/
├── index.html Seitengerüst
├── styles.css Design (dunkles Theme, mobil optimiert)
├── app.js Frontend-Logik
├── gamecast.js Spiel-Popup (Gamecast, Boxscore, Bericht)
├── profile.js Spieler-/Team-Popup (Profilseite, Teamfarben als Akzent)
├── logo.js Logo-Hilfe (Dark-Variante per Long-Press) + Teamfarben (TeamColor, Farbe aus Logo)
├── api/
│ ├── espn.js Vercel-Function: Proxy zur ESPN-API (CORS + Caching, inkl. Suche & Kader)
│ ├── logo.js Reicht Fussball.de-/Hockeyweb-Logos durch (für die Farberkennung)
│ ├── amateur.js Fussball.de (Kreisliga)
│ ├── amateurgame.js Fussball.de: Details für das Spiel-Popup (Kreisliga)
│ └── hockey.js Hockeyweb (Eishockey Europa)
├── vercel.json Vercel-Einstellungen
└── package.json
Der Browser ruft nie direkt ESPN auf, sondern /api/espn?type=…&sport=…&league=….
Die Function prüft die Parameter (kein offener Proxy), holt die Daten und lässt sie
von Vercel cachen (Spielstände 20 s, Tabellen/News 5 min).
Verwendete ESPN-Endpunkte:
| Typ | URL |
|---|---|
| scoreboard | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/scoreboard?dates=YYYYMMDD |
| standings | site.api.espn.com/apis/v2/sports/{sport}/{league}/standings |
| news | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/news |
| summary | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/summary?event={id} |
| rankings | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/rankings (AP Top 25 für NCAAF/NCAAM) |
| team | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id} (Team-Popup) |
| athlete | site.web.api.espn.com/apis/common/v3/sports/{sport}/{league}/athletes/{id} (Spieler-Popup) |
| schedule / statistics | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id}/schedule (bzw. /statistics) – Teamprofil |
| overview / gamelog / bio | site.web.api.espn.com/apis/common/v3/sports/{sport}/{league}/athletes/{id}/overview (bzw. /gamelog, /bio) – Spielerprofil |
| roster | site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{id}/roster (Kader im Team-Popup) |
| search | site.web.api.espn.com/apis/search/v2?query=… (Spieler-/Teamsuche, ligaübergreifend) |
Zwei Mannschaften der SGM FC Gündelbach/TSV Häfnerhaslach erscheinen gemeinsam als Liga „Kreisliga“ unter Fußball
(Umschalter Beide / SGM I / SGM II; in LEAGUES in app.js: teams: ['sgm1', 'sgm2']). Tab „Spiele“ funktioniert wie bei den ESPN-Ligen (Tagesansicht mit Datumsnavigation,
Sprung zum nächsten Tag mit Spielen; Team-Favoriten per ★, auch in der ★-Ansicht), Tab „Tabelle“ zeigt die Liga-Tabelle
(Platz 1 grün, Platz 2 gelb). Daten von Fussball.de: Die Tagesansicht zeigt alle Spiele der Liga (Spielpläne aller Mannschaften der Tabelle
werden zusammengeführt, 30 Min. Cache); Spiele der eigenen Mannschaft sind markiert. Vereinslogos kommen
vom Fussball.de-Logodienst (Hotlink).
api/amateur.js liest die HTML-Fragmente der Mannschaftsseite (ajax.team.table, ajax.team.matchplan,
ajax.team.prev.games) und liefert JSON; Antworten werden 15 Minuten im Edge-Netz gecacht.api/_fussballde.js enthält Mannschaftskonfiguration und Parser (npm test prüft ihn).amateurdetail.js + api/amateurgame.js): Spielort mit Kartenlink, Vergleich der Mannschaften
(Tabellenplatz, Punkte, Torverhältnis, bester Torschütze, Karten), Form der letzten fünf Spiele (S grün, U grau, N rot), Anpfiff/Abpfiff, Vor-/Spielberichte (öffnen im Lesemodus des Popups, Text über /api/amateurgame?article=) und bei gespielten Spielen der Spielverlauf (Minute, Art, Seite)
sowie ein Link zur Spielseite (der Spielverlauf ist unvollständig: Tore ohne Elfmeter stehen dort nicht lesbar). Es wird nur angezeigt, was auf Fussball.de lesbar im HTML steht; Schiedsrichter, Aufstellungen,
Spielernamen und Zwischenstände fehlen dort bzw. sind verschleiert. Die Function akzeptiert nur Spielseiten von www.fussball.de.TEAMS (api/_fussballde.js) saison, staffelId und ggf. league anpassen
(Team-ID bleibt gleich, die Staffel-ID steht im Ajax-Link der Mannschaftsseite).Das Dropdown „🏒 Eishockey“ in der Liga-Leiste enthält DEL, DEL2, Oberliga Süd, Oberliga Nord, NL (Swiss National League), ICEHL, CHL, SHL und den IIHF European Cup of Nations (bei Hockeyweb unter „Deutschland-Cup“). Aufbau wie bei den ESPN-Ligen:
Technik:
api/_hockeyapp.js, appdb.hockeyweb.de) – wie die Hockeyweb-App. Die Anfragen sind signiert; der Signierschlüssel liegt nicht im Repo, sondern in der Vercel-Umgebungsvariable HOCKEYWEB_APP_KEY (Project Settings → Environment Variables, danach neu deployen). Rundenkennungen (LEAGUES) und SEASON_ID gelten für 2026/27 und müssen zur neuen Saison angepasst werden (requests=seasons / roundsForSeason liefern die IDs).api/_hockeylogos.js; neue Vereine (Aufsteiger) fehlen dort und erscheinen ohne Logo, bis sie ergänzt werden. Fehlt die Teamfarbe, wird sie wie bei den Amateurvereinen aus dem Logo berechnet.api/hockey.js liest die HTML-Seiten von hockeyweb.de aus (api/_hockeyweb.js), falls die App-API fehlt oder scheitert (nur für die sieben ursprünglichen Ligen). Hockeyweb sperrt Server-IPs dort teils mit 403.npm test prüft Parser und Mapper.espn-dashboard) und den Inhalt dieses Ordners hochladen
(auf GitHub: Add file → Upload files, oder per git push).Danach deployt Vercel jeden Commit auf main automatisch.
npm i -g vercel
vercel dev
Dann http://localhost:3000 öffnen. (Einfaches Öffnen der index.html reicht nicht, weil die API-Function laufen muss.)
In app.js die Liste LEAGUES erweitern, z. B.:
{ id: 'por', name: 'Liga Portugal', cat: 'soccer', group: 'Topligen', sport: 'soccer', league: 'por.1', color: '#1fa463' },
{ id: 'wnba', name: 'WNBA', cat: 'basketball', group: 'Profis', sport: 'basketball', league: 'wnba', color: '#ff6f3c' },
cat bestimmt die Sportart (obere Leiste), group den Abschnitt in der Ligaleiste, color die Akzentfarbe.
Die ESPN-API ist öffentlich erreichbar, aber nicht offiziell dokumentiert. ESPN kann Struktur oder Verfügbarkeit jederzeit ändern. Die App ist ein privates Hobbyprojekt ohne Verbindung zu ESPN.