NASA, alebo ak chcete Národný úrad pre letectvo a vesmír má verejné API (Open API), ktoré je možné používať a je naozaj bohaté možnosťami. Môžete tu získať fotografie od vozítok na Marse, cez satelitné snímky Zeme, či dáta o asteroidoch, exoplanétach, ale aj o výskumoch a experimentoch realizovaných na vesmírnej stanici ISS. To je len špička ľadovca dostupných dát.
Každý používateľ sa autorizuje pri vykonávaní požiadavky na NASA API cez API kľúč, preddefinvaný DEMO_KEY, alebo súkromný API kľúč. Získanie API kľúča je zdarma a vyžaduje vyplnenie krátkeho formulára na webe. API kľúč je okamžite sprístupnený v e-maile.
Sú tu isté rozdiely a to v limite požiadaviek. DEMO_KEY je obmedzený 30 requestov za hodinu, resp. 50 requestov za deň pre jednu IP adresu. Na základe dokumentácie je súkromný API kľúč limitovaný iba hodinovo a to na 1000 requestov, ale ako sa neskôr pri testovaní ukázalo, vyzerá to, že je to v súčasnosti 2000 requestov. Pre súkromný kľúč nie je uvedený denný limit, teda teoreticky 48000 requestov za deň by mal byť limit.
Dnes si popíšeme funkčnosť scriptu navrhnutého v Pythone, ktorým budeme získavať dáta, konkrétne obrázok Astronomy Picture of the Day (APoD), teda astronomický obrázok dňa, ktorý následne nastavíme aj ako pozadie pracovnej plochy v operačnom systéme Windows. NASA zvereňuje tieto obrázky denne od 16. Júna 1995, teda už viac ako 20 rokov.
Keďže sa astronomický obrázok dňa na strane NASA mení raz za 24 hodín, nebudeme vykonávať zbytočné periodické requesty, ale spúšťanie scriptu optimalizujeme na spustenie práve pri štarte počítača. Toto spúšťanie bude plno automatizované a nebude používateľa žiadnym spôsobom rušiť, či požadovať po ňom akúkoľvek akciu. Riešenie bude demonštrované pre Windows, konkrétne 10 x64 Education N (obdoba Enterprise), avšak malo by to plne fungovať aj na verziách Home, Pro, Starter, rovnako tak aj 32-bit verzie... Pre UNIX nie je kompatibilné bez zmien, keďže script využíva Windows API pre nastavenie pozadia. Teda na Linux operačných systémoch script skončí chybou.
Ak už máme Python nainštalovaný, potrebujete doinštalovať balík requests, pre možnosť vykonania requestov na NASA API. Balík je v podstate HTTP Client. Po nainštalovaní je už možné balík (knižnicu) importovať aj v scripte. Inštalácia sa realizuje zavolaním príkazu pip install requests. Rovnakým príkazom si môžete overiť, že už balík máte nainštalovaný, ak áno, uvidíte vo výpise Requirement already satisfied.
Okrem knižnice requests sa budú používať aj knižnice os a ctypes, ktoré slúžia pre prácu so súbormi, umiestneniami a s Windows API pre nastavenie tapety pracovnej plochy. Tieto nie je nutné inštalovať, sú vstavané v základnej verzii Pythonu.
Samotný Python script bude fungovať následovne:
Vykoná sa HTTPS GET request na adresu https://api.nasa.gov/planetary/apod, ku ktorej sa pripojí API kľúč s parametrom api_key, teda kompletný URL na ktorý sa request realizuje vyzerá:
https://api.nasa.gov/planetary/apod?api_key=MOJ_API_KLUC,
alebo ak sa použije DEMO kľúč, tak:
https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY
Server NASA API odpovedá JSON štruktúrou z ktorej je možné parsovať dáta na základe kľúčov, ku ktorým sú priradené hodnoty. V tomto prípade JSON vyzerá následovne - odpovedá obrázku zo dňa 11. Júla 2025:
{"copyright":"Clear Skies","date":"2025-07-11",
"explanation":"Transfusing sunlight as the sky grew darker, this exceptional display of noctilucent clouds was captured on July 10, reflected in the calm waters of Vallentuna Lake near Stockholm, Sweden. From the edge of space, about 80 kilometers above Earth's surface, the icy clouds themselves still reflect sunlight, even though the Sun is below the horizon as seen from the ground. Usually spotted at high latitudes in summer months, the night shining clouds have made a strong showing so far during the short northern summer nights. Also known as polar mesopheric clouds they are understood to form as water vapor driven into the cold upper atmosphere condenses on the fine dust particles supplied by disintegrating meteors or volcanic ash.",
"hdurl":"https://apod.nasa.gov/apod/image/2507/NLCreflectionsHeden.jpg",
"media_type":" image",
"service_version":"v1",
"title":"The Veins of Heaven",
"url":"https://apod.nasa.gov/apod/image/2507/NLCreflectionsHeden.jpg"}
Ako môžeme vidieť, podstatnú časť v JSON štruktúre obsahuje kľúč explanation. Je to z dôvodu, že ku všetkým zverejneným obrázkom pridáva popis profesionálny astronóm. Pre nás budú najzaujímavejšie 3 parametre z JSON štruktúry a to hdurl, url a title.
Vykonanie requestu a parsing JSON dát v scripte
HDURL obsahuje link na obrázok vo vysokom rozlíšení. URL obsahuje link na obrázok v štandardom rozlíšení (častokrát býva jediným, ak nie je k dispozícii HDURL, môže sa líšiť, ale aj nemusí, pri testovaní rôznych dní som narazil že to bývalo rôzne. Občas existoval obrázok v dvoch kvalitách a skutočne mal 2 odlišné url adresy, alebo mali oba parametre rovnaký link). A posledným parametrom je TITLE, ktorý obsahuje názov obrázka, titulok. Python script vyparsuje z JSON štruktúry tieto 3 parametre a stiahne obrázok z HDURL (ak by HDURL nebol k dispozícii, stiahne z hodnoty kľúča URL).
Obrázok v 1024 px (štandardná kvalita) a 2048 px (hd kvalita)
Obrázok sa uloží do systému Windows pre konkrétne umiestnenie pod aktuálnym používateľom (pod ktorým script beží), ktoré sa nachádza v Obrázkoch (Pictures). Keďže sa bude obrázok raz denne meniť, budeme využívať zápis obrázka s identickým názvom (nasa_apod_wallpaper.jpg) metódou wb, teda binárnym zápisom, ktorý prepíše obrázok, čím budeme mať stále aktuálny obrázok aj pri jeho zmene v identickom umiestnení s identickým názvom. Obrázok sa prepíše aj keď by šlo stále o tej istý.
Stiahnutie obrázka scriptom a jeho zápis do preddefinovaného umiestnenia v počítači
11. Júl 2025
12. Júl 2025
Keďže je už obrázok pre tapetu pracovnej plochy uložený, funkciou ctypes.windll.user32.SystemParametersInfoW() sa dosiahne nastavenie tapety pracovnej plochy s daným obrázkom. Táto funkcia má celkom 4 parametre, ktoré sú v scripte nastavené na hodnoty 20, 0, path, 3. Poďme si teda bližšie pozrieť nato, čo znamenajú:
Tieto parametre odpovedajú nastaveniam SystemParametersInfo vo Windows API:
Python script s Windows API pre nastavenie pozadia pracovnej plochy
Script počas svojej činnosti vypisuje v jednotlivých častiach aj informácie o tom, čo robí, respektíve aké hodnoty sa nadobúdajú. Je tak možné vidieť konkrétny link obrázka z ktorého je sťahovaný, celkové umiestnenie, kde je obrázok uložený, napr. C:/Users/Používateľ/Pictures/nasa_apod_wallpaper.jpg. Rovnako tak sa vypíše aj title z JSON payloadu, ktorý script prijal pri pôvodnom dotaze. To je celá funkcionalita scriptu na pár riadkov (do 50).
Beh Python scriptu s informatívnym výpisom toho, čo robí
Automatizované spustenie scriptu:
Existuje viacero spôsobov, ako automatizovane spúšťať Python scripty na Windowse. Pôjdeme najľahšou metódou a to vytvorením spustiteľného .bat súboru, ktorý zavolá to, čo by sme manuálne zavolali z príkazového riadka. Budeme ale potrebovať pozmeniť cestu k súboru z relatívnej na absolútnu, nakoľko bude .bat script vo výsledku v inom umiestnení ako Python script.
Do .bat súboru vložíme (v mojom prípade umiestnenie): python "D:\PY\skript.py"
Následne si otvoríme program Spustenie či už cez ponuku Štart, alebo klávesovou skratkou Win + R. Napíšeme shell:startup a dáme Enter. Otvorí sa priečinok Pri spustení (pre aktuálneho používateľa) skrz Prieskumník. Do priečinka nakopírujeme vytvorený .bat súbor. Tento súbor bude automatický spustený operačným systémom pri štarte Windowsu. Samotné vykonanie scriptu prebehne po prihlásení sa do konta.
Script sa tak nespustí ešte pred prihlásenímdo používateľského konta. To by sa dalo docieliť použitím Plánovača úloh (Task Scheduler), kde je možnosť zaškrtnúť spustenie pri štarte systému a nezávisle od prihlásenia. Túto možnosť som ale netestoval a nie som si istý, či by to prebehlo, alebo by tam mohli nastať nejaké problémy, zvlášť pri viacerých používateľských kontách. Táto metóda s priečinkom funguje spoľahlivo a pre môj účel je plne dostačujúca.
Pri každednnom spustení Windowsu sa tak môžete kochať novou tapetou pracovnej plochy plne automatizovane bez akéhokoľvek zásahu z vašej strany. Okrem fotografií oblohy sa tam nájdu aj fotografie priamo od NASA z teleskopov, pohľady na exoplanéty, hviezdy, či plánety, misie na Mesiac a mnoho iných. Každý deň výnimočná tapeta :-)
A Beautiful Trifid - 9. Júl 2025
Lynds Dark Nebula 1251 - 10. Júl 2025
The Veins of Heaven - 11. Júl 2025
Clouds and the Golden Moon - 12. Júl 2025
Pri fotografiách napr. z Hubblovho teleskopu som si všimol, že nemá pomer strán 16:9, ale väčšinou je to blízko 4:3 alebo 1:1. skrátka štvorec. Štandardne ale má 2048 pixelov a tak ju roztiahne aj na širokouhlú obrazovku a nemá to rozostrený efekt. Script som netestoval napríklad na 4K obrazovky vzhľadom na to, že fotografie sú väčšinou s rozlíšením max 2024 px, zrejme by ich to roztiahlo aj na 4K rozlíšenie, ale asi by bolo patrné rozostrenie.
Iný spôsob testovania API - Postman:
Postman je nástroj pre testovanie API. Ide o komplexný nástroj, ktorý umožňuje nastavenie ľubovoľného requestu, metódy, parametrov. Užitočná vec najmä pre debugovanie. Dá sa dobre pochopiť výstup API, poskytuje prehľadnosť JSON parametrov, rovnako tak ukazuje aj HTTP kód v hlavičke odpovede servera, teda je možné vidieť aj napríklad to, či použitá metóda, prípadne URL na API NASA existuje, alebo či ste prekročili počet requestov.
Samotný Postman nerobí nič s dátami, teda pozadie vám nenastaví, je to čisto len na testovanie requestu a odpovede servera. Postman umožňuje analyzovať aj hlavičke servera, ktoré prišli v odpovedi. Môžeme vidieť celkový počet povolených requestov a tiež limit, koľko ešte máme k dispozícii. Oficiálne podľa dokumentácie by to malo byť 1000, avšak je vidieť,že je limit v súčasnosti zrejme až na 2000. Vykonal som celkom 6 requestov, teda zostáva 1994 možných requestov.
Ak by sa hodnota prekročila, odpoveď servera by nebola s hlavičkou HTTP 200 OK, ale zrejme HTTP 429 Too Many requests, prípadne HTTP 200 OK s nejakou formou výstupu, ktorá o prekročení limitu informuje. Pri normálnom používaní nemáte možnosť prekročiť tieto limity. Limit sa po hodine resetuje, so súkromným kľúčom sú limitované requesty za hodinu, celkový počet za deň podľa dokumentácie nie je stanovený. Limit API sa vzťahuje na celé API, nie na podsekciu v ktorej operujete, sčítava sa to.
Ešte možno jedna "nevýhoda" na záver. NASA uploaduje obrázok o polnoci podľa miesta Goddard Space Flight Center, čo je štát Maryland. Je to o 6 hodín menej ako na Slovensku aj počas letného, aj počas zimného času, nakoľko aj oni si posúvajú čas. To znamená, že ak by sa počítač spustil o 5:59 ráno na Slovensku, nastavil by sa obrázok validný pre predchádzajúci deň. Obrázok by sa každý deň zmenil, ale stále by sa nastavoval obrázok, ktorý odpovedá predchádzajúcemu dňu.
Ak by sa počítač zapol o 6:00, už by sa načítal z NASA API nový obrázok, ktorý odpovedá aktuálnemu dňu. Pre funkcionalitu je to bezpredmetné, u oboch variantov by sa pozadie zmenilo každý deň, i keď môže nastať situácia, že si v jeden deň spustí počítač o 6:00 a na druhý deň o 5:58, teda budete mať oba dni rovnaký obrázok. No štandardne či doma, alebo v práci začínate po šiestej, či siedmej a teda v danom čase už bude API pre vás nový obrázok na vašu pracovnú plochu.
Rovnako tak je možné dopyt na NASA API urobiť tak, aby API vrátilo náhodný jeden obrázok zo všetkých v databáze, čo zníži pravdepodobnosť duplicitného obrázku 2 dni po sebe bez ohľadu na čas zapnutia počítača. Takýto GET request by vyzeral následovne: https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&count=1 Rovnako tak je možné výsledky aj filtrovať a vyžiadať si náhodnú fotografiu za špecifické obdobie odo dňa, mesiaca roka do dňa, mesiaca, roka.
Pre fanúšikov Marsu a fotografií z vozítok, ktoré by sa dali obdobne použiť ako tapeta (wallpaper) na plochu operačného systému, odporúčam API Mars Rover Photos, avšak rôzne vozítka majú rôzne API. Perseverance má parametre aj pre získanie posledných fotografií, čo ale Curiosity nemá a tam je potrebné zadať priamo sol, alebo Earth date. Rovnako tak je možné filtrovať aj zábery a dopytovať iba fotografie z konkrétnej kamery. Pre Curiosity je to určite MASTCAM pre panorámy, detaily krajiny, alebo NAVCAM pre navigačné pohľady kamery, kde je častokrát vidieť aj časť vozítka. Pre Perseverance odporúčam kamery Mastcam-Z. Iné dáta o vozítkach, napr. telemtriu NASA verejne neposkytuje. Okrem fotografií z vozítok Curiosity a Perseverance, je možné v API nájsť aj dnes už nefunkčné vozítka Spirit, Opportunity a ich fotografie, ktoré zaznamenali. Ak by ste chceli nájsť zábery na planténu Zem, odporúčam EPIC API (záznamy z polychromatickej kamery satelitu DSCOVR), tiež súčasť NASA API.