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
Aby dowiedzieć się jak stworzyć wirtualną maszynę Windows, zobacz artykuł: Jak utworzyć maszynę wirtualną Windows w OpenStack Horizon i uzyskać do niej dostęp przez konsolę internetową w chmurze NSIS Cloud
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:
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