Если вы писали в Твиттере о технологиях и использовали хэштеги, такие как «# 100DaysOfCode», «# 30DaysOfCode», «dotnet», «csharp», «python» или любой другой хэштег, связанный с технологиями, вы могли заметить, что ваш Твиты мгновенно ретвитируются некоторыми интересными аккаунтами.

При ближайшем рассмотрении они кажутся ботами, которые ретвитят определенные хэштеги. Теперь вам может быть любопытно. Как создать собственного ретвит-бота? Что ж, сначала давайте начнем с важного вопроса. Зачем делать собственного ретвит-бота?

Зачем делать ретвит-бота в Твиттере?

  • Они делают крутой личный проект, которым можно хвастаться перед работодателями, не опасаясь какого-либо соглашения о неразглашении.
  • Это отличный способ автоматически сделать свое имя или бренд более заметным для других разработчиков в Twitter.
  • Это отличная возможность для обучения.
  • Вы помогаете платформам своих коллег-разработчиков, поскольку люди, скорее всего, начнут подписываться на вашего бота в Twitter.

Если вам нравится какая-либо из этих причин, и вы хотите изучить основы создания ретвит-бота с помощью Python и библиотеки с названием tweepy, то читайте дальше!

Шаг 1. Создайте новую учетную запись Twitter для ретвит-бота и зарегистрируйтесь в программе для разработчиков Twitter.

Мы начнем с создания новой учетной записи Twitter для вашего ретвит-бота. Это помогает добавить изображение профиля, короткую биографию со ссылкой на репозиторий github вашего бота и заголовок профиля, чтобы сделать его более представительным.

После создания новой учетной записи перейдите на платформу разработчика Twitter (войдя в учетную запись своего бота) и зарегистрируйтесь, нажав кнопку Применить в правом верхнем углу. Он задаст вам множество вопросов, от того, для бизнеса или личного использования, а также попросит вас указать номер телефона.

После этого вы сможете получить доступ к панели инструментов.

Шаг 2. Создайте новый проект

Следующий шаг - нажать на эту красивую блестящую кнопку «Создать проект». Он попросит вас назвать проект, спросит, для чего вы используете этот проект, попросит у вас небольшое описание проекта, а затем попросит вас назвать свое приложение (вы можете создать множество приложений для каждого проекта, поэтому назовите его соответствующим образом.) После этого вы должны быть перенаправлены на этот экран:

На этом экране возьмите свой ключ API и секретный ключ API и сохраните его где-нибудь. Примечание. НЕ публикуйте публично свой ключ API и секретный ключ и не передавайте их неавторизованным лицам ни при каких обстоятельствах. Если вы это сделаете, вам следует быстро восстановить свои ключи и секретные ключи.

После этого вы теперь можете видеть свой проект и приложение в меню в левой части экрана. Разверните кнопку и щелкните свое приложение. В моем случае я назвал свое приложение «LQ RT Bot».

Теперь вы должны увидеть этот экран:

Если в разрешениях приложения указано: «Только для чтения», нажмите «Изменить» и убедитесь, что у него есть разрешения на чтение и запись. После этого перейдите в «Ключи и токены» и создайте новый токен доступа и секрет токена доступа.

Отложите их вместе со своим ключом API и секретом ключа API, они понадобятся вам позже. Примечание. НЕ публикуйте свой токен доступа или секретный ключ доступа и не передавайте их неавторизованным лицам. Если вы подозреваете, что ваш токен / секрет был взломан, создайте их заново.

Шаг 3. Настройка виртуальной среды

Следующим шагом в создании ретвит-бота является настройка. Мы будем использовать удобный модуль виртуальной среды Python, чтобы убедиться, что все остается согласованным, на случай, если вы когда-нибудь захотите загрузить его на сервер. Откройте свой любимый командный терминал (я делаю это в Windows, поэтому все будет работать в соответствии с командами терминала Windows CMD. Обратитесь к этой странице, чтобы узнать, что вам нужно для Mac или Linux), перейдите туда, где вы хотите начать кодирование и убедитесь, что у вас есть venv, выполнив команду:

