Створіть Twitter-бота в Python, використовуючи Tweepy

Оскільки близько 15% Twitter складається з ботів, я хотів спробувати свої сили. Я погуглив, як створити Twitter-бота, і потрапив до чисто викладеної веб-програми. Це дозволило вам створити бота, який хотів би підписати чи підписати твіт на основі ключового слова. Проблема полягала в тому, що ви могли створити лише одного бота для однієї функції.

Тож я вирішив сам кодувати бота за допомогою Python та бібліотеки Tweepy.

Налаштування

Спочатку я завантажив Tweepy. Ви можете зробити це за допомогою менеджера пакунків pip.

pip install tweepy

Ви також можете клонувати сховище GitHub, якщо у вас не встановлено pip.

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

Вам потрібно буде імпортувати Tweepy та Tkinter (для графічного інтерфейсу).

import tweepyimport Tkinter

Повноваження

Далі нам потрібно пов’язати наш акаунт у Twitter із нашим сценарієм Python. Перейдіть на сторінку apps.twitter.com і увійдіть за допомогою свого облікового запису. Створіть програму Twitter і створіть ключ споживача, секрет споживача, маркер доступу та секрет маркера доступу. Тепер ви готові розпочати!

Під операторами імпорту зберігайте свої облікові дані в змінних, а потім використовуйте другий блок коду для автентифікації вашого облікового запису за допомогою 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 у консолі.

Будівництво бота

Цей бот призначений для:

  1. Слідуйте за всіма, хто слідує за вами.
  2. Улюбіть і ретвітуйте твіт за ключовими словами.
  3. Відповідь користувачеві на основі ключового слова.

Крок один є найпростішою, ви просто петлею через ваші послідовник , а потім слідувати кожним з них.

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

На цьому етапі, щоб переконатися, що ваш код працює, вам слід увійти в Twitter і спостерігати, як збільшуються люди, за якими ви стежите.

З цього моменту, окрім налаштування та упаковки міток у графічному інтерфейсі, я кодую всепід функцією mainFunction().

def mainFunction(): #The code

Ви можете побачити, куди це йде. Для того, щоб вподобати чи повторити твіт, ми можемо використати цикл for і сформулювати такий вираз:

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.retweet()

з

tweet.favorite()

Щоб відповісти користувачеві на основі ключового слова, нам потрібно зберегти ім’я користувача та ідентифікатор Twitter.

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

Потім ми можемо прокручувати твіти та оновлювати свій статус (твіт) для кожного користувача.

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

Якщо ви хочете використовувати сценарій лише через термінал і оновлювати код кожного разу, коли ви хочете його запустити, тоді ви завершили роботу з вашим ботом.

Створення графічного інтерфейсу

Ми можемо створити програму з графічним інтерфейсом, яка буде вводити введені ключові слова, за якими ви хотіли б шукати, і чи хотіли б ви вподобати твіт.

Спочатку нам потрібно ініціалізувати Tkinter і налаштувати макет.

Для створення нашого користувальницького інтерфейсу ми будемо мати сім міток для пошуку, кількості твітів та відповіді. Плюс на запитання, які ви хочете відповісти, улюблене, повторно написати твіт і підписатися на користувача.

Пам'ятайте , що нижче код зовні і вище Наші 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)

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.