Skip to main content
  • »
  • EODATA »
  • Jak uzyskać dostęp do EODATA za pomocą boto3 na NSIS

Jak uzyskać dostęp do EODATA za pomocą boto3 na NSIS

W tym artykule dowiesz się, jak uzyskać dostęp do repozytorium EODATA za pomocą biblioteki Python o nazwie boto3, działającej na maszynie wirtualnej Linux w chmurze NSIS.

Co zostanie omówione?

  • Instalacja boto3

  • Jak wykonać skrypty zamieszczone w tym artykule

  • Przeglądanie EODATA

  • Pobieranie pojedynczego pliku z repozytorium EODATA

Wymagania wstępne

Nr 1 Konto

Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.

Nr 2 Maszyna wirtualna

Jest wymagana maszyna wirtualna działająca w chmurze NSIS. Ten artykuł został napisany w oparciu o system Ubuntu w wersji 20.04 i 24.04.

Mogą być również używane inne systemy operacyjne, ale jest to poza zakresem tego artykułu i może to wymagać dostosowania podanych tutaj poleceń.

Mimo to, w każdym przypadku maszyna wirtualna musi mieć dostęp do sieci umożliwiającej dostęp do repozytorium EODATA. Ta sieć nazywa się eodata lub ma nazwę zaczynającą się od eodata_.

Maszyna wirtualna Linux

Maszynę wirtualną Linux możesz utworzyć, postępując zgodnie z jednym z poniższych artykułów:

Upewnij się, że masz zainstalowany edytor do tworzenia plików Pythona. Na przykład, zainstaluj edytor tekstu nano za pomocą polecenia takiego jak

sudo apt install nano

Maszyna wirtualna Windows

Jeśli korzystasz z konsoli internetowej, aby uzyskać dostęp do maszyny wirtualnej Windows, możesz otworzyć artykuł, który teraz czytasz, w przeglądarce internetowej (takiej jak Microsoft Edge) zainstalowanej na tej maszynie wirtualnej i skopiować kod w języku Python do wybranego edytora tekstu.

Nr 3 Python

Na maszynie wirtualnej musi być zainstalowane środowisko Python. Wykonaj to polecenie, aby sprawdzić, czy Python jest już zainstalowany:

python3 --version

Jeśli odpowiedź zawiera numer wersji, oznacza to, że Python jest zainstalowany i gotowy do użycia:

Python 3.12.3

Aby zainstalować Pythona na Linuxie zobacz Jak zainstalować Python virtualenv lub virtualenvwrapper na NSIS Cloud

Nr 4 Uzyskany klucz dostępu i tajny klucz

Aby mieć dostęp do EODATA, musisz zdobyć klucze access i secret. Możesz to zrobić korzystając z tego artykułu: Jak uzyskać poświadczenia używane do uzyskiwania dostępu do EODATA na maszynie wirtualnej w chmurze NSIS?

Nr 5 Podstawowa wiedza o języku Python

boto3 jest biblioteką języka Pythona, więc musisz znać to środowisko.

Instalacja boto3

Postępuj zgodnie z odpowiednimi procedurami instalacji boto3:

Instalacja boto3 w systemie Linux

Jeśli używasz środowiska Python, takiego jak virtualenv, wprowadź środowisko, w którym chcesz zainstalować boto3. Wykonaj w nim następujące polecenie:

pip3 install boto3

Pakiet można również zainstalować globalnie:

sudo apt install python3-boto3

Jak wykonać skrypty zamieszczone w tym artykule

Sposób wykonywania skryptów różni się w zależności od wybranego systemu operacyjnego.

Jak wykonywać skrypty za pomocą wiersza poleceń systemu Linux?

Otwórz wybrany edytor tekstu, taki jak nano lub vim. Wklej skrypt. Dokonaj odpowiednich modyfikacji kodu zgodnie z instrukcjami (np. przypisz wartości do zmiennych). Zapisz plik.

Po wyjściu z edytora tekstu wykonaj polecenie python3, a następnie nazwę skryptu z katalogu, w którym się znajduje. Na przykład:

python3 browse.py

Skrypt powinien zostać wykonany.

Przeglądanie EODATA

Możesz użyć boto3 do przeglądania repozytorium EODATA. To jest kod Pythona, którego będziesz używać:

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
directory='Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/'

host='https://eodata.nsiscloud.polsa.gov.pl'
container='DIAS'

s3=boto3.client('s3',aws_access_key_id=access_key, aws_secret_access_key=secret_key,endpoint_url=host)

print(s3.list_objects(Delimiter='/',Bucket=container,Prefix=directory,MaxKeys=30000)['CommonPrefixes'])

Zmienne używane w kodzie są następujące:

Nazwa zmiennej

Co należy przypisać

access_key

Twój klucz access. Postępuj zgodnie z Wymaganiem wstępnym nr 4

secret_key

Twój klucz secret. Postępuj zgodnie z Wymaganiem wstępnym nr 4

directory

Katalog w repozytorium EODATA, który chcesz przeglądać.

Podczas wypełniania zmiennej directory należy przestrzegać następujących zasad:

  • Używaj ukośników / jako separatorów między elementami tej ścieżki - katalogami i plikami.

  • Nie można rozpoczynać ścieżki od ukośnika /

  • Ponieważ przeglądanym elementem jest katalog, ścieżkę należy zakończyć ukośnikiem /

  • Ścieżka początkowa z nazwą katalogu znajdującego się w katalogu głównym repozytorium EODATA (na przykład Sentinel-2 lub Sentinel-5P).

