Mit Python Anfragen an den EODATA-Katalog auf CODE-DE-Lab senden
Dieser Artikel zeigt eine Möglichkeit, die in Anleitung zur EODATA-Katalog-API auf CODE-DE-Lab beschriebenen Anfragen an den EODATA-Katalog zu senden.
Die URLs für diese Anfragen können beispielsweise bei der Verwendung des Befehls curl in Bash Probleme verursachen. Die folgende URL:
https://catalogue.code-de.org/odata/v1/Products?$filter=not contains(Name,'S2') and ContentDate/Start gt 2022-05-03T00:00:00.000Z and ContentDate/Start lt 2022-05-03T00:10:00.000Z
enthält unter anderem ein Dollarzeichen, Leerzeichen und Klammern. Diese Zeichen müssen entsprechend maskiert und/oder kodiert werden, damit die Anfrage gültig ist. Beispielsweise könnte Bash $filter als Variable $filter interpretieren, obwohl es sich um einen Teil der URL handelt.
In diesem Artikel umgehen Sie dieses Problem wie folgt:
Fügen Sie die URL in eine Datei ein.
Fügen Sie den Anfragetext bei Bedarf in eine weitere Datei ein.
Erstellen Sie eine weitere Datei mit Python-Code.
Führen Sie diese anschließend aus.
Inhalt dieser Anleitung
Voraussetzungen
Nr. 1 Installierte Python-Umgebung
Dieser Artikel wurde für einfache Python-Umgebungen unter Ubuntu 22.04 und Windows Server 2022 geschrieben. Andere Betriebssysteme wie Windows 11 und Umgebungen wie PyCharm können ebenfalls funktionieren, werden in diesem Artikel jedoch nicht behandelt.
Die folgenden Artikel enthalten Abschnitte zur Installation von Python:
Unter Ubuntu können Sie auch virtualenvwrapper verwenden: Wie installiert man Python virtualenv/virtualenvwrapper
Nr. 2 Python-Bibliothek requests
Installieren Sie das Python-Paket requests. Dazu können Sie pip verwenden:
pip install requests
Unter Ubuntu 22.04 können Sie diese Bibliothek auch mit apt systemweit installieren:
sudo apt install python3-requests
GET-Anfragen senden
Die meisten Links in den API-Anleitungen sind GET-Anfragen ohne Anfragetext.
Erstellen Sie ein Skript mit dem Namen send_get.py und folgendem Inhalt:
import requests
from requests.utils import requote_uri
# Open URL from file
url = open('link1.txt').read()
# Encode URL
url_encoded = requote_uri(url)
# Remove unnecessasary characters from encoded URL
url_encoded_cleared = url_encoded.replace('%0A', '')
# Obtain and print the response
response = requests.get(url_encoded_cleared)
print(response.json())
Erstellen Sie im selben Verzeichnis wie das Skript send_get.py eine Datei namens link1.txt mit dem Link, den Sie aufrufen möchten. Diese Datei darf nur eine URL enthalten.
Wechseln Sie im Terminal in das Verzeichnis mit dem Skript und der Datei link1.txt und führen Sie das Skript aus:
python3 send_get.py
python send_get.py
Die Ausgabe sollte die Antwort der Katalog-API enthalten.
Beispiel 1: OData-API
Tragen Sie den folgenden Link in die Datei link1.txt ein. Diese Datei muss genau eine URL enthalten:
https://catalogue.code-de.org/odata/v1/Products?$filter=contains(Name,'S1A') and ContentDate/Start gt 2022-05-03T00:00:00.000Z and ContentDate/Start lt 2022-05-21T00:00:00.000Z
Dieser Link sucht nach Produkten, die
die Zeichenfolge S1A im Namen enthalten und
deren Aufnahmebeginn nach 2022-05-03T00:00:00.000Z und vor 2022-05-21T00:00:00.000Z liegt.
Es sollten die ersten 20 Ergebnisse zurückgegeben werden.
Führen Sie das Skript aus. In diesem Beispiel wurden GNOME Terminal und gedit unter Ubuntu 22.04 verwendet. Beachten Sie, dass gedit den Code als Python 2 bezeichnet, obwohl tatsächlich Python 3 verwendet wurde.
Der obige Screenshot zeigt nur den Anfang der Antwort.
Beispiel 2: OData-API für gelöschte Produkte
Tragen Sie den folgenden Link in die Datei link1.txt ein. Diese Datei muss genau eine URL enthalten:
https://catalogue.code-de.org/odata/v1/DeletedProducts?$filter=not contains(Name,'S1') and DeletionDate gt 2023-04-01T00:00:00.000Z and DeletionDate lt 2023-05-30T23:59:59.999Z&$orderby=DeletionDate
Dieser Link sucht nach gelöschten Produkten, die
die Zeichenfolge S1 nicht im Namen enthalten und
deren Löschdatum nach 2023-04-01T00:00:00.000Z und vor 2023-05-30T23:59:59.999Z liegt.
Die Ergebnisse werden nach Löschdatum sortiert. Es sollten die ersten 20 Ergebnisse zurückgegeben werden.
Führen Sie das Skript aus:
Der obige Screenshot zeigt nur den Anfang der Antwort.
POST-Anfragen senden
Erstellen Sie eine Datei namens send_post.py mit folgendem Code:
import requests
import json
from requests.utils import requote_uri
# Open URL from file
url = open('link2.txt').read()
# Open body from file and convert it to JSON object
query = open('body.json')
body = json.load(query)
# Encode URL
url_encoded = requote_uri(url)
# Remove unnecessasary characters from encoded URL
url_encoded_cleared = url_encoded.replace('%0A', '')
# Obtain and print the response
response = requests.post(url_encoded_cleared, json=body)
print(response.json())
Das obige Skript funktioniert ähnlich wie das Skript im vorherigen Abschnitt.
Die URL wird diesmal jedoch in der Datei link2.txt statt in link1.txt gespeichert.
Speichern Sie den Anfragetext in der Datei body.json.
Alle in diesem Abschnitt genannten Dateien müssen im selben Verzeichnis liegen.
Wechseln Sie im Terminal in dieses Verzeichnis und führen Sie den Python-Code aus:
python3 send_post.py
python send_post.py
Die Ausgabe sollte die Antwort der Katalog-API enthalten.
Beispiel: OData-API
Verwenden Sie den Link aus dem Abschnitt Nach einer Liste suchen in
Anleitung zur EODATA-Katalog-API auf CODE-DE-Lab
um nach mehreren Produktnamen gleichzeitig zu suchen:
https://catalogue.code-de.org/odata/v1/Products/OData.CSC.FilterList
Speichern Sie diesen Link in der Datei link2.txt.
Übernehmen Sie den Anfragetext aus diesem Artikel in die Datei body.json:
{
"FilterProducts":
[
{"Name": "S1A_IW_GRDH_1SDV_20141031T161924_20141031T161949_003076_003856_634E.SAFE"},
{"Name": "S3B_SL_1_RBT____20190116T050535_20190116T050835_20190117T125958_0179_021_048_0000_LN2_O_NT_003.SEN3"},
{"Name": "xxxxxxxx.06.tar"}
]
}
Führen Sie das Skript aus: