Tagebuch-Eintrag #49
Shopware API mit Python auslesen
Aktuell beschäftige ich mich ein wenig damit, wie man APIs mit Python auslesen und verarbeiten kann. Zuletzt hatte ich es ja geübt, wie ich die API mit den Koordinaten der Raumstation ISS auslesen und verarbeiten kann.
Nach dem ich das geschafft hatte, wollte ich es in einem praxisnahen Projekt umsetzen. Dabei geht es um die API von Shopware 5 welche ich nun mit Python auslesen möchte.
Praxisnah heißt in meinem Fall, dass ich eine Packliste aus Bestellungen erstellen und ausdrucken möchte. Bisher geschah das eher händisch. Das heißt jede Bestellung in unserem Online-Shop mussten wir manuell in eine Tabelle eintragen und die Menge der Artikel usw. echt mühselig 😉
Und das ist ein super gute Python-Idee nach dem Motto „Langweilige Dinge mit Python automatisieren“. Ich muss das erlerne ja schließlich anwenden können und nicht nur Übungsaufgaben machen.
Die Python-Projekt-Idee
Die Packliste, die ich mit Python erstellen möchte, beinhaltet folgenden Angaben, die ich aus den APIs auslese:
- Kundenname
- Bestellnummer
- Artikel in dieser Bestellung
- Menge/Anzahl des Artikels
- Diese Packliste soll dann automatisch ausgedruckt werden.
- Nach dem die Liste ausgedruckt wurde. Soll die Datei geleert werden.
Es sollen dabei nur Bestellungen berücksichtigt werden, die komplett Bezahlt wurden.
Shopware API auslesen mit Pyhton
Im ersten Schritt muss ich natürlich erstmal einen Zugriff auf die Shopware REST API bekommen. Dies kann in den Benutzer Einstellungen aktiviert werden.

Ist das geschehen, wird der API-Schlüssel in den Login-Prozess vom requests-Modul eingetragen, zusammen mit dem Benutzernamen.
Für meinen Zweck benötige ich die Daten aus der API für Bestellungen, nämlich orders.
Die Informationen aus der API speichere ich lokal in einer eigenen json-Datei, die ich sw_data.json nenne.
Danach kann ich mit den Daten dann „machen was ich will“.
Auf Shopware API mit Python zugreifen
import json
import requests
from requests.auth import HTTPDigestAuth
def get_orders():
# Site Settings
shop_url = "https://www.meinshop.de/"
api_base_url = (shop_url + "api/")
order_api_url = (api_base_url + "orders/")
# Login Information
username = "USER_NAME_SHOPWARE"
api_key = "API_KEY_FROM_SHOPWARE"
# Login Process
api_login = requests.get(order_api_url, auth=HTTPDigestAuth(username, api_key))
# Get API Data
sw_data = api_login.json()
# Save to json file
with open("sw_data.json","w", encoding="UTF-8") as data_file:
json.dump(sw_data, data_file, indent=4)
# confirming message after file created
print("-----" * 8)
print("Bestellungen gefiltert und Datei erstellt")
print("-----" * 8)
# run the function
get_orders()
Das alles klingt simpel. Aber um ehrlich zu sein, hat es ewig gedauert, bis ich es geschafft hatte mit Python Zugriff auf die REST API zu bekommen. Das lag daran, dass ich nicht genau wusste welche Authentifizierungsmethode ich verwenden sollte und ob ich dafür meinen API-Schlüssel verwenden oder mein normales Passwort. Die Dokumentation dazu war nicht eindeutig. Am Ende ist der API-Schlüssel, der für das Login oder den Zugriff auf die REST API von Shopware verwendet werden muss.
Am Ende war HTTPDigestAuth einfacher zu verwenden und der Code sieht irgendwie logischer aus.
Naja, hinterher ist man immer schlauer und einfacher.