Jeśli chcesz przeglądać katalog główny repozytorium EODATA, przypisz pusty ciąg do zmiennej directory:

directory=''

Jeśli nie masz katalogu, który chcesz zbadać, ale chcesz po prostu przetestować tę metodę, możesz pozostawić wartość, która została przypisana do zmiennej directory w przykładowym kodzie powyżej.

Zmienne host i container zawierają odpowiednio punkt końcowy EODATA i nazwę używanego kontenera. Nie trzeba ich modyfikować.

Jeśli zostały podane klucze access i secret, ale zmienna directory nie została zmodyfikowana, powyższy kod wyświetli listę produktów znalezionych w katalogu Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ repozytorium EODATA. W takim przypadku dane wyjściowe powinny wyglądać następująco:

[{'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110329_000000603113_00267_52867_0000.N1/'}, {'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110428_000000603113_00267_52867_0000.N1/'}, {'Prefix': 'Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110446_000000603113_00267_52867_0000.N1/'}]

Wynik ten można opisać jako „listę słowników”. Każdy z tych słowników zawiera klucz o nazwie Prefix, podający ścieżkę do pliku lub katalogu. Zamiast drukować tę listę jak powyżej, możesz ją przeglądać w pętli, aby zwiększyć czytelność danych wyjściowych:

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
directory='Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/'

host='https://eodata.nsiscloud.polsa.gov.pl'
container='DIAS'

s3=boto3.client('s3',aws_access_key_id=access_key, aws_secret_access_key=secret_key,endpoint_url=host)

for i in s3.list_objects(Delimiter='/',Bucket=container,Prefix=directory,MaxKeys=30000)['CommonPrefixes']:
    print(i['Prefix'])

Tym razem dane wyjściowe powinny pokazywać tylko ścieżki:

Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110329_000000603113_00267_52867_0000.N1/
Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110428_000000603113_00267_52867_0000.N1/
Envisat-ASAR/ASAR/ASA_WSS_1P/2012/04/08/ASA_WSS_1PNESA20120408_110446_000000603113_00267_52867_0000.N1/

Pobieranie pojedynczego pliku z repozytorium EODATA

Ta sekcja opisuje jak pobrać plik z repozytorium EODATA.

Poniższy skrypt powinien pobrać ten plik do katalogu, z którego wykonywany jest skrypt. Jeśli ten katalog zawiera już plik o takiej samej nazwie jak pobierany, zostanie on zastąpiony bez pytania o potwierdzenie.

Kod jest następujący:

import boto3

access_key='YOUR_ACCESS_KEY'
secret_key='YOUR_SECRET_KEY'
key='Landsat-5/TM/L1T/2011/11/16/LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1/LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1.BP.PNG'

host='https://eodata.nsiscloud.polsa.gov.pl'
container='DIAS'

s3=boto3.resource('s3',aws_access_key_id=access_key,
aws_secret_access_key=secret_key, endpoint_url=host,)

bucket=s3.Bucket(container)

filename=key.split("/")[-1]

bucket.download_file(key, filename)

Zmienne to:

Nazwa zmiennej

Co należy przypisać

access_key

Twój klucz access. Postępuj zgodnie z Wymaganiem wstępnym nr 4

secret_key

Twój klucz secret. Postępuj zgodnie z Wymaganiem wstępnym nr 4

key

Pełna ścieżka (włączając foldery) do pliku, który chcesz pobrać z EODATA.

Wypełniając zmienną key należy przestrzegać następujących zasad:

  • Używaj ukośników / jako separatorów między elementami tej ścieżki - katalogami i plikami.

  • Nie zaczynaj ani nie kończ ścieżki ukośnikiem /

  • Ścieżka początkowa z nazwą katalogu znajdującego się w katalogu głównym repozytorium EODATA (na przykład Sentinel-2 lub Sentinel-5P).

Jeśli nie masz pliku, który chcesz pobrać, ale po prostu chcesz przetestować tę metodę pobierania plików, możesz pozostawić wartość, która została przypisana do zmiennej key w przykładowym kodzie poniżej.

Również w tym przypadku zmienne host i container zawierają odpowiednio punkt końcowy EODATA i nazwę używanego kontenera. Nie trzeba ich modyfikować.

Jeśli został podany klucz access i secret, ale zawartość zmiennej key nie została zmieniona, kod powinien pobrać plik o nazwie

LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1.BP.PNG

który znajduje się w katalogu głównym produktu

LS05_RMPS_TM__GTC_1P_20111116T100042_20111116T100111_147386_0194_0035_4BF1

Po wykonaniu skryptu dane wyjściowe powinny być puste. Niezależnie od tego, pobrany plik powinien być widoczny w katalogu, z którego skrypt został wykonany. Na przykład, w systemie Linux będzie to wyglądać tak:

../_images/access-eodata-boto3-03_creodias.png

Co można zrobić dalej?

Możesz dalej modyfikować te skrypty, aby lepiej odpowiadały twoim potrzebom lub zintegrować je z własnymi aplikacjami. Skrypty te mogą również działać w innych środowiskach programistycznych, lecz to zagadnienie jest jednak poza zakresem tego artykułu.

Pakiet boto3 może być również używany do uzyskiwania dostępu do kontenerów obiektowych z chmury NSIS: Jak uzyskać dostęp do object storage z NSIS za pomocą boto3