Verwenden von curl und wget zum Herunterladen von EO-Daten-Produkten von CODE-DE

In diesem Artikel erfahren Sie, wie Sie

  • ein als ZIP-Archiv gepacktes EO-Daten-Produkt , sowie

  • eine einzelne Datei aus einem gezippten EO-Daten-Produkt herunterladen können.

Was wir behandeln werden

  • Bezug von Keycloak-Token

  • Ausgabe von Keycloak-Token und Refresh-Token im Terminal.

  • Zuweisung des Keycloak-Tokens auf eine Variable.

  • Zuweisung des Keycloak-Tokens und des Refresh-Tokens auf Variablen.

  • Keycloak-Token mit Refresh-Token generieren.

  • Verwendung von Keycloak-Token zum Herunterladen von Produkten.

  • Herunterladen eines kompletten Produkts.

  • Herunterladen einer einzelnen Datei.

  • Herunterladen einer Datei von einem Link, der mit der Option $expand=Locations erzeugt wurde.

Voraussetzungen

Nr. 1 Konto

Sie benötigen ein CODE-DE Konto.

CODE-DE bietet viele verschiedene Dienste an, hier konzentrieren wir uns auf das einfache Herunterladen von EO-Daten mittels Keycloak-Token.

Nr. 2 Linux Umgebung

Dieser Artikel wurde für bash, curl, wget und jq geschrieben, die unter Ubuntu 22.04 laufen. Er wird ohne Änderungen auch unter Windows 10 mit WSL laufen. Andere Betriebssysteme und Software können ebenfalls funktionieren, erfordern aber möglicherweise eine Anpassung der Befehle. Sie können in diesem Artikel nicht behandelt werden.

bash ist die Shell, in der die Befehle ausgeführt werden.

Um ein notwendiges Authentifizierungs-Token zu erhalten, verwenden Sie curl.

Um Dateien herunterzuladen, können Sie entweder curl oder wget verwenden.

jq wird zum Parsen der JSON-Ausgabe verwendet.

Unter Ubuntu 22.04 sollte bash bereits in Ihrem Betriebssystem enthalten sein. Installieren Sie curl, wget und jq mit dem folgenden Befehl:

sudo apt install -y curl wget jq

Nr. 3 Finden Sie die ID des Produkts, das Sie herunterladen möchten

Um das in diesem Artikel beschriebene Verfahren durchzuführen, müssen Sie die ID des Produkts kennen, das Sie herunterladen möchten.

Im Artikel EOData Catalogue API Manual on CODE-DE, verwenden Sie den Abschnitt Query by name, um die ID des Produkts zu ermitteln. Diese ID finden Sie unter Id in der JSON-Ausgabe der Abfrage.

Angenommen, Sie interessieren sich für ein Produkt namens

S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE

Um nach dem genauen Namen zu suchen, rufen Sie die folgende URL in einem Browser auf (z. B. mit Mozilla Firefox):

https://datahub.code-de.org/odata/v1/Products?$filter=Name eq 'S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE'
../_images/output_datahub_link_code-de.png

In der Browserausgabe sehen Sie die erforderliche ID 63a8ee43-ed6e-50f6-a0e7-4a79774ba18c.

Beziehen des Keycloak-Tokens

Für das Herunterladen von Produkten benötigen Sie ein Autorisierungs-Token (Keycloak-Token), da nur autorisierte Benutzer Erdbeobachtungsdatenprodukte herunterladen dürfen.

Wenn Sie ein Keycloak-Token erhalten, bekommen Sie auch ein Refresh-Token. Dieses Refresh-Token kann verwendet werden, um ein weiteres Keycloak-Token zu generieren, ohne dass Sie Ihre Anmeldedaten erneut eingeben müssen. Sowohl das Keycloak-Token als auch das Refresh-Token verfallen nach einiger Zeit.

Gefahr

Anmeldedaten nur im Terminal-Fenster eingeben!

In den nächsten Abschnitten dieses Artikels werden Sie Ihren Benutzernamen und Ihr Passwort für die Website eingeben. Führen Sie solche Befehle immer im Terminal-Fenster aus und kopieren Sie diese Daten NICHT in den Browser!

