martes 12 de mayo de 2009

#chingasatumadre

La historia completa, en voz de La Líder del Movimiento, aquí.

Si estuviera permitido el matrimonio entre hombres y cuentas de twitter, yo me casaría con la de Lilián.

En fin, necesitábamos saber quienes tuitearon el hashtag (así se le llama a la spalabras precedidas de un #... es como un "marcador" del tema de tu twit) #chingasatumadre.

Bien, se puede buscar el hashtag en el buscador de twitter:



Y luego revisar cada resultado, a mano, a lo largo de un millón de años.

NOT!

Este es un trabajo para ¡Python!

(A partir de aquí, el post se pone técnico. Mucho. Huyan mientras puedan).

Paso 1, Buscar el API de twitter: Un API es... como una serie de instrucciones que el fabricante o proveedor de "algo" te da para que puedas controlar el "algo" de manera automática, desde un programa. Twitter tiene uno (En estos días, ¿Qué "red social" no?): http://apiwiki.twitter.com

Paso 2, Buscar la librería de Python para interactuar con el API: Usar el API de twitter es medio un desmadre. Es necesario visitar ciertas direcciones de internet, con los parámetros adecuados, para que la "página" que te entregue sean los resultados que quieres ver. Hacer eso desde Python (mi lenguaje de programación preferido) es medio un desmadre. Claro, podía escribir una pequeña librería de funciones que abstrajeran esa funcionalidad, pero... seguro alguien ya lo había hecho. Y sí, me encontré con esta joyita: http://mike.verdone.ca/twitter/.

Paso 3, El programa en sí: La tarea es simple: Buscar todos los twits que mencionen "#chingasatumadre", y hacer una lista, sin repeticiones, de los usuarios responsables. Solucionado fácilmente con lo siguiente:

# coding: utf-8

# La librería para usar el API de Twitter
from twitter import Twitter

# Indicamos que sólo usaremos la funcionalidad de búsqueda
# (para no tener que loguearnos).
t_s = Twitter(domain='search.twitter.com')

# Creamos un "conjunto", para almacenar los usuarios. Un conjunto
# no admite repeticiones.
users = set()

# Pequeña "trampa" para "compensar" la ausencia de do...while en
# Python
resultados = 100
p = 1

# Mientras haya cien resultados en la página
while resultados == 100:
# Toma la página p de resultados (con un máximo de 100 por
# página) de la búsqueda de #chingasatumadre
chingas = t_s.search(q='#chingasatumadre', rpp=100, page=p+1)
# Obten una lista de los nombres de usuario de esos twits.
usuarios = [chin['from_user'] for chin in chingas['results']]
# Añádelos al conjunto de usuarios (eliminando las repeticiones).
users.update(usuarios)
# ¿Cuántos resultados hubo en esta página?
resultados = len(usuarios)
# Avanza el número de página.
p += 1

# Finalmente, imprime los nombres de usuario, cada uno en una línea,
# ignorando mayúsculas y minúsculas.
print '\n'.join(sorted(users, key=unicode.lower))


UPDATE: ¡Error! p debe ser igual a cero antes del ciclo. Perdón a los que se quedaron fuera por mi inutilidad.

Paso 4, Pasarle la lista a Lilián: Muy fácil, vamos a un servicio de pastebin (como http://pastebin.com/), donde podemos pegar cualquier texto y ponerlo a disposición del público por cierto tiempo. Muy útil cuando necesitas ayuda para corregir un programa, y se lo quieres enseñar a alguien más por Internet.

Voilá! Niños, inténtenlo en casa. Se volverán adictos, y jamás harán algo "a mano" de nuevo.

6 comentarios:

Lilián dijo...

Eso me avergonzó en más niveles de los que estoy dispuesta a admitir.

(salvo la parte de casarte con mi cuenta de Twitter: esa parte me halagó)

Obviamente no entendí una naranjada, Jair. Y no pretendas que es fácil. Es una puta maraña de HTML incomprensible.

Sin embargo, graciasgraciasgracias. ¡No lo hubiéramos logrado sin ti!

Oliverio dijo...

Desayuno a las 8:00, evacuación de intestinos 8:20, yo no le veo el chiste al tuiter ¿será porque no tengo uno?, (¿asi se dice si uno no tiene, o que sentido gramatical se le tiene que dar a la frase?)

Carlos Israel dijo...

Eit como te va!!!buen blog ese sitema python es el que usan los cel nokia tambien??
Saludos

Libia dijo...

Yo siempre he creido que Pyhton es el lenguaje del amor y de la coquetería....que se jodan los fenchies

(Y parece ser que ese es un claro ejemplo del uso irresponsable de las expresiones regulares)

:P

Jair Trejo dijo...

Lilián: Is, like, the easiest thing in the universe.
Oliverio: Jaja, no, estos no son los updates del Facebook. Es diferente el medio y el mensaje.
Carlos Israel: ¡Gracias!. Efectivamente, puedes escribir programas en python para algunos celulares Nokia.
Libia: ¡Naturalmente! Es mi lengua materna.

Olimpia dijo...

master del twitter, no te entendí casi nada XD yo lo uso para que mi cabeza hable. cuidate!