APOD como fondo de escritorio GNOME
Descarga el programa: apod.zip.
APOD (de Astronomic Picture of the Day: Foto Astronómica del Día) es una popular web de la NASA que publica y comenta una fotografía diferente cada día de temática astronómica o científica. El programa Python que incluyo a continuación descarga automáticamente la foto de APOD y la instala como fondo de escritorio (si usas GNOME, claro).
Las tareas básicas de programa son sencillas:
- Descarga la página del día de APOD.
- Busca en la página el enlace a la fotografía principal.
- Descarga la fotografía a un directorio local.
- Instala la fotografía como fondo de escritorio.
Como en Python existe un módulo para cada ocasión el programa entero ocupa menos de 75 líneas (!).
Descarga la página del día de APOD
Descargar una página web es fácil gracias al módulo urllib:
import urllib #... u = urllib.urlopen('http://apod.nasa.gov/apod/') for line in u.readlines(): #...
No es necesario guardar la página en disco, se hace todo en memoria.
Busca en la página el enlace a la fotografía principal
Cabría esperar que esta fuera la tarea más difícil del programa, pero gracias al diseño escueto y minimalista de APOD no lo es tanto: un título, un texto, el enlace a la foto, más texto, y al final varios enlaces a otras páginas de la web. El código simplemente busca la primera aparición del texto href=”url”, siendo url algo que acabe en .jpg o .png (a veces enlazan GIFs animados o vídeos):
KEY1 = 'href="' KEY2 = '"' image = None for line in u.readlines(): pos1 = line.find(KEY1) if pos1 == -1: continue pos1 += len(KEY1) pos2 = line.find(KEY2, pos1) if pos2 == -1: continue href = line[pos1:pos2] hrefl = href.lower() if hrefl.endswith('.jpg') or hrefl.endswith('.png'): image = href break
Si algún día se les ocurre insertar un logotipo o similar en la cabecera de la página habría que modificar esta parte.
Descarga la fotografía a un directorio local
De nuevo urllib. La imagen se guarda en un directorio oculto dentro de $HOME. La única dificultad reside en convertir la url en absoluta, ya que puede ser relativa a la página, al servidor o absoluta.
dir = os.getenv('HOME') + '/.apod' #... #image es la URL, se convierte a absoluta if not (image.startswith('http:') or image.startswith('ftp:')): if not image.startswith('/'): image = '/apod.nasa.gov/apod/' + image image = 'http:/' + image #se descarga img = urllib.urlopen(image) d = img.read() #y se guarda en local name = dir + '/' + image_base f = file(name, 'wb') f.write(d) f.close()
Instala la fotografía como fondo de escritorio
El fondo de escritorio de GNOME es una opción de configuración GConf. Afortunadamente existe el módulo gconf (si usas GNOME seguramente ya lo tengas instalado), con lo que el código resultante es:
name = dir + '/' + image_base #... cli = gconf.client_get_default() cli.set_string('/desktop/gnome/background/picture_filename', name) cli.set_string('/desktop/gnome/background/picture_options', 'scaled')
Instalación y opciones avanzadas
La mejor forma de usar este programa es copiarlo a un directorio del PATH y crear una tarea cron que lo ejecute automáticamente todos los días por la mañana. He deducido empíricamente que APOD actualiza la página entre las 6 y las 7 de la mañana, hora central europea:
$ chmod a+x $HOME/bin/apod $ crontab -e 0 7 * * * $HOME/bin/apod >> $HOME/.apod/log 2>&1
Por si no conoces el formato de crontab:
- El primer número son minutos y el segundo horas, por lo tanto se ejecuta a las 7:00.
- Los asteriscos son el día del mes, el mes y el día de la semana. Asteriscos significa todos los días.
- El resto de la línea es el comando. Yo lo he copiado al directorio $HOME/bin. Se puede reenviar la salida a un fichero de log, para diagnosticar errores.
Si necesitas configurar un proxy, puedes hacerlo creando un fichero en $HOME/.apod/options.py que incluya algo como:
os.environ['http_proxy'] = 'http://proxy:port/'
Puedes descargar el programa aquí: apod.zip.
Artículos relacionados:
- C++, GDB y Python Descarga el fichero aquí. Hace unos días, construyendo una versión...
RSS
Está curiosa la cosa
. A parte de esto, como salvapantallas te propongo algo así (freak total)
http://goo.gl/OjkP