En este última práctica tendrás que crear un bot de twitter (un pograma que interactúa de manera semi-automática con twitter) que muestre ciertas capacidades lingüísticas.
Esta práctica es diferente de las anteriores en el sentido de que es bastante abierta. Tendrás que demostrar que eres capaz de programar en Python funcionalidades más o menos complejas, combinando las herramientas anteriores vistas en clase de manera creativa.
A continuación verás snippets o ejemplos de código mostrando las instrucciones mínimas que deberá incluir tu bot para que sea capaz de publicar mensajes. También trataré de mostrar cómo acceder a otras funcionalidades, por si te animas a hacer cosas más complejas. Ojo, tendrás que adaptar parte de este código para que tu bot funcione.
Para poder crear un bot y, en general, cualquier aplicación que interactúe con twitter, necesitas tener una cuenta con permisos de desarrollador. Sigue los pasos:
Lo primero que tienes que hacer, si no tienes cuenta en twitter, es registrarte. Si ya tienes cuenta en esta red, te recomiendo que la uses y no te crees otra nueva. El proceso de alta de twitter requiere la validación de un número de teléfono móvil único para cada cuenta. Así que, si no tienes más de un número de móvil y no quieres dolores de cabeza, utiliza tu cuenta de todos los días.
Una vez registrado, laz login con tu cuenta y entra en la página de gestión de apps de twitter, donde podrás solicitar permisos para una app nueva. Pincha en Create New App.
Rellena los campos requeridos del formulario que se muestra:
*Name: tiene que ser un nombre único, así que sé original. Es probable que tengas que probar varios nombres hasta dar con uno que esté libre. Si no quieres fallar, pon algo como progplnbot-tunombre*.
*Description*: describe brevemente el propósito de tu bot.
*Website*: por el momento, cualquier URL servirá. Si no tienes web propia y no sabes qué poner, introduce la URL de la web de Lingüística: http://www.ucm.es/linguistica
Lee (cough, cough) el texto del acuerdo, selecciona Yes, I agree y pincha el botón de la parte inferior de la página que dice Create your Twitter application.
Si todo ha ido bien (si has elegido para tu app un nombre que estuviera libre, básicamente), se te mostrará una página de configuración. Tendrás que cambiar algunos parámetros.
En el apartado Application Settings, en Access level, pincha en modify app permissions y otorga permisos de lectura y escritura: selecciona la opción Read and Write. Una vez cambiado, pincha en Update Settings.
En la pestaña Keys and Access Tokens, pincha en el botón Create my access token para crear los tokens de acceso. Estos nombres probablemente no te digan nada, pero desde esta página tienes acceso a las cuatro credenciales que tu bot necesita para autenticarse y publicar mensajes. Toma nota de ellas, las necesitarás más adelante:
Consumer key
Consumer secret
Access token
Access token secret
Ya tienes todo lo que necesitas para crear tu bot.
tweepy
.¶El código que aparece a continuación contiene las líneas mínimas para crear un cliente de twitter y publicar un mensaje en twitter.
Consejo: No lo ejecutes más de una vez o correrás el riesgo de que te baneen la cuenta.
import tweepy
# añade las credenciales de tu aplicación de twitter
# como cadenas de texto
CONSUMER_KEY = "CAMBIA_ESTO"
CONSUMER_SECRET = "CAMBIA_ESTO"
ACCESS_KEY = "CAMBIA_ESTO"
ACCESS_SECRET = "CAMBIA_ESTO"
# autentica las credenciales
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
# crea un cliente de twiter
t = tweepy.API(auth)
# publica un saludo
t.update_status("¡Propicios días! Soy un robotito :-P")
Hay que ser cuidadoso a la hora de enviar mensaje automatizados. Si queremos publicar más de un mensaje y queremos controlar el tiempo que transcurre entre un mensaje y otro, podemos utilizar la librería time
de la siguiente manera:
# añade esta librería al principio de tu código
import time
# algunas citas memorables de la serie The Wire
citas = """If the man comin', make ready for the man.|
All in the game yo, all in the game.|
Man, money ain't got no owners, only spenders.|
Nigger, is you taking notes on a criminal fucking conspiracy?|
- The game is the fuckin' game. Period.
- Same as it was ever.|""".split("|\n")
# iteramos sobre las citas y las publicamos de una en una
for cita in citas:
t.update_status(cita)
time.sleep(60) # envía el tweet cada 60 segundos
Otra funcionalidad típica que tienen los bots de twitter es enviar automáticamente mensajes a otros usuarios. Si queremos que nuestra aplicación busque entre todos los mensajes y responda al autor, podemos hacer lo siguiente:
# buscamos mensajes que contengan la expresión "gaticos y monetes"
busqueda = t.search(q="gaticos y monetes")
# itero sobre estos mensajes
for mensaje in busqueda:
# capturo el nombre de usuario
usuario = mensaje.user.screen_name
# compongo el mensaje de respuesta
miRespuesta = "@%s ¡monetes!" % (usuario)
# envío la respuesta
mensaje = t.update_status(miRespuesta, mensaje.id)
Si queremos responder a menciones, es decir, si queremos que el bot responda automáticamente a mensajes dirigidos a él, podemos utilizar el siguiente código:
# recupero las últimsa 5 menciones de mi usuario
menciones = t.mentions_timeline(count=5)
# ten en cuenta que:
# si tu cuenta de twitter es nueva y no tiene menciones, no funcionará
# si estás usando tu cuenta de todos los días, como hago yo,
# enviarás mensajes a esas personas (o robotitos)
for mencion in menciones:
# capturo el nombre de usuario que me manda el mensaje
usuario = mencion.user.screen_name
# compongo el mensaje de respuesta
miRespuesta = "¡Hola, @%s! Soy un robotito. Este es un mensaje automático, no le hagas caso" % (usuario)
# envío la respuesta
mensaje = t.update_status(miRespuesta, mention.id)
Si queremos retuitear mensajes, podemos ejecutar lo siguiente:
# buscamos mensajes que contengan la expresión "viejóvenes"
busqueda = t.search(q="viejóvenes")
# para que no se descontrole, solo quiero retwitear los tres últimos mensajes
if len(busqueda) >= 3:
for mensaje in busqueda[:3]:
# para retwitear un mensaje, ejecuto el método retweet
# indicando el identificador único del mensaje en cuestión
t.retweet(mensaje.id)
else:
for mensaje in busqueda:
t.retweet(mensaje.id)
Hasta aquí las funcionalidades básicas. Si quieres explorar más sobre las posibilidades de esta librería de twitter, revisa la documentación de tweepy.
A partir de aquí, continúas tú solo. Crea un nuevo cuaderno File > New para tu práctica final, reutiliza el código que necesites y añade capacidades lingüísticas combinando librerías de procesamiento del lenguaje que hemos visto en clase.
¡Suerte!