python -m pip install --user virtualenv

Если у вас уже установлена ​​виртуальная среда, выполните эту команду:

python -m venv venv

Это должно создать папку с именем «venv» (я знаю, что было глупо писать venv дважды в последней команде, вторая называет папку.) Внутри этой папки находятся еще три папки и файл конфигурации. Теперь нам просто нужно активировать виртуальную среду. Если вы используете Windows Powershell, пропустите этот шаг, но если вы используете Windows CMD, выполните:

powershell

Это позволит вам использовать возможности PowerShell при использовании обычной командной строки Windows. Теперь мы можем выполнить команду:

venv/Scripts/activate

Если у вас все получилось, теперь в начале каждой строки должна стоять «(venv)».

Шаг 4. Установка зависимостей и создание файлов зависимостей

Следующим шагом после активации venv является окончательная установка наших зависимостей. Это делается путем выполнения команды:

python -m pip install tweepy

Это установит tweepy, библиотеку python для легкого доступа к Twitter API. Мы также продолжим и установим python-dotenv, выполнив команду:

python -m pip install python-dotenv

Мы будем использовать python-dotenv для хранения некоторых переменных среды. Для этого мы могли бы использовать скрипт активации venv, но для простоты в этом уроке мы будем использовать именно его.

После установки ваших зависимостей мы сохраним их в файле с именем requirements.txt с помощью команды:

pip freeze > requirements.txt

Это сделает так, что вам больше не придется вручную загружать все свои зависимости одну за другой, если вы решите развернуть это где-то еще, помимо того, что это будет довольно хорошей практикой.

Шаг 5. Время писать код

Теперь пришло время, которого мы все ждали, время написать код. Откройте свой любимый инструмент кодирования и откройте папку, которую мы создали для этого проекта. В моем случае я буду использовать Visual Studio Code.

Создайте файл с именем .env в базовом каталоге проекта. Помните те ключи API и токены доступа, которые мы отложили? Здесь мы их и будем размещать. Назовите их соответствующим образом, затем поставьте знак равенства и значение.

In .env
twitter_api_key=<YOUR API KEY HERE>
twitter_api_secret=<YOUR API SECRET HERE>
twitter_access_token=<YOUR ACCESS TOKEN HERE>
twitter_access_token_secret=<YOUR ACCESS TOKEN SECRET HERE>

После этого мы создадим файл с именем bot.py и будем использовать его для написания нашего кода для аутентификации / входа в систему.

Начнем с импорта наших зависимостей и переменных среды. Импорт таких переменных среды необязателен, но в результате он делает код немного более читаемым и чистым.

in bot.py
# import dependencies
import tweepy
import os
from dotenv import load_dotenv
# load our .env file to make use of the environment variables
load_dotenv()
# import and assign our environment variables
API_KEY = os.getenv('twitter_api_key')
API_SECRET = os.getenv('twitter_api_secret')
ACCESS_TOKEN = os.getenv('twitter_access_token')
TOKEN_SECRET = os.getenv('twitter_token_secret')

Затем мы собираемся создать экземпляр обработчика аутентификации tweepy, используя ключ api и секрет api. После этого мы установим токен доступа в нашем обработчике аутентификации, используя наш токен доступа и секрет токена, чтобы завершить процесс аутентификации. Как только это будет сделано, мы сможем создать новый объект API-интерфейса tweepy, используя созданный нами объект обработчика аутентификации.

in bot.py
# import dependencies
import tweepy
import os
from dotenv import load_dotenv
# load our .env file to make use of the environment variables
load_dotenv()
# import and assign our environment variables
API_KEY = os.getenv('twitter_api_key')
API_SECRET = os.getenv('twitter_api_secret')
ACCESS_TOKEN = os.getenv('twitter_access_token')
TOKEN_SECRET = os.getenv('twitter_token_secret')
# instantiate oauth handler and set access token
twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET)
twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET)
# instantiate tweepy api object using the authentication handler object
twitter_api = tweepy.API(twitter_oauth)