Methode 1: Ausgabe von Keycloak-Token und Refresh-Token an das Terminal

Um ein Keycloak-Token zu erhalten, führen Sie den folgenden Befehl aus, nachdem Sie die Eingaben wie unten beschrieben an Ihre Nutzerdaten angepasst haben.

curl --location --request POST 'https://auth.fra1-1.cloudferro.com/auth/realms/code-de/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USERNAME>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=catalog-public' | jq -r '.'

Ersetzen Sie in diesem Befehl:

  • <USERNAME> mit der E-Mail Adresse Ihres Kontos

  • <PASSWORD> mit dem Passwort, mit dem Sie sich bei Ihrem Konto anmelden

Vergewissern Sie sich, dass diese Anmeldedaten korrekt an die Shell übergeben werden - achten Sie auf Zeichen wie einfache Anführungszeichen () und andere.

Nach Ausführung dieses Befehls erhalten Sie die Ausgabeinformation von curl und eine JSON-Datenstruktur:

../_images/curl-wget-download-eodata-01_creodias.png

In dieser JSON-Datenstruktur enthält:

  • Der Wert access_token den Keycloak token, die zum Herunterladen von EO-Datenprodukten verwendet werden kann.

  • Der Wert refresh_token den refresh token, mit dem Sie einen weiteren Keycloak-Token generieren können.

Die Ausgabe enthält Werte für expires_in und refresh_expires_in, die festlegen, nach wie vielen Sekunden das Keycloak-Token und das Refresh-Token ablaufen. Die Standardwerte sind 900 bzw. 1800 Sekunden nach der Erstellung.

Um zu erfahren, wie Sie mit dem Refresh-Token ein neues Keycloak-Token erzeugen können, siehe Methode 4 unten.

Methode 2: Zuweisung des Keycloak-Tokens auf eine Variable

Wenn Sie Ihren Keycloak-Token nicht manuell kopieren wollen, können Sie ihn einer Shell-Variablen zuweisen und ihn später zum Herunterladen von EODATA-Produkten verwenden. In diesem Beispiel speichern wir ihn in einer Variablen namens ACCESS_TOKEN.

Führen Sie diesen Befehl aus, nachdem Sie die Werte wie unten beschrieben, ersetzt haben:

ACCESS_TOKEN=$(curl --location --request POST 'https://auth.fra1-1.cloudferro.com/auth/realms/code-de/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USERNAME>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=catalog-public' | jq -r '.access_token')

Ersetzen Sie in diesem Befehl:

  • <USERNAME> mit der E-Mail Adresse Ihres Kontos

  • <PASSWORD> mit dem Passwort, mit dem Sie sich bei Ihrem Konto anmelden

Um zu prüfen, ob das Skript erfolgreich war, sehen Sie sich den Inhalt der Variablen ACCESS_TOKEN an.

echo $ACCESS_TOKEN

Ihr Keycloak-Token sollte angezeigt werden. Es sollte eine lange, zufällige Zeichenkette enthalten.

Methode 3: Zuweisen des Keycloak-Tokens und des Refresh-Tokens auf Variablen

Dieser Abschnitt beschreibt eine Sequenz von Bash-Befehlen, die verwendet werden können, um das Keycloak-Token in der Variablen ACCESS_TOKEN zu speichern und die Variable REFRESH_TOKEN mit dem Refresh-Token zu besetzen. Die Variable data wird verwendet, um die JSON-Struktur für die weitere Verarbeitung zu speichern.

Kopieren Sie diesen Befehl und fügen Sie ihn in Ihr Terminal ein - führen Sie ihn noch nicht aus.

data=$(curl --location --request POST 'https://auth.fra1-1.cloudferro.com/auth/realms/code-de/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=<USERNAME>' \
--data-urlencode 'password=<PASSWORD>' \
--data-urlencode 'client_id=catalog-public')

Ersetzen Sie im eingefügten Befehl die Werte:

  • <USERNAME> mit der E-Mail Adresse Ihres Kontos

  • <PASSWORD> mit dem Passwort für Ihr Konto

