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:

GET-Anfrage an den Server senden
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

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.

eodata/using-python-eodata-catalogue-requests-01_creodias.png

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:

eodata/using-python-eodata-catalogue-requests-02_creodias.png

Der obige Screenshot zeigt nur den Anfang der Antwort.

POST-Anfragen senden

Erstellen Sie eine Datei namens send_post.py mit folgendem Code:

POST-Anfrage an den Server senden
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

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:

eodata/using-python-eodata-catalogue-requests-04_creodias.png
Still need help?
If this article does not answer all of your questions, the support team will help you.
Contact support