Seite 1 von 1

Import Fraport API

Verfasst: Samstag 23. Oktober 2021, 13:06
von phykka
Hallo zusammen,

ich versuche die Fraport API mit Python abzufragen. Mir ist nicht klar, wie ich den API Key einsetzen muss damit ich eine Verbindung bekomme.

Code: Alles auswählen

import requests

api_key = "3011c147-180b-3ec5-ba2c-34034812****"

url = 'https://developer.fraport.de/api/flights/1.0.2/flight2/FRA/arrival'

data = requests.get(url).json()

scheduled = data['arrival']['scheduled']
estimated = data['arrival'] ['estimated']
Ich bekomme diese Fehlermeldung angezeigt:

requests.exceptions.SSLError: HTTPSConnectionPool(host='developer.fraport.de', port=443): Max retries exceeded with url: /api/flights/1.0.2/flight2/FRA/arrival (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)')))


Bei diesem Beispiel aus einem YouTube Video hab ich es mit der Wetter abfrage hinbekommen, nur wie lässt sich das auf meine Frage mit der Fraport API übertragen ? Wo muss ich den Key eintragen ?

Code: Alles auswählen

import requests

API_KEY = "PASTE YOUR API CODE HERE"
city = input("Hallo! Bitte gib eine Stadt ein.")

url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric'
data = requests.get(url).json()
temp = data['main']['temp']
humidity = data['main']['humidity']

print(f'In {city} beträgt die Temperatur {temp}. Die Luftfeuchtigkeit beträgt {humidity}.')

Vielen Dank im Vorraus :)

Re: Import Fraport API

Verfasst: Samstag 23. Oktober 2021, 14:31
von rogerb
@phykka,

die Fraport APIs benötigen eine Subscription.
Wenn du dich mit deinem Benutzernamen und Passwort auf der Developer-Seite einloggst, siehst du unter der API Console drei APIs.
Du kannst dich bei jeder einzelnen kostenfrei "subscriben".
Dann bekommst du das Authorization Bearer Token angezeigt.
Dieses muss im Request header mit-übergeben werden.
Es scheint man muss die Zertifikatsprüfung auch auf "False" setzen.

Code: Alles auswählen

import requests

bearer_token = "3011c147-180b-3ec5-ba2c-34034812****"

url = "https://developer.fraport.de/api/flights/1.0.2/flight2/FRA/arrival"

headers = {"Accept": "application/json", "Authorization": f"Bearer {bearer_token}"}

arrivals = requests.get(url, headers=headers, verify=False).json()

for arrival in arrivals:
    print(arrival["arrival"]["scheduled"])

Re: Import Fraport API

Verfasst: Samstag 23. Oktober 2021, 14:50
von Sirius3
@phykka: Du kommst gar nicht so weit, dass irgendwelche Daten übertragen werden. Schon das Verbinden scheitert bei Dir, weil der SSL-Zertifikat nicht validiert werden kann.
Einfach die Prüfung auszuschalten, ist selten eine gute Idee.
Mit welchem System arbeitest Du denn?

Re: Import Fraport API

Verfasst: Samstag 23. Oktober 2021, 16:09
von rogerb
Okay, man sollte das Zertifikat prüfen.

Ein Weg:

Code: Alles auswählen

pip install certifi
Dann mit:

Code: Alles auswählen

import certifi

print(certifi.where())
Den Pfad zum pem-File von certifi ermitteln.
Das pem-File muss im texteditor editiert werden um ein weiteres Zertifikat hinzuzufügen.

Das bekommt man hier:
https://ssl-tools.net/subjects/cc6d221c ... e1eece83cc

Unten auf der Seite das letzte Zertifikat ist das, welches auch von Fraport verwendet wird.
Bitte nicht mir vertrauen, sondern selber im Browser prüfen!

Unter "Download" auf PEM clicken.

Dann den Inhalt des heruntergeladenen PEM-File am Ende des PEM-Files von certifi einfügen.
Jetzt noch im request das PEM-File von certifi referenzieren.

Code: Alles auswählen

import requests
import certifi

cert_file = certifi.where()

bearer_token = "3011c147-180b-3ec5-ba2c-34034812****"

url = "https://developer.fraport.de/api/flights/1.0.2/flight2/FRA/arrival"

headers = {"Accept": "application/json", "Authorization": f"Bearer {bearer_token}"}

arrivals = requests.get(url, headers=headers, verify=cert_file)

for arrival in arrivals.json():
    print(arrival["arrival"]["scheduled"])
Achtung, die API Token von Fraport haben eine Lebensdauer von 1 Stunde und müssen danach neu generiert werden.

Das hat für mich funktioniert. Kann sein, dass es auch einfacher / anders funktioniert.