Nachdem Sie die Werte ersetzt haben, führen Sie den Befehl aus.

Führen Sie danach diesen Befehl aus, um Ihr Zugriffstoken der Variablen ACCESS_TOKEN zuzuweisen:

ACCESS_TOKEN=$(echo $data | jq -r '.access_token')

Um Ihr Refresh-Token der Variablen REFRESH_TOKEN zuzuweisen, führen Sie diesen Befehl aus:

REFRESH_TOKEN=$(echo $data | jq -r '.refresh_token')

Um zu überprüfen, ob der Prozess erfolgreich war, prüfen Sie den Wert der Variablen ACCESS_TOKEN:

echo $ACCESS_TOKEN

sowie den Wert der Variablen REFRESH_TOKEN:

echo $REFRESH_TOKEN

Beide sollten lange zufällige Zeichenfolgen enthalten.

Methode 4: Keycloak-Token mit Refresh-Token generieren

Bei der Durchführung von Methode 1 oder Methode 3 haben Sie neben dem Keycloak-Token einen Refresh-Token erhalten. Um dieses Refresh-Token zu verwenden, um ein neues Keycloak-Token zu erzeugen, führen Sie den folgenden Befehl aus (ersetzen Sie <REFRESH_TOKEN> durch Ihr Refresh-Token):

curl --location --request POST 'https://auth.fra1-1.cloudferro.com/auth/realms/code-de/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token=<REFRESH_TOKEN>' \
--data-urlencode 'client_id=catalog-public' | jq '.'

Die Ausgabe sollte dieselbe sein wie bei Methode 1.

Keycloak-Token zum Herunterladen von Produkten verwenden

Nachdem Sie Ihr Keycloak-Token generiert haben, können Sie es benutzen, um EO-Datenprodukte herunterzuladen.

Um ein Produkt herunterzuladen, müssen Sie seine ID kennen. Beachten Sie dabei Voraussetzung Nr. 3.

Herunterladen eines vollständigen Produkts

In diesem Abschnitt werden zwei Beispielbefehle vorgestellt, mit denen Sie jeweils ein komplettes EO-Datenproduktes als ZIP-Archiv herunterladen können.

Damit sie funktionieren, weisen Sie zunächst Ihr Keycloak-Token der Shell-Variablen ACCESS_TOKEN zu, wie im Abschnitt Beziehen des Keycloak-Tokens oben erklärt.

Danach weisen Sie die ID des Produkts der Shell-Variablen PRODUCT_ID zu. Wenn die ID des Produkts, das Sie herunterladen möchten, zum Beispiel 63a8ee43-ed6e-50f6-a0e7-4a79774ba18c lautet, führen Sie den folgenden Befehl aus:

PRODUCT_ID=63a8ee43-ed6e-50f6-a0e7-4a79774ba18c

Hier sind die Befehle zum Herunterladen des Produkts. Soweit es nur um das Abholen eines EO-Daten-Produkts geht, sind beide gleichwertig. Beide gehen davon aus, dass Sie Ihr Produkt als product.zip im Verzeichnis /tmp speichern möchten. Wenn Sie einen anderen Speicherort wählen wollen, müssen Sie sie entsprechend anpassen.

curl -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://datahub.code-de.org/odata/v1/Products($PRODUCT_ID)/\$value" \
--location-trusted \
--output /tmp/product.zip

Der folgende Screenshot zeigt den Beispiel-Workflow für curl. Zunächst wurde die ID des Produkts der Variablen PRODUCT_ID zugewiesen. Danach wurde der Befehl curl ausgeführt, um das Produkt herunterzuladen. Schließlich wurde das Vorhandensein der heruntergeladenen Datei mit dem Befehl ls -la überprüft.

../_images/terminal_output_code-de.png

Herunterladen einer einzelnen Datei

Sie können auch eine einzelne Datei in ihrer ursprünglichen Form (nicht zu einem ZIP-Archiv komprimiert) von einem Produkt herunterladen, ohne das gesamte Produkt herunterzuladen.

Suchen Sie zunächst den Link zum Knotenpunkt für die Datei, die Sie herunterladen möchten.

