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:
Y eso, ¡gracias a todos ustedes por el aguante!