OpenLigaDB-Samples icon indicating copy to clipboard operation
OpenLigaDB-Samples copied to clipboard

Feature request: Webhooks

Open hokascha opened this issue 2 years ago • 3 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.

hokascha avatar Apr 29 '23 12:04 hokascha

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

hokascha avatar Jul 11 '23 08:07 hokascha

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/ ?

msiggi avatar Jul 11 '23 09:07 msiggi

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.

hokascha avatar Jul 11 '23 09:07 hokascha

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 avatar May 05 '24 12:05 msiggi

@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.

xdream77 avatar May 23 '24 16:05 xdream77

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.

msiggi avatar May 23 '24 18:05 msiggi

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ß

xdream77 avatar May 26 '24 08:05 xdream77

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!

msiggi avatar Jun 02 '24 08:06 msiggi

Top, funktioniert alles! Die TestLiga kannte ich nicht.

Danke für alles.

xdream77 avatar Jun 04 '24 16:06 xdream77

Die Testliga ist ja auch neu #78 ;-)

msiggi avatar Jun 04 '24 16:06 msiggi

sehr cool, funktioniert super, danke!

hokascha avatar Jun 19 '24 09:06 hokascha

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?

hokascha avatar Jun 19 '24 11:06 hokascha