Opret en Twitter Bot i Python ved hjælp af Tweepy

Da ca. 15% af Twitter bestod af bots, ville jeg prøve min hånd på det. Jeg googlede, hvordan man opretter en Twitter-bot, og jeg blev bragt til en rent udformet webapp. Det tillod dig at oprette en bot, der gerne vil, følger eller retweet en tweet baseret på et nøgleord. Problemet var, at du kun kunne oprette en bot til en funktion.

Så jeg besluttede selv at kode en bot med Python og Tweepy-biblioteket.

Opsætning

Først downloadede jeg Tweepy. Du kan gøre dette ved hjælp af pip-pakkehåndtering.

pip install tweepy

Du kan også klone GitHub-arkivet, hvis du ikke har pip installeret.

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

Du skal importere Tweepy og Tkinter (til GUI-grænsefladen).

import tweepyimport Tkinter

Legitimationsoplysninger

Dernæst skal vi linke vores Twitter-konto til vores Python-script. Gå til apps.twitter.com og log ind med din konto. Opret en Twitter-applikation, og generer en forbrugernøgle, forbrugerhemmelighed, adgangstoken og adgangstokenhemmelighed. Nu er du klar til at begynde!

Gem dine legitimationsoplysninger i dine importopgørelser inden for variabler, og brug derefter den anden blok kode til at godkende din konto med 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)

For at kontrollere, om dit program fungerer, kan du tilføje:

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

Dette skal returnere navnet på din Twitter-konto i konsollen.

Opbygning af Bot

Denne bot er beregnet til at:

  1. Følg alle, der følger dig.
  2. Foretrukne og retweet en Tweet baseret på nøgleord.
  3. Svar til en bruger baseret på et nøgleord.

Trin et er det nemmeste, du løber simpelthen gennem dine tilhængere og følger derefter hver enkelt.

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

På dette tidspunkt for at sikre dig, at din kode fungerer, skal du logge på Twitter og se, når de mennesker, du følger, stiger.

Fra dette tidspunkt koder jeg foruden at konfigurere og pakke etiketterne i GUI'et altunder funktionen mainFunction().

def mainFunction(): #The code

Du kan muligvis se, hvor dette går hen. For at favoritere eller retweet en tweet kan vi bruge en for loop og en prøveerklæring som denne:

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

For at favorisere en tweet kan du blot erstatte

tweet.retweet()

med

tweet.favorite()

For at svare til en bruger baseret på et nøgleord er vi nødt til at gemme brugernes brugernavn og twitter-id.

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

Vi kan derefter løbe gennem tweets og opdatere vores status (tweet) for hver bruger.

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

Hvis du kun vil bruge scriptet gennem terminalen og opdatere koden hver gang du ønsker at køre det, har du afsluttet din bot.

Oprettelse af GUI

Vi kan oprette en GUI-applikation, der tager vores input af det nøgleord, du gerne vil søge efter, og om du vil favorisere en tweet eller ej.

Vi skal først initialisere Tkinter og opsætte layoutet.

For at oprette vores brugergrænseflade skal vi have syv etiketter til søgning, antal tweets og svar. Plus de spørgsmål, du vil svare, favorit, retweet tweeten og følg brugeren.

Husk koden nedenfor er uden for og over vores 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)

Vi skal også pakke hver etiket, så de vises, og derefter kalde rodfunktionen i en sløjfe, så den forbliver på skærmen og ikke straks lukker.

Følgende er, hvordan pakning af den første etiket ser ud. Jeg pakket alle etiketterne under 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)

Det er det! Når du har kørt dit bot-script, skal et GUI-program køre, og du vil være i stand til at svare, retweet, favorit og følge brugere.

Med denne Twitter Bot har jeg oprettet kontoen FreeWtr, som fortaler for brug af filtreret ledningsvand over flaskevand. Her er et screenshot af profilen.

Her er den fulde kildekode på Github.