Теперь вам может быть интересно, как узнать, все ли вы сделали правильно до сих пор. Мы можем протестировать, сообщив нам об этом с помощью нашего нового объекта API-интерфейса tweepy. У объекта API есть метод с именем «verify_credentials», который либо вернет кучу данных с информацией о том, какой пользователь вошел в систему, либо вернет ошибку. Поместите это в блок try с блоком except, улавливающим «tweepy.TweepError», за которым следует последний блок except, чтобы уловить что-нибудь еще, что могло пойти не так.

in bot.py
# import dependencies
import tweepy
import os
from dotenv import load_dotenv
# load our .env file to make use of the environment variables
load_dotenv()
# import and assign our environment variables
API_KEY = os.getenv('twitter_api_key')
API_SECRET = os.getenv('twitter_api_secret')
ACCESS_TOKEN = os.getenv('twitter_access_token')
TOKEN_SECRET = os.getenv('twitter_token_secret')
# instantiate oauth handler and set access token
twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET)
twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET)
# instantiate tweepy api object using the authentication handler object
twitter_api = tweepy.API(twitter_oauth)
# attempt credential verification. prints exception if something is wrong
try:
  print(twitter_api.verify_credentials())
  print("Successfully logged in")
except tweepy.TweepError as e:
  print(e)
except Exception as e:
  print(e)

Теперь мы можем запустить bot.py и посмотреть, какие результаты мы получим. Если все прошло успешно, вы должны получить огромное сообщение, которое расскажет вам все об учетной записи, в которую вошел tweepy. Если что-то не так, консоль должна сообщить вам, что происходит (обычно это связано с неправильным ключом api, секретом, токеном и т. Д.).

Если ваша аутентификация прошла успешно, мы можем перейти к захватывающей части: получать твиты и ретвитнуть их.

Создайте новый файл с именем streamlistener.py и начните с импорта tweepy. В этом файле мы будем хранить всю нашу логику для обработки каждого твита. После этого мы создадим новый класс с именем «StreamListener», и он будет принимать параметр «tweepy.StreamListener».

in streamlistener.py
# import dependencies
import tweepy
# create new class "StreamListener" 
# takes in tweepy.StreamListener as a parameter
class StreamListener(tweepy.StreamListener):
  def __init__(self, api):
    self.api = api
    self.me = api.me()

Далее мы собираемся определить две функции: on_status и on_error. Функция on_status будет содержать логику того, что мы делаем с каждым твитом, который мы получаем от слушателя потока. Функция on_error будет содержать логику того, что произойдет, если что-то пойдет не так.

in streamlistener.py
# import dependencies
import tweepy
# create new class "StreamListener" 
# takes in tweepy.StreamListener as a parameter
class StreamListener(tweepy.StreamListener):
  def __init__(self, api):
    self.api = api
    self.me = api.me()
  
  # the function containing the logic on what to do for each tweet
  def on_status(self, tweet):
    # We only want the bot to retweet original tweets, not replies.
    # We also don't want the bot to retweet itself
    if tweet.in_reply_to_status_id is not None or \
      tweet.use.id == self.me.id:
      return
    # If we haven't retweeted this tweet yet, retweet it   
    if not tweet.retweeted:
      try: 
        tweet.retweet()
        print("Tweet retweeted successfully")
      except Exception as e:
        print(e)
  # the function containing the logic in case there is an error  
  def on_error(self, status):
    print(f"Error while retweeting: {status}")

В функции on_status мы хотим игнорировать любые твиты, являющиеся ответами на другие твиты, и мы хотим, чтобы бот игнорировал свои собственные ретвиты. Для этого мы просто проверяем эти условия и просто «возвращаем», если они верны. После этого мы проверяем, ретвитнули ли мы этот твит, и если нет, мы используем метод retweet (), доступный для объекта твита, для ретвита этого твита.

