Всем привет! Сегодня мы узнаем, как быстро создать Twitter-бота, чтобы троллить своих друзей.

Прежде всего, если вы хотите попрактиковаться в испанском, то вот - это забавное видео, в котором я расскажу вам, что произошло, когда я троллил своих друзей с помощью этого бота, а затем последовало руководство. В противном случае продолжайте читать этот пост.
Чтобы подписаться на этот пост в блоге, вам понадобятся три вещи:
- Самая последняя версия Python (рекомендую использовать Anaconda)
- Учетная запись разработчика Twitter. Вы можете получить учетную запись разработчика с существующей учетной записью Twitter, но имейте в виду, что тогда бот будет публиковать твиты из вашей учетной записи. (Это действительно то, что вы хотите?)
- Облачный компьютер. Для этого бота я использовал экземпляр t2.micro EC2 от AWS, но вы можете использовать то, что захотите.
Создание скрипта Python
Полный код доступен на GitHub, но давайте рассмотрим основные функции этого скрипта.
Бот будет работать так: как только одна из наших жертв напишет твит, бот немедленно ответит новым твитом, высмеивающим их. Так, например, если наша жертва скажет «Мне нравится тост с авокадо», бот ответит «i LiKe AvOcAdO tOaSt» мемом с Губкой Бобом.

Мы собираемся использовать Tweepy, библиотеку Python для подключения к Twitter API. Во-первых, нам нужно пройти аутентификацию следующим образом:
# Authenticate through the API auth = tweepy.OAuthHandler(api_key, api_secret_key) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth)
Затем нам нужно создать два списка: один с именами пользователей наших жертв, а другой - с номерами пользователей наших жертв. Я получил идентификационные номера пользователей с помощью этой страницы, так как у меня было всего несколько жертв, но вы также можете Pythonизировать этот шаг.
Затем я создал две функции: text_clean и memeficator. Первый выполняет базовую очистку (удаляет странные символы, упоминания, хэштеги и т. Д.), А второй возвращает насмешливо измененный твит и изображение (мем Губка Боб).
Наконец, я создал listener класс, чтобы следить за новыми твитами, сделанными нашими жертвами. Вот упрощенная версия кода:
class listener(StreamListener):
def on_status(self, data):
tweet = data.text
tweet_id = data.id
user = data.user.screen_name
# Avoid tweets not made by of of the victims
if user.lower() not in victims or "RT @" in tweet:
pass
else:
reply, img = memeficator(tweet)
# If user didn't tweet any text
if reply is None:
pass
else:
reply = f"@{user} {reply}"
api.update_with_media(img, reply, in_reply_to_status_id = tweet_id)
return(True)
twitterStream = Stream(auth, listener())
twitterStream.filter(follow=victims_ids)
Самая важная часть этого кода - строка api.update_with_media(img, reply, in_reply_to_status_id = tweet_id). Это позволит нам отправить изображение нашей жертве. Во-вторых, используя функцию фильтра, twitterStream.filter(follow=victims_ids) мы сможем получать только твиты, относящиеся к нашим жертвам, а не весь твиттер-стих.
Если вы посмотрите исходный код на GitHub, вы заметите, что я включил try-catch операторов, которые необходимы для того, чтобы наш код работал до конца времен.
Запуск скрипта Python на экземпляре EC2
Код творит чудеса, но теперь мы хотим, чтобы он работал 24 часа 7 дней в неделю, чтобы он высмеивал наших жертв, как только они пишут твиты. Делать это на нашем персональном компьютере не имеет смысла, поэтому для этого мы воспользуемся облачным компьютером.
Во-первых, вам, скорее всего, потребуется загрузить локальные файлы на облачный компьютер. Вы можете сделать это в терминале с помощью следующей команды:
scp -i key.pem my_script.py [email protected]:~/.
Вы можете указать каталог в своем экземпляре EC2 сразу после двоеточия, но в этом случае мы собираемся загрузить файл в основной каталог.
Теперь, если мы хотим, чтобы наш код выполнялся даже после выхода из экземпляра EC2, мы можем использовать утилиту с именемscreen. Вот - полное вступление к нему, но команды, которые вам понадобятся немедленно, следующие:
screen (для создания нового сеанса экрана)
python3 my_script.py (чтобы запустить код)
control + A + D (для отключения от сеанса код все еще выполняется)