api-fussball / api-dart

0 stars 0 forks source link

Adressinformationen und Spiele id #6

Open gpeters3110 opened 1 year ago

gpeters3110 commented 1 year ago

Hi,

ist es möglich /api/team/next_games/ so zu erweitern, dass die Adresse des Fußballplatzes und die Id des Spiels auch geliefert werden?

Danke im Voraus!

wesolowski commented 1 year ago

Hi Gregor,

welche ID benötigst du? Sprechen wir über die Fußball.de-ID oder die Spiel-ID, wie zum Beispiel 280023031? Wenn du möchtest, kann ich dir die URL für das Spiel auf fussball.de zur Verfügung stellen.

Die Adresse bei "next_games" kann ich dir nicht einbauen, da die Informationen nicht verfügbar sind. Das bedeutet, ich muss für jedes Spiel extra auf die Detailseite gehen und die Informationen heraussuchen. Da der Aufruf der Detailseite etwa 70 ms kostet, würde die Seite um circa 700 ms langsamer werden, was ich hier vermeiden möchte. Alternativ könnte ich dir einen API-Endpunkt erstellen, bei dem du die Informationen pro Spiel erhältst. Wäre das für dich von Nutzen?

gpeters3110 commented 1 year ago

Wie werden denn bis jetzt die Daten geholt? Wenn man das Widget entsprechend parsed bekommt man sowohl die nächsten Spiele als auch die Adressen... Wollte ich erst selbst machen, hab dann aber das hier gefunden ^^

gpeters3110 commented 1 year ago

Mit der ID habe ich so etwas gemeint: fc-schalke-04-hamburger-sv/-/spiel/02MA3N5JDO000000VS5489B4VSAUO6GA Also im Prinzip einfach nur die Url zu dem Spiel damit ich mir den Ort selbst ziehen kann

gpeters3110 commented 1 year ago

Kann man die Api eigentlich einfach so nutzen oder muss irgendwas beachtet werden? Ist das mit Fußball.de abgeklärt?

gpeters3110 commented 1 year ago

Also der Endpoint von fußball.de dazu wäre:

https://www.fussball.de/ajax.team.matchplan.loadmore/-/datum-bis/2024-02-07/datum-von/2023-09-10/id/VEREIN_ID/match-type/-1/mime-type/JSON/mode/WIDGET/prev-season-allowed/true/show-venues/true/team-id/TEAM_ID/max/10/offset/10

Allerdings hab ich für meinen konkreten Fall schon ein work around gefunden. Viel Erfolg noch!

LennartLemke commented 1 year ago

Hallo, könntest du mir den Workaround zeigen? Ich bräuchte ebenfalls die Adresse für die jeweiligen Spiele :-) Grüße

gpeters3110 commented 1 year ago

Also aktuell hole ich mir von dem Link oben die URLs zu den Fußball.de Seiten und parse daraus die Adresse. Das ist bisschen tricky weil da in Amateurmannschaften oft der Platz doppelt drin steht... Soll ich dir den Code schicken?

gpeters3110 commented 1 year ago

Tatsächlich bekommt man über den obigen Link aber wie bereits gesagt die Adresse auch direkt, sodass man nur nach <td colspan="3"> querien muss.

gpeters3110 commented 1 year ago

So parse ich aktuell die Adresse:

from pyquery import PyQuery as pq

def linkToLoc(link):
    d = pq(url=link)
    loc = (d(".icon-location").parents('a')[0].text)
    indices=[loc.find(',')]
    while indices[-1]!=-1:
        indices.append(loc.find(',', indices[-1]+1))
    return loc[indices[-4]+2:indices[-3]]+"\n"+loc[indices[-3]+1:]
gpeters3110 commented 1 year ago

So funktioniert es in nur einem Request:

import requests

def getLocations(verein_id, mannschaft_id):
    foo = requests.get(url="https://www.fussball.de/ajax.team.matchplan.loadmore/-/datum-bis/2030-02-07/datum-von/"+datetime.today().strftime('%Y-%m-%d')+"/id/"+verein_id+"/match-type/-1/mime-type/JSON/mode/WIDGET/prev-season-allowed/true/show-venues/true/team-id/"+mannschaft_id+"/max/12/").content.decode()
    foo = foo.replace('\\n', '\n').replace('\\t', '\t').replace('\\"', '"').replace('\/\/', 'https://').replace('\/', '/')
    d = pq(foo)
    locations = d('td[colspan="3"]').contents()
    out = []
    for loc in locations:
        indices=[loc.find(',')]
        while indices[-1]!=-1:
            indices.append(loc.find(',', indices[-1]+1))
        out.append(loc[indices[-4]+2:indices[-3]]+"\n"+loc[indices[-3]+1:-2])
    return out

Die replaces sind ein wenig unschön, aber es funktioniert...