Rufen Sie dazu zunächst die folgende URL auf (z. B. mit Mozilla Firefox):

https://datahub.code-de.org/odata/v1/Products(<PRODUCT_ID>)/Nodes

wobei <PRODUCT_UUID> die ID des durch die Suchanfrage erhaltenen Produkts ist. Wie man die ID erhält, erfahren Sie unter Voraussetzung Nr. 3.

Wenn Sie die Linux-Befehlszeile (Tools wie z. B. curl) verwenden möchten, um den Inhalt dieser Links zu sehen, stellen Sie sicher, dass sie korrekt an die Shell übergeben werden - achten Sie auf Sonderzeichen wie Klammern. Sie sollten auch in der Lage sein, auf viele der OData-URLs (mit Ausnahme derer, die Dinge wie Authentifizierung erfordern) über einen Internet-Browser wie Firefox zuzugreifen.

Die Ausgabe des obigen Links sollte unter anderem den Schlüssel uri und seinen Wert enthalten. Sie können den in diesem Wert gespeicherten Link verwenden, um das Stammverzeichnis Ihres Produkts aufzurufen.

Nach dem Zugriff auf diesen Link sollten Sie eine Liste (als Werte der uri-Schlüssel) von Dateien und Ordnern sehen, die sich im Stammverzeichnis des Produkts befinden.

Sie können auf diese weiteren Links zugreifen, um in der Verzeichnisstruktur des Produkts weiter nach unten zu gehen.

Im Wesentlichen werden Sie durch die folgenden URL-Muster „wandern“:

https://datahub.code-de.org/odata/v1/Products(<PRODUCT_UUID>)/Nodes
https://datahub.code-de.org/odata/v1/Products(<PRODUCT_UUID>)/Nodes(<NODE_NAME>)/Nodes
https://datahub.code-de.org/odata/v1/Products(<PRODUCT_UUID>)/Nodes(<NODE_NAME>)/Nodes(<NODE_NAME>)/Nodes

wobei

<PRODUCT_UUID>

die eindeutige Identifikationsnummer des Produktes und

<NODE_NAME>

der Name des Elements (reguläre Datei oder Verzeichnis) innerhalb des Produkts ist, wie sie in der Antwort auf die vorherige Auflistung zurückgegeben wurde.

Während der Untersuchung des Produkts kann nur der Inhalt von Elemente (Knoten), die Ordner darstellen, aufgelistet werden. Wenn ein Ordner leer ist, erhalten Sie diese Ausgabe:

{"result":[]}

Der Versuch, einen Knoten für eine reguläre Datei aufzulisten, liefert ebenfalls dieses Ergebnis.

Wenn jedoch ein solcher Link zu einem Knoten für eine reguläre Datei entsprechend geändert wird, kann diese Datei in ihrer ursprünglichen Form auf Ihren Computer heruntergeladen werden (nicht in einem ZIP-Archiv verpackt).

Um eine solche Datei herunterzuladen, ersetzen Sie das letzte Wort des Links - Nodes - durch den Ausdruck $value (nur exakt dieses Wort). Vorausgesetzt, dass:

  • die Variable ACCESS_TOKEN Ihren Keycloak-Token enthält und

  • Sie Ihre Datei in Ihrem aktuellen Arbeitsverzeichnis als quick-look.png speichern möchten ,

können Sie die folgenden curl- oder wget-Befehle verwenden, um die Datei herunterzuladen (ersetzen Sie <link> durch den Download-Link, den Sie gerade erstellt haben):

curl  -H "Authorization: Bearer $ACCESS_TOKEN" '<link>' \
--location-trusted \
--output quick-look.png

Beispiel

Nehmen wir an, wir wollen die Datei mit dem Namen quick-look.png die sich in directory preview des Produkts S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE.
befindet, herunterladen.

Zunächst müssen wir die ID des Produkts ermitteln. Wie in Voraussetzung Nr. 3 gezeigt, lautet der Link, der in den Browser einzugeben ist:

https://datahub.code-de.org/odata/v1/Products?$filter=Name eq 'S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE'

