OpenLigaDB / OpenLigaDB-Samples

Code-Samples und Issue-Tracker for using OpenLigaDB-Api
https://www.OpenLigaDB.de
Apache License 2.0
135 stars 17 forks source link

Feature request: Webhooks #64

Closed hokascha closed 2 months ago

hokascha commented 1 year ago

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 commented 1 year ago

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

msiggi commented 1 year ago

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

hokascha commented 1 year ago

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.

msiggi commented 3 months ago

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

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

Subscription-Topic: openligadb

xdream77 commented 3 months ago

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

msiggi commented 3 months ago

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.

xdream77 commented 3 months ago

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ß

msiggi commented 2 months ago

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!

xdream77 commented 2 months ago

Top, funktioniert alles! Die TestLiga kannte ich nicht.

Danke für alles.

msiggi commented 2 months ago

Die Testliga ist ja auch neu #78 ;-)

hokascha commented 2 months ago

sehr cool, funktioniert super, danke!

hokascha commented 2 months ago

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?