ParkAPI
ParkAPI copied to clipboard
[Heidelberg] Data
http://parken.heidelberg.de
http://parken.heidelberg.de/api/parking-location?nc=0.9512676233425736 Funktioniert nicht im Browser, braucht folgenden HTTP Header Accept: application/json, text/javascript, /
ich habe mal angefangen. Problem sind die Koordinaten der Einfahrten zu den Parkhäusern/Tiefgaragen. Ich kenn mich halt in Heidelberg nicht aus.
Ich könnte eine geojson-Datei zur Verfügung stellen und irgendjemand trägt die Koordinaten ein. Wer macht das?
es ist doch etwas schwieriger als ich dachte. Ich komme halt nicht aus dieser HTML-Welt.
Die Daten werden per JavaScript als JSON-Datei nachgeladen. Das ist das Statement:
c.getJSON("/api-v1/parking-location?api_key=" + encodeURIComponent(b) + "&nc=" + Math.random(), function(g) { d.setup(g) })
So könnte das dann aussehen: http://parken.heidelberg.de/api-v1/parking-update?api_key=H5WaIyR4lgn6wzo7rJf8u4ubecgpX0Q8&nc=0.9868883925795553
Und durch die Zufallszahl am Ende wird sichergestellt, daß ich nicht drankomme.
Oder habt Ihr eine Idee?
Oh, was treiben die für einen Aufwand... Ich frag mal an, ob das nicht einfacher geht...
curl "http://parken.heidelberg.de/api-v1/parking-location?api_key=H5WaIyR4lgn6wzo7rJf8u4ubecgpX0Q8" \
-H 'Accept: application/json'
Es scheint auch zu funktionieren wenn man den nc
Parameter einfach weglässt 👍 Der Accept-Header ist allerdings wichtig.
Zuständige Person ist erst morgen wieder am Platz. Wobei Zufallszahl und ‚nc‘ vermutlich nur zum Vermeiden von Caching dienen, denn der Server kann sie ja auch nicht kennen
Hi kiliankoe,
das klappt, in der Tat.
OK, gut. Wie baue ich das in ParkenDD ein?
Die Auswertung der Daten ist kein Problem.
zur Präzisierung:
normalerweise steht im geojson-file ein Eintrag: "source":"die url"
Passt dies da rein? Allerdings brauche ich 2 Dateien für Heidelberg....
Oder gibt es für den Fall einer JSON-Datei bereits einen Weg. Welchen?
Oder hole ich die beiden Dateien in meinem py-Skript?
Welchen Weg soll ich denn gehen?
Gute Frage. Ich glaube den Fall mit extra Headern hatten wir noch nicht. Soweit ich mich entsinnen kann geht das aktuell nicht.
Hilft das https://2.python-requests.org//de/latest/user/quickstart.html#benutzerdefinierte-header ?
Wenn die aktuelle API das nicht hergibt ist's auch ok, wenn das kurz auf Eis gelegt wird. Ich beabsichtige auch an der Struktur der Importer ein paar grundlegende Änderungen, die sowas auf jeden Fall unterstützen.
@hbruch Das Problem ist nicht die fehlende Möglichkeit mit Requests Header zu senden sondern dass es aktuell keinen Mechanismus gibt für eine spezifische Quelle auch spezifische Header anzugeben. Also würde der Header für alle Anfragen an alle Server gesendet oder wir bauen einen Sonderfall nur für Heidelberg ein, oder aber es geht aktuell nicht.
Obwohl wir als Workaround gerade den Header auch überall mitsenden können 😜 Im schlimmsten Fall kommen bei anderen Quellen besser verarbeitbare Daten^^
Ist aber natürlich keine sinnvolle Lösung, das ist mir schon klar 😄
also ich kann die Daten lesen, in meinem Python-Skript. Jetzt fehlt noch die Auswertung.
Zum weiteren Vorgehen:
- Aspekt: bisher wurden die Daten per Eintrag "source" im geojson-file gelesen. Das geht jetzt so nicht mehr, da ich 2 Dateien brauche. Ausserdem dreht es sich ja nicht mehr um HTML-Dateien. Vorschlag #1: ich lass diesen Eintrag leer. Vorschlag #2: ich schreibe wie gehabt parken.heidelberg.de rein. Diese Seite wird gelesen und ignoriert.
Was geht?
- Aspekt: ich kann die Adressen der beiden Dateien hardcoded ins Skript schreiben, diese Daten lesen und auswerten. Die ersten beiden Schritte widersprechen der bisherigen Logik des Programms, soweit ich es verstanden habe.
Was soll ich machen?
@Kilian Geht z.B. Frankfurt.py da nicht auch schon einen solchen Weg? Im Skript wird nochmals explizit ein json-Endpoint angefragt?
Oh, in der Tat. Naja dann spricht ja erst rechts nichts mehr dagegen 🙈
also ich kann es auslesen und auswerten. Ich brauche auch nur eine Datei.
Aber ich brauche die Random-Number, denn ich bin über den Cache gestolpert.
Jetzt fehlen mir nur noch die Koordinaten der Einfahrten der Parkhäuser. Und da ich mich in Heidelberg nicht auskenne, kann ich die nur schlecht liefern.
Für die Koordinaten hab ich immer Google Maps verwendet. Einfach die Adresse über die Metadaten rausfinden, dann bei Google Maps (oder OSM) den Parkplatz suchen, am besten auf der Satellitenkarte. Dann kannst du da drauf klicken und die Koordinaten sollten in der URL im Browser stehen. Wenn das nicht stimmt ist es halt Pech. Ich glaube in manchen Städten war in der Zeit in der es die in ParkenDD gibt keiner von uns.
Für viele Parkhäuser dürfte auch in OSM schon recht detailliert die Einfahrten erfasst sein.
Danke für die Hinweise. Werde ich so machen.
Mein bisheriger Ansatz ging von der parken-Seite aus. Dort habe ich mir die Angabe der Strasse geholt und dann diese auf einer Karte gesucht -> falscher Weg.
OK, soweit fertig.
Eine Frage noch: ich erhalte das Datum in der Form Sat, 25 May 2019 16:48:00 +0200
. Genügt es, wenn ich das für "last_updated" über diese Anweisung datetime.datetime.strptime(date_time_temp, '%a, %d %b %Y %H:%M:%S %z')
in die richtige Form bringe?
pull request ist da.