Crear mosaico de fotos

En estos días he estado preparando la charla de Argentina en Python que voy a dar en @PyCaribbean en Febrero de 2016. En uno de los slides quería agredecer el apoyo que hemos recibido de toda la comunidad y para eso se me ocurrió poner una foto de un mosaico de todas las fotitos de perfiles de los seguidores de la cuenta @argenpython de Twitter.

Entonces, me puse a trabajar en eso.

Primero, busqué un script que había venido utilizando cuando estaba buscando herramientas para crear YourReminder (un programador de tuits automáticos) para obtener todos los seguidores de una cuenta en particular. Usé la biblioteca twitter:

twitter-follow --oauth argenpython > "argenpython.followers.txt"

Eso me dejó un archivo de la pinta:

b'thehandro'
b'raviol'
b'AlvaroAnguix'
b'rddebona'
b'kragen'
...

Luego, quería buscar todas las fotos de perfil de los usuarios que aparecen en ese txt. Para eso me hice este pequeño script en Python que accede a todas las urls de esos usuarios e imprime el link a la foto en la pantalla:

import re
import sys
import requests  # fades
from bs4 import BeautifulSoup  # fades

for user in open(sys.argv[1], 'r').readlines():
    url = 'http://twitter.com/{}'.format(user[2:-1])
    data = requests.get(url).content
    soup = BeautifulSoup(data)
    img = soup.find('img', {'class': 'ProfileAvatar-image'})
    print(img.get('src'))

Ejecutamos (obvio, con fades!):

$ fades get_twitter_profile_pics.py argenpython.followers.txt

https://pbs.twimg.com/profile_images/673314332340539393/lSKlxZ7r_400x400.jpg
https://pbs.twimg.com/profile_images/378800000304367652/2fb693020239400ff0062b15034890e3_400x400.jpeg
https://pbs.twimg.com/profile_images/676336395141672960/mB8x63HP_400x400.png
...

Ahora, teniendo todas las urls de las fotos de los perfiles, solo me quedaba bajarlas y hacer el mosaico. Mientras hacía este script de Python ya había preguntado por Twitter como hacer el mosaico y había obtenido una respuesta muy acertada a la cual finalmente modifiqué un poquito y fue lo que terminé usando.

Para bajar las fotos tenía dos caminos. Escribir algo en Python y lidiar programando, o pasarle toda esta basura a quien más sabe del tema: wget

fades get_twitter_profile_pics.py argenpython.followers.txt | xargs wget -c

Mientras esperaba que se bajen todas las fotos, me puse a leer las respuestas de Twitter y leer la documentación de convert y montage para finalmente terminar utilizando montage de esta forma:

montage ./*.{jpg,JPG,jpeg,png,gif} -tile 35x -geometry 96x96+0+0 -quality 90 ahlapelotita.jpg

Eso, finalmente, me llevó al resultado que necesitaba:

ahlapelotita.thumbnail.jpg

Mosaico de imágenes de perfiles de los seguidores de @argenpython

Y eso, ¡gracias a todos ustedes por el aguante!

Comentarios

Comments powered by Disqus