Tagebuch-Eintrag #48
API mit Python auslesen
Wie in meinem letzen Zwischenstand 03/2020 angekündigt, wollte ich mich mit dem Thema API und Python beschäftigen und schauen, wie das so funktioniert.
Dabei habe ich mich nach einem Tutorial von dataquest.io orientiert und ja, was soll ich sagen. Das einfacher als ich dachte.
Das schwierige ist vielleicht erstmal den Zugang für die API-Quelle zu holen. Ok, ich dem genannten Tutorial kann eine öffentlich zugängige API ausgelesen werden und zwar Daten von der Raumstation ISS: http://open-notify.org/
Hierfür verwende ich bereits Module, die ich von vorherigen Lektionen bereits kenne. Wirklich neu für mich ist das Python-Modul JSON. Und was macht, das? Nun ja, es verarbeitet JSON-Datei, damit diese in Python weiterverarbeitet werden kann.
API der ISS Position auslesen
Bei meiner Übung möchte ich die aktuelle ISS-Postion auslesen und die dazugehörige API bzw. json-Datei ist hier zu finden:
http://api.open-notify.org/iss-now.json
Und das gibt die json-Datei aus:
{"message": "success", "timestamp": 1586360681, "iss_position": {"longitude": "120.8031", "latitude": "-40.0734"}}
Und auf dem ersten Blick erinnern mich wie geschweiften Klammer {} an Dictionaries in Python und überraschenderweise können die Daten auch wie Dictionaries ausgelesen werden.
Ich behaupte, dass danach alles nur noch „Formsache“ ist. Denn ab hier muss ich nur noch wissen, wie ich z.B. mit den Daten aus Dictionaries auslesen und weiterverarbeiten muss.
Wenn ich mich zum Beispiel nur für die Positionsangaben LATITUDE und LONGITUDE interessiere, dann brauche ich auch nur diese Daten auszulesen und den Rest quasi ignorieren.
Diese Positionsangaben speichere ich dann noch einer separaten csv-Datei ab und erstelle zusätzlich noch ein Diagramm mit dem Python-Modul matplotlib.
Mein Code bei dieser Übung sieht wie folgt aus:
# Module importieren
import requests
import json
import time
import csv
import matplotlib.pyplot as plt
# True für While-Schleife
check_position = True
# Leere Listen für die Koordinaten/Positionen speichern
x_lat = []
y_lon = []
# While-Schleife um die API-Datei auszulesen und zu aktualisieren.
while check_position:
iss_now_api = requests.get("http://api.open-notify.org/iss-now.json")
iss = iss_now_api.json()
iss_position = iss["iss_position"]
# Nur LATITUDE und LONGITUDE auslesen
iss_lat = iss["iss_position"]["latitude"]
iss_lon = iss["iss_position"]["longitude"]
x_lat.append(iss_lat)
y_lon.append(iss_lon)
# LATITUDE und LONGITUDE in der Datei iss_position.csv abspeichern
with open("iss_position.csv", "a", newline="", encoding="UTF-8") as csv_file:
iss_writer = csv.writer(csv_file, quotechar="|", quoting=csv.QUOTE_MINIMAL)
iss_writer.writerow([iss_lat, iss_lon])
print("----" * 5)
# LATITUDE und LONGITUDE ausgeben
print("LATITUDE:", iss_lat)
print("LONGITUDE", iss_lon)
time.sleep(5)
# Diagramm anzeigen und nach dem Schließen startet die while-Schleife erneut
plt.plot(x_lat, y_lon)
plt.show(block=False)
plt.pause(3)
plt.close()
Nach dem ich das Prinzip grundlegend verstanden habe. Möchte ich nun Shopware-APIs auslesen und verarbeiten. Das wird krass werden.
Aber bekannterweise lernt man mit solche, wirklich praktisch nützlichen Programmen am meisten.
Bleibt dran!