Ich bin ja ein Fan davon, wenn man öffentliche Daten über öffentliche, maschinenlesbare Schnittstellen herunterladen kann. So zum bietet zum Beispiel die NASA einige APIs an. Insbesondere möchte ich heute das astronomical picture of the day vorstellen.
Da wird jeden Tag ein astronomisches Bild online gestellt. Mal ist es ein Bild einer Galaxie. Mal das eines Kometen. Mal der Aurora. Und manchmal ist es eine Rundumsicht des Perseverance Marsrovers.
Alles Bilder, die sich wunderbar als Hintergrundbild machen würden. Nur ist es ja langweilig, wenn man immer dasselbe Bild hat, und nervig, es jeden Tag selber ändern zu müssen.
API to the rescue
Glücklicherweise kann man sich das ja automatisch herunterladen lassen. Da die URLs der Bilder nicht wirklich erratbar sind, besorgt man sich zuerst die URLs der HD-Bilder und lädt diese dann herunter. Dann benutzt man ein kleines Script, um die Datei als Hintergrundbild zu setzen.
Non könnte man das Herunterladen einfach per shell-Script machen. Wäre vermutlich das einfachste. Doch ich mache das in meiner Freizeit. An Effizienz denken muss ich beruflich genug. Ich will das in rust schreiben. Also habe ich das getan. Es ist für das bisschen was es tut hoffnungslos over-engineered und arbeitet vermutlich langsamer als ein einfaches wget
. Aber es funktioniert gut.
Außerdem habe ich mich da ein bisschen mit serde und dem Deserialisieren in rust-enums beschäftiggen können. Also was gelernt. Das Ding hat sogar eine Konfigurationsdatei, in der man den API-Key eintragen kann (optional, wenn man nicht mehr als 60 Anfragen pro Tag machen will).
Da ist noch Luft für jede Menge nutzlose Funktionen, die ich vielleicht irgendwann mal baue. Aber nicht jetzt. Oh und unter Windows funktioniert das mit der Konfigurationsdatei vermutlich nicht, weil ich es mir einfach gemacht und auf die HOME
-Variable zugegriffen habe, die es unter Windows (glaube ich) nicht gibt.
Bildschirmhintergrund
Ich benutze gnome, da kann man sich den Hintergrund mit gsettings
setzen:
gsettings set org.gnome.desktop.background picture-uri "file://$IMAGE_PATH"
IMAGE_PATH
ist hier der Pfad zum Bild. Den gibt mein herunterladen-Programm oben auf stdout aus, weil ich zu faul war, mir etwas anderes einfallen zu lassen (wie gesagt, das Ganze wäre vermutlich mit einem einfachen shellscript einfacher zu lösen gewesen).