ParkAPI icon indicating copy to clipboard operation
ParkAPI copied to clipboard

[Heidelberg] Data

Open kiliankoe opened this issue 9 years ago • 22 comments

http://parken.heidelberg.de

kiliankoe avatar Jun 22 '15 10:06 kiliankoe

http://parken.heidelberg.de/api/parking-location?nc=0.9512676233425736 Funktioniert nicht im Browser, braucht folgenden HTTP Header Accept: application/json, text/javascript, /

florianschmidt1994 avatar Jun 23 '15 13:06 florianschmidt1994

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?

AugustQu avatar May 17 '19 15:05 AugustQu

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?

AugustQu avatar May 23 '19 13:05 AugustQu

Oh, was treiben die für einen Aufwand... Ich frag mal an, ob das nicht einfacher geht...

hbruch avatar May 23 '19 14:05 hbruch

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.

kiliankoe avatar May 23 '19 14:05 kiliankoe

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

hbruch avatar May 23 '19 14:05 hbruch

Hi kiliankoe,

das klappt, in der Tat.

OK, gut. Wie baue ich das in ParkenDD ein?

Die Auswertung der Daten ist kein Problem.

AugustQu avatar May 24 '19 07:05 AugustQu

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?

AugustQu avatar May 24 '19 07:05 AugustQu

Gute Frage. Ich glaube den Fall mit extra Headern hatten wir noch nicht. Soweit ich mich entsinnen kann geht das aktuell nicht.

jklmnn avatar May 24 '19 08:05 jklmnn

Hilft das https://2.python-requests.org//de/latest/user/quickstart.html#benutzerdefinierte-header ?

hbruch avatar May 24 '19 08:05 hbruch

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.

kiliankoe avatar May 24 '19 08:05 kiliankoe

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

jklmnn avatar May 24 '19 08:05 jklmnn

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 😄

kiliankoe avatar May 24 '19 10:05 kiliankoe

also ich kann die Daten lesen, in meinem Python-Skript. Jetzt fehlt noch die Auswertung.

Zum weiteren Vorgehen:

  1. 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?

  1. 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?

AugustQu avatar May 24 '19 12:05 AugustQu

@Kilian Geht z.B. Frankfurt.py da nicht auch schon einen solchen Weg? Im Skript wird nochmals explizit ein json-Endpoint angefragt?

hbruch avatar May 24 '19 13:05 hbruch

Oh, in der Tat. Naja dann spricht ja erst rechts nichts mehr dagegen 🙈

kiliankoe avatar May 24 '19 13:05 kiliankoe

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.

AugustQu avatar May 24 '19 14:05 AugustQu

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.

jklmnn avatar May 24 '19 14:05 jklmnn

Für viele Parkhäuser dürfte auch in OSM schon recht detailliert die Einfahrten erfasst sein.

hbruch avatar May 24 '19 15:05 hbruch

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.

AugustQu avatar May 25 '19 08:05 AugustQu

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?

AugustQu avatar May 25 '19 15:05 AugustQu

pull request ist da.

AugustQu avatar May 27 '19 12:05 AugustQu