Δημιουργήστε ένα Twitter Bot στο Python χρησιμοποιώντας το Tweepy

Με περίπου το 15% του Twitter να αποτελείται από bots, ήθελα να δοκιμάσω το χέρι μου. Πήγα στο Google πώς να δημιουργήσω ένα bot στο Twitter και μεταφέρθηκα σε μια καθαρά διαμορφωμένη εφαρμογή ιστού. Σας επέτρεψε να δημιουργήσετε ένα bot που θα ήθελε, ακολούθησε ή retweet ένα tweet με βάση μια λέξη-κλειδί. Το πρόβλημα ήταν ότι θα μπορούσατε να δημιουργήσετε μόνο ένα bot για μία λειτουργία.

Αποφάσισα λοιπόν να κωδικοποιήσω ένα bot με την Python και τη βιβλιοθήκη Tweepy.

Ρύθμιση

Πρώτα, κατέβασα το Tweepy. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τον διαχειριστή πακέτων pip.

pip install tweepy

Μπορείτε επίσης να κλωνοποιήσετε το αποθετήριο GitHub εάν δεν έχετε εγκαταστήσει pip.

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

Θα πρέπει να εισαγάγετε Tweepy και Tkinter (για τη διεπαφή GUI).

import tweepyimport Tkinter

Διαπιστευτήρια

Στη συνέχεια, πρέπει να συνδέσουμε τον λογαριασμό μας στο Twitter με το σενάριο Python. Μεταβείτε στη διεύθυνση apps.twitter.com και συνδεθείτε με τον λογαριασμό σας. Δημιουργήστε μια εφαρμογή Twitter και δημιουργήστε ένα κλειδί καταναλωτή, ένα μυστικό καταναλωτή, το Access Token και το Access Token Secret. Τώρα είστε έτοιμοι να ξεκινήσετε!

Κάτω από τις δηλώσεις εισαγωγής, αποθηκεύστε τα διαπιστευτήριά σας μέσα σε μεταβλητές και, στη συνέχεια, χρησιμοποιήστε το δεύτερο μπλοκ κώδικα για έλεγχο ταυτότητας του λογαριασμού σας με 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)

Για να ελέγξετε αν το πρόγραμμά σας λειτουργεί, μπορείτε να προσθέσετε:

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

Αυτό θα πρέπει να επιστρέψει το όνομα του λογαριασμού σας Twitter στην κονσόλα.

Χτίζοντας το Bot

Αυτό το bot προορίζεται για:

  1. Ακολουθήστε όλους που σας ακολουθούν.
  2. Αγαπημένο και Retweet ένα Tweet βάσει λέξεων-κλειδιών.
  3. Απάντηση σε έναν χρήστη με βάση μια λέξη-κλειδί.

Το πρώτο βήμα είναι το πιο εύκολο, μπορείτε απλά να βρόχο μέσα από τους οπαδούς σας και στη συνέχεια να ακολουθήσει ο καθένας.

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

Σε αυτό το σημείο, για να βεβαιωθείτε ότι ο κώδικάς σας λειτουργεί, πρέπει να συνδεθείτε στο Twitter και να παρακολουθήσετε καθώς τα άτομα που παρακολουθείτε αυξάνονται.

Από αυτό το σημείο και μετά, εκτός από τη ρύθμιση και τη συσκευασία των ετικετών στο GUI, κωδικοποιώ τα πάντακάτω από τη συνάρτηση mainFunction().

def mainFunction(): #The code

Ίσως να μπορείτε να δείτε πού πηγαίνει αυτό. Για να προτιμήσουμε ή να retweet ένα tweet μπορούμε να χρησιμοποιήσουμε μια δήλωση για βρόχο και μια δοκιμή όπως αυτή:

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

Για να προτιμήσετε ένα tweet μπορείτε απλά να αντικαταστήσετε το

tweet.retweet()

με

tweet.favorite()

Για να απαντήσουμε σε έναν χρήστη με βάση μια λέξη-κλειδί, πρέπει να αποθηκεύσουμε το όνομα χρήστη και το αναγνωριστικό twitter.

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

Στη συνέχεια, μπορούμε να βρούμε τα tweets και να ενημερώσουμε την κατάστασή μας (tweet) σε κάθε χρήστη.

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

Εάν θέλετε να χρησιμοποιήσετε μόνο το σενάριο μέσω του τερματικού και να ενημερώσετε τον κωδικό κάθε φορά που θέλετε να το εκτελέσετε, τότε έχετε ολοκληρώσει το bot σας.

Δημιουργία GUI

Μπορούμε να δημιουργήσουμε μια εφαρμογή GUI που θα λαμβάνει τις εισόδους μας από τη λέξη-κλειδί που θέλετε να αναζητήσετε και αν θέλετε ή όχι να προτιμάτε ένα tweet.

Πρέπει πρώτα να προετοιμάσουμε το Tkinter και να ρυθμίσουμε τη διάταξη.

Για να δημιουργήσουμε το περιβάλλον εργασίας χρήστη, θα έχουμε επτά ετικέτες για αναζήτηση, αριθμό tweets και απάντηση. Συν τις ερωτήσεις που θέλετε να απαντήσετε, αγαπημένα, να κάνετε retweet του tweet και να ακολουθήσετε τον χρήστη

Να θυμάστε ότι ο παρακάτω κώδικας είναι έξω και πάνω από τον δικό μας 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)

Πρέπει επίσης να συσκευάσουμε κάθε ετικέτα έτσι ώστε να εμφανίζονται και στη συνέχεια να καλέσουμε τη ριζική λειτουργία σε έναν βρόχο έτσι ώστε να παραμείνει στην οθόνη και να μην κλείσει αμέσως.

Το παρακάτω είναι αυτό συσκευασίας τους πρώτους εμφάνιση ετικέτας παρόμοια. Συσκευάστηκα όλες τις ετικέτες κάτω από το 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)

Αυτό είναι! Αφού εκτελέσετε το σενάριο bot σας, θα πρέπει να εκτελεστεί μια εφαρμογή GUI και θα μπορείτε να απαντήσετε, να κάνετε retweet, αγαπημένα και να ακολουθήσετε χρήστες.

Με αυτό το Twitter Bot, δημιούργησα το λογαριασμό FreeWtr που υποστηρίζει τη χρήση φιλτραρισμένου νερού βρύσης πάνω από εμφιαλωμένο νερό. Ακολουθεί ένα στιγμιότυπο οθόνης του προφίλ.

Εδώ είναι ο πλήρης πηγαίος κώδικας στο Github.