APOD como fondo de escritorio GNOME

marzo 11, 2010

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:

  1. Descarga la página del día de APOD.
  2. Busca en la página el enlace a la fotografía principal.
  3. Descarga la fotografía a un directorio local.
  4. 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:

  1. C++, GDB y Python Descarga el fichero aquí. Hace unos días, construyendo una versión...

One Response to “APOD como fondo de escritorio GNOME”

  1. Está curiosa la cosa :) . A parte de esto, como salvapantallas te propongo algo así (freak total)
    http://goo.gl/OjkP

Deja un comentario