sábado, 17 de marzo de 2012

Descargar todos los wallpapers de InterfaceLIFT.com en GNU/Linux

Bueno, quería compartir con todos vosotros un pequeño truco (si se puede llamar así) que vengo usando un tiempo. Resulta que soy amante de la fotografía y, por supuesto, también de los buenos fondos de escritorio. 

Supongo que conoceréis el sitio Interfacelift. Para los que no, Interfacelift es un sitio web de fondos de escritorio donde hay una variedad y una calidad sencillamente impresionantes. En este post os explicaré cómo descargar todos los wallpapers del sitio en la resolución que queráis, y programar la descarga en vuestro servidor para que periódicamente descargue los nuevos wallpapers que se van añadiendo.

El tema está en utilizar un script que pillé por la red hace un tiempo (no recuerdo dónde) que está escrito en Python. Antes de nada, no os recomiendo copiar el código desde aquí puesto que puede haber problemas con la edición del código del post que he tenido que hacer para presentar bien el texto, ya que sólo lo he escrito para poder explicar qué secciones hay que modificar. Al final del post dejaré el enlace para que podáis descargar el script tranquilamente sin tener que copiarlo. El script para una resolución de 1920x1080 es el siguiente:



#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import urllib2
import re

url       = 'http://interfacelift.com/wallpaper/downloads/date/hdtv/1080p/'
directory = '/home/usuario/interfacelift/'

useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)'
pattern   = '(?<=<a href=")/wallpaper/.*jpg(?=">)'
count     = 1
while count < 999999:
        data       = urllib2.urlopen(url + "index" + str(count) + ".html").read()
        pictures   = re.findall(pattern, data)
        urlcount   = len(pictures)
        for picture in pictures:
                if os.path.exists(directory + picture):
                        print 'Directory up to date. Found existing file.'
                        quit()
                os.system('wget -P ' + directory + ' -nc -U "' + useragent + '" ' + 'http://interfacelift.com' + picture)
        if urlcount == 0:
                quit()
        count += 1 


Como podéis ver, los elementos que debemos modificar para "personalizar" la descarga están a simple vista. El primero de ellos es la línea:

url = 'http://interfacelift.com/wallpaper/downloads/date/hdtv/1080p/'

Donde se ve claramente que se hace referencia a la relación de aspecto (hdtv) y a la resolución (1080p) de los wallpapers que vamos a descargar. En mi caso la relación de aspecto es HDTV y la resolución es 1920x1080, o 1080p como suele llamarse formalmente. Por tanto, aquí es donde debemos insertar la relación de aspecto y la resolución de los wallpapers que queremos descargar, pero debe hacerse de la manera correcta para que funcione. Para facilitaros las cosas, me he tomado la libertad de elaborar una tabla con las relaciones de aspecto y las correspondientes resoluciones que admite el sitio Interfacelift.com, para que escojáis mejor cuál es la que más se adapta a vuestro caso. 

De la tabla, las columnas necesarias son la de la relación de aspecto y la de la resolución; la columna titulada dispositivo tiene carácter meramente informativo. Así que teniendo en cuenta la línea de código anterior, solo tenéis que sustituir la relación de aspecto hdtv por la que se adapte a vuestro "monitor", y la resolución 1080p por vuestra resolución, todo ello cogiendo los datos de la tabla. Nótese que de hacerse de otra manera probablemente no funcione.




Si os fijáis, el sitio Interfacelift.com tiene secciones particulares para los dispositivos populares, como pueden ser los de Apple, por ejemplo. En estos casos es todavía más sencillo puesto que no necesitamos saber la resolución de la pantalla del dispositivo.

A modo de ejemplo, si quisiéramos descargar los wallpapers disponibles para la resolución 1280x800 de un ordenador portátil, tendríamos que escribir la línea de la siguiente manera:

url = 'http://interfacelift.com/wallpaper/downloads/date/widescreen/1280x800/'

Y si por ejemplo queremos descargar los wallpapers para El Nuevo iPad, lo haríamos así:

url = 'http://interfacelift.com/wallpaper/downloads/date/apple/new_ipad_(3rd_gen)/'

