Archiwa blogu

Astronomy Picture of the Day jako tapeta

2017-02-10

Astronomy Picture of the Day (APOD) to strona udostępniona przez NASA, na której codziennie pojawia się nowe zdjęcie astronomiczne. Oprócz aktualnego zdjęcia, mamy również dostęp do fotografii archiwalnych z każdego dnia od 1995 roku. Adres strony to https://apod.nasa.gov. Bardzo często zdjęcia z tej strony ustawiałem jako tło pulpitu w systemie, wymagało to jednak wejścia na stronę, ręcznego pobrania obrazu i ustawienia go jako tapeta. Jakiś czas temu, na początku mojej nauki Pythona, postanowiłem napisać skrypt robiący to automatycznie, dodatkowo z możliwością pobierania zdjęć archiwalnych:

import datetime
import urllib.request
import ctypes

date = input("Fotografia z dnia (format RRMMDD, domyślnie dzisiejsza data): ")

if not date:
    date = datetime.datetime.now().strftime("%y%m%d")

print("Data: " + date)

apod = "http://apod.nasa.gov/apod/"
url = "{0}ap{1}.html".format(apod, date)

print("Url: " + url)

with urllib.request.urlopen(url) as response:
    for line in response:
        decodedLine = line.decode('utf-8')
        startIndex = decodedLine.find('<a href="image/')
        if startIndex != -1:
            urlLine = decodedLine.strip()
            break

endIndex = urlLine.find('">')
imgUrl = apod + urlLine[startIndex + 9 : endIndex]
imgExt = imgUrl[-3 :]

print("Link do obrazu: " + urlLine)
print("Url obrazu: " + imgUrl)

filePath = r"D:\Apod\apod." + imgExt
urllib.request.urlretrieve(imgUrl, filePath)

print("Plik zapisany w: " + filePath)

SPI_SETDESKWALLPAPER = 20
SPIF_UPDATEINIFILE = 1
SPIF_SENDWININICHANGE = 2

ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, filePath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE)

input("Gotowe...")

Na początku skryptu wczytywana jest data dla pobieranego zdjęcia (domyślnie jest to dzisiejszy dzień). Następnie budowany jest adres odpowiedniej strony i pobierana jej zawartość. Po odszukaniu adresu obrazu, jest on pobierany i zapisywany w określonej lokalizacji na dysku. Na końcu pobrany obraz ustawiany jest jako tapeta.