Die Ausgabe ist eine JSON-Datenstruktur. Die ID des gesuchten Produkts ist der Wert des Schlüssels Id. Der nachstehende Screenshot enthält diese URL, die in Mozilla Firefox geöffnet wurde, wobei die Produkt-ID durch ein Rechteck markiert ist:

../_images/output_datahub_link_code-de.png

Wie Sie in der Ausgabe sehen können, lautet die ID des Produkts 63a8ee43-ed6e-50f6-a0e7-4a79774ba18c (der Wert des JSON Elementes Id).

Die ID des Produkts, an dem wir arbeiten, 63a8ee43-ed6e-50f6-a0e7-4a79774ba18c lautet. Der Link für die Untersuchung dieses Produkts ist entsprechend:

https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes

Der Zugriff auf diese URL sollte diese Ausgabe ergeben:

{
  "result": [
    {
      "Id":"S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE",
      "Name":"S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE","ContentLength": 0,
      "ChildrenNumber": 6,
      "Nodes": {
        "uri": "https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes"
      }
    }
  ]
}

Greifen Sie auf die einzige uri Adresse zu, die in der obigen Ausgabe sichtbar ist, nämlich:

https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes

Sie sollten nun die Liste der Elemente aus dem Stammverzeichnis des Produkts sehen.

../_images/product_c23.png

Wir konzentrieren uns nur auf die mit einem roten Rechteck markierte Stelle:

"preview"
Name     "preview"
ContentLength    0
ChildrenNumber   4
Nodes
uri      "https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes(preview)/Nodes"

Um den Inhalt des Verzeichnisses aufzulisten, rufen Sie den folgenden Link auf, der in der obigen Ausgabe zu sehen ist:

https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes(preview)/Nodes

So sieht diese Ausgabe aus:

../_images/product_final.png

Klicken Sie auf den Link im roten Rechteck, und das Ergebnis ist gleich Null:

../_images/result_zero.png

Der Link lautet

https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes(preview)/Nodes(quick-look.png)/Nodes

Dies ist der direkte Link zu dem Bild, das wir herunterladen möchten. Beachten Sie, dass es am Ende das Wort Nodes enthält; um den Link zum Herunterladen zu erstellen, ersetzen Sie dieses letzte Wort durch den Ausdruck $value (aber nur dieses Wort):

https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes(preview)/Nodes(quick-look.png)/$value

Nun können Sie diesen Link verwenden, um die Datei herunterzuladen. Beachten Sie, dass Sie den Browser verwendet haben, um die Links zu erzeugen, aber um curl und wget zum Herunterladen zu verwenden, müssen Sie erneut das Terminal-Fenster öffnen.

Unter der Annahme, dass:

  • die Variable ACCESS_TOKEN Ihr Keycloak-Token enthält und

  • Sie die heruntergeladene Datei in Ihrem aktuellen Arbeitsverzeichnis als quick-look.png speichern möchten

geben Sie den Link, den Sie oben erstellt haben, in curl oder wget ein, wie unten gezeigt, und führen Sie den Befehl aus, um die Datei herunterzuladen.

curl  -H "Authorization: Bearer $ACCESS_TOKEN" 'https://datahub.code-de.org/odata/v1/Products(63a8ee43-ed6e-50f6-a0e7-4a79774ba18c)/Nodes(S1A_IW_GRDH_1SDV_20200303T170840_20200303T170905_031514_03A14B_BC1E.SAFE)/Nodes(preview)/Nodes(quick-look.png)/$value' --location-trusted --output quick-look.png

Nachdem Sie einen dieser Befehle ausgeführt haben, sollte die Datei heruntergeladen werden.

So sieht es im Terminalfenster aus (für curl):

../_images/terminal_output_code-de.png

Die Ausgabe von wget ist ein wenig ausführlicher:

../_images/wget_output_code-de.png

Dies ist das Bild, das heruntergeladen wurde:

../_images/quick-look_code-de.png

Fehlerquellen

Wenn der $ACCESS_TOKEN veraltet ist, wird der Download fehlschlagen.

../_images/failed_download.png

Erzeugen Sie in diesem Fall das Token erneut und verwenden Sie es so bald wie möglich im selben Terminalfenster.