Кстати, некоторые боты также добавляют твит в избранное, когда ретвитят его. Если вам также нужна эта функциональность, вы просто проверяете, добавили ли вы твит в избранное, так же, как вы проверяете ретвиты, а затем используете метод favourite (), доступный для объекта твита.

  # the function containing the logic on what to do for each tweet
  def on_status(self, tweet):
    # We only want the bot to retweet original tweets, not replies.
    # We also don't want the bot to retweet itself
    if tweet.in_reply_to_status_id is not None or \
      tweet.use.id == self.me.id:
      return
    # If we haven't retweeted this tweet yet, retweet it   
    if not tweet.retweeted:
      try: 
        tweet.retweet()
        print("Tweet retweeted successfully")
      except Exception as e:
        print(e)
    # If we haven't favorited this tweet yet, favorite it
    if not tweet.favorited:
      try:
        tweet.favorite()
        print("Tweet favorited successfully")
      except Exception as e:
        print(e)

Теперь, когда мы закончили работу с этим файлом, мы можем использовать его в нашем файле bot.py. Импортируйте класс StreamListener и создайте экземпляр нового объекта StreamListener. Передайте объект API Twitter в качестве параметра. После этого мы собираемся создать экземпляр объекта tweepy.Stream, передав параметр auth нашего Twitter API и новый объект StreamListener.

После этого мы используем метод filter (), доступный для класса tweepy.Stream, передавая 'track = [«# 100DaysOfCode», «#AnotherHashtagWeMightWannaTrack»]', чтобы сигнализировать, что мы хотим отслеживать эти конкретные хэштеги / результаты поиска и ' languages ​​= [«en», «MaybeSomeOtherLanguage»] ', чтобы указать, что нам нужны твиты только на английском и, возможно, на другом конкретном языке. Ваш bot.py теперь должен выглядеть примерно так:

in bot.py
# import dependencies
import tweepy
import os
from dotenv import load_dotenv
from streamlistener import StreamListener <-- Make sure to have this
# load our .env file to make use of the environment variables
load_dotenv()
# import and assign our environment variables
API_KEY = os.getenv('twitter_api_key')
API_SECRET = os.getenv('twitter_api_secret')
ACCESS_TOKEN = os.getenv('twitter_access_token')
TOKEN_SECRET = os.getenv('twitter_token_secret')
# instantiate oauth handler and set access token
twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET)
twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET)
# instantiate tweepy api object using the authentication handler object
twitter_api = tweepy.API(twitter_oauth)
# attempt credential verification. prints exception if something is wrong
try:
  print(twitter_api.verify_credentials())
  print("Successfully logged in")
except tweepy.TweepError as e:
  print(e)
except Exception as e:
  print(e)
# instantiate a StreamListener object
tweets_listener = StreamListener(twitter_api)
# instantiate a tweepy.Stream object
tweet_stream = tweepy.Stream(twitter_api.auth, tweets_listener)
# Use the filter method
tweet_stream.filter(track=["#100DaysOfCode", "#30DaysOfCode"], languages=["en"])

На этом этапе вы должны иметь возможность запустить «python bot.py» в своем терминале, и он войдет в систему и начнет ретвитить и добавлять в избранное.

Заключение

Это лишь верхушка айсберга, когда дело доходит до того, что вы можете делать с этим ботом. Вы можете добавить дополнительную логику к методу on_status StreamListener, чтобы выполнять такие действия, как фильтрация других пользователей-ботов или определение на основе чьего-либо профиля, хотите ли вы ретвитнуть его твит (пытаясь реализовать фильтр, который пытается идентифицировать описания, принадлежащие злонамеренным пользователям) .

Если вы нашли это руководство особенно полезным, не стесняйтесь заглядывать в @LiquetBot в Твиттере, Репозиторий Liquet Bot на Github, Мой Ko-Fi или подписывайтесь на меня в среде, чтобы увидеть больше подобных статей. Для получения дополнительной информации о tweepy ознакомьтесь с учебником, который я использовал, чтобы создать своего собственного бота, или посетите официальный сайт tweepy! Спасибо, что прочитали мою статью!