Debemos tener en cuenta que la cantidad de wallpapers que existen en esta web no es la misma para todas las resoluciones, por ejemplo para la resolución 1280x800 hay muchos más wallpapers que para 1080p.
Bien, la segunda línea que debemos modificar es la relativa a la ruta de descarga:

directory = '/home/usuario/interfacelift/'

En vuestro caso tendréis que escribir la ruta completa del directorio en el que se descargarán los wallpapers. Debemos procurar no cometer errores en este paso, como ya sabéis en GNU/Linux se diferencian mayúsculas y minúsculas. Y por supuesto, la carpeta de destino debe haber sido creada previamente.

Una vez modificadas ambas líneas, es hora de ejecutar el script. Para ello, por supuesto, el script debe tener permisos de ejecución:

$ chmod +x interfacelift.py

Y para su ejecución, procederemos así:

$ ./interfacelift.py

Si ha ido todo bien, la descarga comenzará al instante, y los wallpapers que se vayan descargando se irán almacenando en la carpeta que hemos indicado en el propio script. 

Cuando la descarga haya finalizado bastante tiempo después (tarda mucho, tened paciencia), tendremos una colección de wallpapers de una calidad insuperable (como ya he apuntado, el número dependerá de la resolución escogida).

Ahora bien... ¿Qué pasa con los wallpapers que vayan apareciendo después de que hayamos ejecutado el script? No hay problema, podemos ejecutar el script con la frecuencia que necesitemos para que se descarguen los que se han añadido después. 

Vale, pero... ¿Qué ocurre con los wallpapers que ya teníamos? ¿Se volverán a descargar otra vez? La respuesta es no. Eso es lo bueno de este script, en lugar de descargar de nuevo los wallpapers y sobreescribirlos, ignorará los que ya están almacenados con el mismo nombre.

Lo interesante de todo esto es automatizar la descarga para que nuestra colección de wallpapers se actualice automáticamente sin nuestra intervención. Todo ello lo haremos a través de Cron, el planificador de tareas por excelencia en GNU/Linux.

Para editar la lista de Cron haremos lo siguiente:

$ crontab -e

En mi caso se me abre el editor Nano puesto que yo lo tengo establecido de esa forma, pero es posible que vosotros lo tengáis establecido con otro editor. Al final del documento de Cron tendremos que añadir una nueva tarea planificándola de la forma adecuada.

En mi caso, yo prefiero no saturar demasiado el ancho de banda de que dispone Interfacelift, por ello tengo programada la descarga para que se ejecute una vez a la semana (los domingos) a las 4:00 AM:

0   4   *   *  7   /home/usuario/Scripts/interfacelift.py

La primera columna hace referencia a los minutos, la segunda a la hora, la tercera al día del mes, la cuarta al mes y la quinta al día de la semana. Queda a vuestro gusto la personalización de la tarea. No obstante, si preferís no tener que lidiar con la terminal, podéis utilizar un planificador gráfico de tareas. KDE en Debian incorpora uno estupendo a través del paquete kde-config-cron, accesible a través de las preferencias del sistema; os adjunto una captura de cómo quedaría esta misma tarea en el administrador gráfico:

Ahora sí, aquí os dejo el enlace al script en cuestión. Insisto en que es preferible que descarguéis este en lugar de copiar el que está un poco más arriba. 

Y esto ha sido todo amigos. Espero que os haya resultado útil.

Un saludo a todos.

4 comentarios:

  1. genial, muchas gracias por la info!

    ResponderEliminar
  2. No hay de qué Felipe, a disfrutarlo ;-)

    ResponderEliminar
  3. Hola! Quisiera saber si este metodo es compatible con Windows 7 o solo funciona con Linux? saludos!

    ResponderEliminar
  4. Sí que funciona en Windows, solo necesitas instalar Python en Windows. No obstante este script ha quedado obsoleto ya que desde Interfacelift.com lo bloquearon para que compres su propio "script".

    Sin embargo, como siempre ocurre en el software libre, todo tiene solución :-)

    https://github.com/dmacpherson/py-interfacelift-downloader/blob/master/interfacelift.py

    Un saludo ;-)

    ResponderEliminar