OpenLigaDB/OpenLigaDB-Samples

Feature request: Webhooks

Closed this issue · 12 comments

Statt ständig die API abzufragen, sollte es die Möglichkeit geben, einen Webhook zu registrieren, sodass der Server selbst den Client kontaktiert, wenn ein Ergebnis sich ändert.

Damit gäbe es weniger Last am Server und aktuellere Ergebnisse beim Client.

Denkbar wären auch zeitlich begrenzte Webhooks, die zum Beispiel nur für die Dauer des Spiels registriert werden.

Die Registrierung selbst könnte auch über die API laufen, sodass der Aufwand am Server geringer wird.

Möglicherweise wäre auch ein MQTT Broker eine gute Wahl, wenig Aufwand und Last am Server, einfach beim Client einzubinden.

msiggi commented

Möglicherweise wäre auch ein MQTT Broker eine gute Wahl, wenig Aufwand und Last am Server, einfach beim Client einzubinden.

Wie wäre es mit diesem Broker? https://www.hivemq.com/public-mqtt-broker/ ?

Ja, damit wäre sogar der Broker selbst extern ausgelagert, dann bräuchte die API oder sonstein Prozess am OLDB-Server "nur" noch die Ergebnisse dorthin pushen, alle anderen können sich dort bedienen.
Wenn du etwas mehr Kontrolle haben willst, kannst Du natürlich selbst einen Broker hosten, zum Beispiel mosquitto.

Hi. Änderungen der Spiele sollten nun per MQTT gepushed werden. Bitte testet es!

Broker: broker.hivemq.com
Port: 8883
TLS-enabled

Subscription-Topic: openligadb

@msiggi
Ich hatte mich letzte Woche damit verbunden und bekam auch Messages.
Das macht so vieles einfacher. 👍 Vielen Danke dafür.

Ich hab's leider nicht geloggt, kommt da ein Spiel oder ein Array von Spielen zurück.

Ich hab's leider nicht geloggt, kommt da ein Spiel oder ein Array von Spielen zurück.

Es kommt das geänderte Spiel als Objekt zurück.

Kannst du bitte einmal erklären, wann Nachrichten kommen.

Gestern beim DFB Pokal Finale habe ich nur eine Nachricht bekommen als das Spiel beendet war.
Ich bin davon ausgegangen, dass jede Änderung des Datensatzes, also auch Tore, zu einem Push führen.

Weil nun auch Sommerpause und Spielflaute herrscht, ist es schwer zu testen.

Danke dir und lieben Gruß

Es sollte bei jeder Änderung eines Spiels (Tor, Ergebnis, Spiel beendet....) eine Message geschickt werden.

Nimm doch zum Testen diese Liga hier, hier kannst Du mit den Ergebnissen spielen!

Top, funktioniert alles!
Die TestLiga kannte ich nicht.

Danke für alles.

Die Testliga ist ja auch neu #78 ;-)

sehr cool, funktioniert super, danke!

Allerdings kam heute eine Nachricht, die ich nicht ganz nachvollziehen kann, das war heute um 12:43:

{
 "matchID": 69352,
 "matchDateTime": "2024-06-18T21:00:00",
 "timeZoneID": "W. Europe Standard Time",
 "leagueId": 4708,
 "leagueName": "UEFA EURO 2024",
 "leagueSeason": 2024,
 "leagueShortcut": "em",
 "matchDateTimeUTC": "2024-06-18T19:00:00Z",
 "group": {
   "groupName": "1. Runde Gruppenphase",
   "groupOrderID": 1,
   "groupID": 44154
 },
 "team1": {
   "teamId": 3198,
   "teamName": "Portugal",
   "shortName": "PRT",
   "teamIconUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_Portugal.svg/2000px-Flag_of_Portugal.svg.png",
   "teamGroupName": null
 },
 "team2": {
   "teamId": 141,
   "teamName": "Tschechien",
   "shortName": "CZE",
   "teamIconUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Flag_of_the_Czech_Republic.svg/200px-Flag_of_the_Czech_Republic.svg.png",
   "teamGroupName": null
 },
 "lastUpdateDateTime": "2024-06-19T12:43:29.92",
 "matchIsFinished": false,
 "matchResults": [
   {
     "resultID": 110943,
     "resultName": "Halbzeitergebnis",
     "pointsTeam1": 0,
     "pointsTeam2": 0,
     "resultOrderID": 1,
     "resultTypeID": 1,
     "resultDescription": "Ergebnis zur Halbzeitpause"
   },
   {
     "resultID": 110944,
     "resultName": "Endergebnis",
     "pointsTeam1": 0,
     "pointsTeam2": 0,
     "resultOrderID": 2,
     "resultTypeID": 2,
     "resultDescription": "Ergebnis nach Ende der offiziellen Spielzeit"
   }
 ],
 "goals": [],
 "location": {
   "locationID": 1216,
   "locationCity": "Leipzig",
   "locationStadium": null
 },
 "numberOfViewers": null
}

Da wurde also das Spiel von gestern irgendwie wieder auf 0:0 gesetzt und matchIsFinished ist wieder false und lastUpdateDateTime ist "2024-06-19T12:43:29.92". Wenn ich genau dieses Spiel von der API abrufe mit https://api.openligadb.de/getmatchdata/69352 wird aber der korrekte Spielstand angezeigt und lastUpdateDateTime ist "2024-06-19T00:20:54.67". Wie kommt es zu sowas?