Crea un bot de Twitter en Python usando Tweepy

Con aproximadamente el 15% de Twitter compuesto por bots, quería probar suerte. Busqué en Google cómo crear un bot de Twitter y me llevaron a una aplicación web bien diseñada. Le permitió crear un bot al que le gustaría, seguir o retuitear un tweet basado en una palabra clave. El problema era que solo se podía crear un bot para una función.

Así que decidí codificar yo mismo un bot con Python y la biblioteca Tweepy.

Preparar

Primero, descargué Tweepy. Puede hacer esto usando el administrador de paquetes pip.

pip install tweepy

También puede clonar el repositorio de GitHub si no tiene instalado pip.

git clone //github.com/tweepy/tweepy.gitcd tweepypython setup.py install

Deberá importar Tweepy y Tkinter (para la interfaz GUI).

import tweepyimport Tkinter

Cartas credenciales

A continuación, necesitamos vincular nuestra cuenta de Twitter a nuestro script de Python. Vaya a apps.twitter.com e inicie sesión con su cuenta. Cree una aplicación de Twitter y genere una clave de consumidor, un secreto de consumidor, un token de acceso y un secreto de token de acceso. ¡Ahora ya está listo para comenzar!

Debajo de sus declaraciones de importación, almacene sus credenciales dentro de variables y luego use el segundo bloque de código para autenticar su cuenta con tweepy.

consumer_key = 'consumer key'consumer_secret = 'consumer secrets'access_token = 'access token'access_token_secret = 'access token secret'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)auth.set_access_token(access_token, access_token_secret)api = tweepy.API(auth)

Para verificar si su programa está funcionando, puede agregar:

user = api.me()print (user.name)

Esto debería devolver el nombre de su cuenta de Twitter en la consola.

Construyendo el Bot

Este bot está destinado a:

  1. Sigue a todos los que te siguen.
  2. Marque como favorito y retuitee un tweet basado en palabras clave.
  3. Responder a un usuario basándose en una palabra clave.

El primer paso es el más fácil, sólo tiene que bucle a través de sus seguidores y luego seguir cada uno.

for follower in tweepy.Cursor(api.followers).items(): follower.follow() print ("Followed everyone that is following " + user.name)

En este punto, para asegurarse de que su código esté funcionando, debe iniciar sesión en Twitter y observar cómo aumentan las personas a las que sigue.

Desde este punto en adelante, además de configurar y empaquetar las etiquetas en la GUI, estoy codificando todobajo la función mainFunction().

def mainFunction(): #The code

Es posible que pueda ver a dónde va esto. Para marcar como favorito o retuitear un tweet, podemos usar un bucle for y una declaración try como esta:

search = "Keyword"
numberOfTweets = "Number of tweets you wish to interact with"
for tweet in tweepy.Cursor(api.search, search).items(numberOfTweets): try: tweet.retweet() print('Retweeted the tweet')
 except tweepy.TweepError as e: print(e.reason)
 except StopIteration: break

Para marcar un tweet como favorito, simplemente puede reemplazar el

tweet.retweet()

con

tweet.favorite()

Para responder a un usuario en función de una palabra clave, debemos almacenar el nombre de usuario y la identificación de Twitter del usuario.

tweetId = tweet.user.idusername = tweet.user.screen_name

Luego podemos recorrer los tweets y actualizar nuestro estado (tweet) en cada usuario.

phrase = "What you would like your response tweet to say"
for tweet in tweepy.Cursor(api.search, search).items(numberOfTweets): try: tweetId = tweet.user.id username = tweet.user.screen_name api.update_status("@" + username + " " + phrase, in_reply_to_status_id = tweetId) print ("Replied with " + phrase) except tweepy.TweepError as e: print(e.reason)
 except StopIteration: break

Si solo desea utilizar el script a través de la terminal y actualizar el código cada vez que desee ejecutarlo, entonces ha completado su bot.

Creando la GUI

We can create a GUI application that will take our inputs of the keyword you would like to search for and whether or not you would like to favorite a tweet.

We first need to initialize Tkinter and setup the layout.

To create our user interface, we are going to have seven labels for search, number of tweets, and reply. Plus the questions do you want to reply, favorite, retweet the tweet, and follow the user.

Remember the code below is outside and above our mainFunction().

root = Tk()
label1 = Label( root, text="Search")E1 = Entry(root, bd =5)
label2 = Label( root, text="Number of Tweets")E2 = Entry(root, bd =5)
label3 = Label( root, text="Response")E3 = Entry(root, bd =5)
label4 = Label( root, text="Reply?")E4 = Entry(root, bd =5)
label5 = Label( root, text="Retweet?")E5 = Entry(root, bd =5)
label6 = Label( root, text="Favorite?")E6 = Entry(root, bd =5)
label7 = Label( root, text="Follow?")E7 = Entry(root, bd =5)

We also need to pack each label so that they show up and then call the root function in a loop so that it remains on the screen and doesn’t immediately close.

The following is what packing the first label looks like. I packed all of the labels below the mainFunction().

label1.pack()E1.pack()
root.mainloop()

If you only ran your GUI code, it should look something like this:

However, inputing text into the labels or clicking the submit button will do nothing at this point. As the interface is not yet connected to the code.

In order to store the user input in the labels, we need to use the .get() function. I used individual functions for each label.

def getE1(): return E1.get()

Then in my mainFunction(), I called the function getE1() and stored the input into a variable. For E1 it looks like this:

getE1()search = getE1()

You must do this for every label. For the numberOfTweets label make sure to convert the input into an integer.

getE2()numberOfTweets = getE2()numberOfTweets = int(numberOfTweets)

For the last four labels (Reply, Favorite, Retweet and Follow), we need to check to see if the input from the user is “yes” or “no” in order to run that given function or not. This can be accomplished through if statements.

This would be the code for the reply function:

if reply == "yes":
 for tweet in tweepy.Cursor(api.search, search).items(numberOfTweets): try: tweetId = tweet.user.id username = tweet.user.screen_name api.update_status("@" + username + " " + phrase, in_reply_to_status_id = tweetId) print ("Replied with " + phrase) except tweepy.TweepError as e: print(e.reason)
except StopIteration: break

For the favorite, retweet and follow functions simply replace the reply with “retweet”, “favorite” and “follow”. Then copy and paste the code you wrote above for each one underneath the if statement.

Now we just need to add the submit button and tell it to call the mainFunction() and execute the code for our Twitter Bot. Again, don’t forget to pack it!

submit = Button(root, text, command = mainFunction)

That’s it! After you run your bot script, a GUI application should run and you will be able to reply, retweet, favorite and follow users.

With this Twitter Bot, I have created the account FreeWtr which advocates for use of filtered tap water over bottled water. Here is a screenshot of the profile.

Here is the full source code on Github.