Obtener screenshots para juegos de debian

2017/09/22

El otro día pensé en instalar algún juego para linux.

Lo malo que juegos libres no hay muchos y gráficamente no son muy bonitos. Por eso pensé en ver screenshots de juegos disponibles para debian, a ver si había alguno que llamara mi atención para instalarlo. Para automatizar el ver los screenshots de los paquetes seguí los siguientes pasos:

Primero se listan los paquetes en la sección games:

$ aptitude search -F %p '?section(games)'
0ad
0ad-data
0ad-data-common
...

Luego, según https://screenshots.debian.net/about, para obtener el screenshot de un paquete se debe utilizar la url http://screenshots.debian.net/screenshot/PACKAGENAME. Si el paquete posee una screenshot se devuelve un response http 200 y un archivo en formato png. En caso de que no se posea una screenshot se devuelve un response http 404.

Para descargar las imagenes en el directorio actual se utiliza un bucle con un here string de bash:

$ while read package; do
    wget -O "$package.png" -c "http://screenshots.debian.net/screenshot/$package"
done <<< $(aptitude search -F %p '?section(games)')

Queda manejar el caso de los paquetes sin screenshots que devuelven 404 y debido a ello wget crea un archivo vacio.

Para eliminar los archivos vacíos se puede utilizar find y xargs:

$ find /tmp/screenshots -size 0 -print0 | xargs -0 rm

Finalmente se puede utilizar un visor de imagenes para ver las screenshots de los distintos juegos disponibles en debian.

A continuación el script completo:

#!/bin/bash
#
# Download in the current directory the screenshots for games in debian
# repository
#
set -e

while read package; do
    wget --show-progress -q -O "$package.png" \
        -c "http://screenshots.debian.net/screenshot/$package" || :
done <<< $(aptitude search -F %p '?section(games)')
find /tmp/screenshots -size 0 -print0 | xargs -0 rm

Cambios realizados en el script:

  1. Se mejora la salida de wget para que no sea tan verbosa pero muestre el estado de la descarga de las imagenes utilizando --show-progress -q.
  2. Cuando una url devuelve 404 wget devuelve un código de error 8: Server issued an error response, lo cual interrumpe el programa, por lo cual se utiliza || : que no hace nada cuando se obtiene un error de wget.