Узнайте, как использовать Python и функцию AWS Lambda для бесплатной разработки собственного бота для Twitter.
Оглавление
- Что такое Twitter-бот?
- Какие есть альтернативы созданию бота для Twitter?
- Как создать бота для Twitter с помощью Python и AWS Lambda
- Создать учетную запись разработчика Twitter
- Создать приложение Twitter
- Разработать бота на локальном компьютере - Разверните своего бота как функцию AWS Lambda
- Заключение
15% пользователей Твиттера на самом деле могут быть ботами. Компании, бренды и влиятельные лица используют ботов для управления своими учетными записями в Twitter. Даже я не так давно сделал свой.
Если вы здесь, я думаю, вы хотите сделать его сами. Эта статья покажет вам, как это сделать. Вы узнаете о различных вариантах создания бесплатного бота для Twitter. А если у вас есть технический опыт, вы научитесь программировать и развертывать бота с помощью Python и AWS Lambda.
К концу этой статьи вы узнаете:
- Что такое бот Twitter
- Какие доступные варианты можно сделать Twitter-ботом?
- Как разработать бота для Twitter с использованием Python
- Как развернуть собственного бота в качестве функции AWS Lambda
Давай приступим к работе!
Что такое Twitter-бот?
Это аккаунт Twitter, управляемый через Twitter API, который выполняет действия в автоматическом режиме. Большая часть того, что вы регулярно делаете через графический интерфейс Twitter, также доступно через его API. Например, вы можете автоматизировать отправку твитов в запланированные часы, ответы на твиты с заранее заданным текстом или подписку / отказ от подписки на другие учетные записи.
Несмотря на то, что API Twitter довольно гибкий, есть ограничения, о которых следует помнить. Согласно правилам автоматизации Твиттера, вот что умеет ваш бот:
- Твитнуть полезную информацию
- Отвечайте пользователям, которые взаимодействуют с вашим контентом
- Отвечайте на личные сообщения
- Пробуйте новое, не нарушая правил
И вот что ваш бот не может:
- Нарушить любое из этих правил
- Злоупотреблять API Twitter или пытаться обойти ограничения скорости.
- Попробуйте автоматизировать его поведение с помощью других механизмов, помимо Twitter API.
- Спамить пользователей посредством твитов или нежелательных прямых сообщений
Затем вы увидите доступные варианты создания собственного бота.
Какие есть альтернативы созданию бота для Twitter?
В зависимости от того, что вы хотите сделать, у вас есть несколько вариантов создания бота. Некоторые из них требуют небольших навыков программирования. Другим требуется опыт развертывания контейнеров Docker. Что касается затрат, вы найдете бесплатные и платные альтернативы.
Вот самые популярные:
Платформы автоматизации социальных сетей. Если ваша единственная цель - отправлять твиты по фиксированному расписанию, вы можете использовать эту опцию. Такие платформы, как Buffer и SocialOomph предлагают услуги по автоматическому планированию твитов.
- Плюсы: отсутствие кода, очень простая настройка.
- Минусы: Доступно только через платную подписку (Buffer) или ограниченный бесплатный план (SocialOomph).
Скрипт Google Амита Агарвала: есть популярный скрипт Google, который используется для создания ботов Twitter. Он позволяет автоматизировать создание твитов, отправку прямых сообщений и ретвитов с заранее заданной скоростью. Но вам нужно будет предоставить ему доступ к данным вашего аккаунта Google. Вот хороший урок по этому поводу.
- Плюсы: бесплатно, с минимальным кодом, легко настраивается.
- Минусы: требуется доступ к данным вашего аккаунта Google, вероятно, его сложно настроить за пределами предопределенного поведения, отсутствует документация.
Разверните бота на сервере. Если у вас есть технический опыт, вы можете написать своего бота на предпочитаемом языке программирования и развернуть его на сервере. Есть хорошие учебники по Python и NodeJS.
- Плюсы: полностью настраиваемый, доступен бесплатно или очень дешево.
- Минусы: сложно настроить
Разверните бота как бессерверную функцию: если у вас есть некоторый опыт программирования, вы можете пойти по этому пути. Это позволит вам создать бота на таких языках, как Python или NodeJS, и развернуть его как бессерверную функцию.
- Плюсы: полностью настраиваемый, бесплатный для многих случаев использования (с использованием функции AWS Lambda).
- Минусы: настройка средней сложности.
Это варианты, которые вы можете использовать для создания своего бота. Ни один из них не обязательно лучше других. Основывайте свой выбор на том, что вы хотите делать с ботом, на своем опыте программирования и доступном бюджете.
В следующем разделе вы пройдете через последний описанный вариант. Вы узнаете, как бесплатно разработать и развернуть простого бота Twitter с помощью Python и функции AWS Lambda.
Примечание. Чтобы изучить это руководство, вы должны знать основы функций AWS Lambda и иметь базовые знания Python.
Чтобы быстро ознакомиться с функциями AWS Lambda, прочтите Введение в статью.
Чтобы узнать об основах Python, загляните в эти ресурсы
Как создать Twitter-бота с помощью Python и AWS Lambda
В этом разделе вы разработаете бота для Twitter с помощью Python и развернете его как функцию AWS Lambda. Он будет следовать простому правилу: каждый день в 10.00 (UTC) он будет публиковать случайный твит из заранее определенного списка. По завершении обучения вы можете изменить логику бота в соответствии со своими потребностями.
Чтобы создать своего бота, вам нужно выполнить следующие действия:
- Создайте учетную запись разработчика Twitter
- Создать приложение Twitter
- Развивайте своего бота локально
- Разверните своего бота как функцию AWS Lambda
Наконец, прежде чем продолжить, у вас должны быть следующие вещи:
- Аккаунт Twitter, который вы хотите использовать в качестве бота.
- Доступ к AWS-аккаунту
- Python› = 3.8
- Git
- Докер
- Если вы используете Windows, вам понадобится WSL.
Создайте учетную запись разработчика Twitter
Начните с подачи заявки на доступ к учетной записи разработчика здесь.
На Какова ваша основная причина использования инструментов разработчика Twitter? выберите в разделе Создание бота.
Заполните свои данные в Это ты, верно? и продолжаем. В следующем блоке Как вы будете использовать Twitter API или данные Twitter? немного утомительно. Вам нужно будет в нескольких местах описать, как вы планируете использовать API.
Вот пример того, как я заполнил описание Вашими словами:
Используйте описание, отличное от приведенного выше. Возможно, Twitter автоматически проверяет очень похожие описания и может задержать ваше приложение, приняв его за спам.
Затем в подзаголовке Особенности выберите Да для Планируете ли вы анализировать данные Twitter? и Будет ли ваше приложение использовать функции твитов, ретвитов, лайков, подписок или прямых сообщений? вопросы. Для остальных выберите Нет.
После того, как вы закончите свою заявку, вам будет предложено проверить детали и принять соглашение разработчика Twitter.
Наконец, вам нужно будет подтвердить свой адрес электронной почты, и вы сможете создать новое приложение, как только ваша учетная запись будет одобрена. Это может занять до 48 часов.
Перейдите к следующему разделу, когда получите доступ к порталу разработчиков Twitter.
Создать приложение Twitter
После утверждения вашей учетной записи разработчика Twitter вы получите электронное письмо, перенаправляющее вас на Портал разработчиков Twitter. Вы выберете имя для своего приложения и получите ключи API. Затем вы будете перенаправлены в настройки вашего приложения.
В настройках приложения Измените свои разрешения для приложения.
Измените свои разрешения для приложений с Чтение на Чтение и запись и сохраните изменения.
После обновления разрешений приложения. Перейдите в Ключи и жетоны. Здесь вам нужно будет повторно сгенерировать ключ API и секрет и сгенерировать токен доступа и секрет.
Эти учетные данные понадобятся вам для автоматического доступа к вашей учетной записи Twitter. Храните их в надежном месте.
Вот и все. Все готово. Пришло время заставить вашего бота работать на вашем локальном компьютере.
Разработайте своего бота на своем локальном компьютере
Чтобы быстро протестировать и внести изменения, вы будете работать над своим ботом локально. Как только вы будете довольны его поведением, вы запакируете его и развернете как функцию AWS Lambda. Чтобы упаковать своего бота, вы воспользуетесь репозиторием с некоторыми полезными скриптами.
Выполните следующие действия, чтобы настроить локальную среду разработки:
1. Клонируйте этот репозиторий на свой локальный компьютер.
2. Перейдите в корневой каталог проекта, создайте виртуальную среду и активируйте ее:
$ python3 -m venv venv
$ source venv/bin/activate
3. Установите необходимые библиотеки в вашу виртуальную среду с помощью pip:
(venv) $ pip install -r requirements.txt
4. Создайте файл с именем .env
в корневом каталоге вашего проекта. Поместите свои ключи и токены приложения Twitter:
ACCESS_TOKEN=<YOUR_ACCESS_TOKEN_HERE>
ACCESS_TOKEN_SECRET=<YOUR_ACCESS_TOKEN_SECRET_HERE>
CONSUMER_KEY=<YOUR_CONSUMER_KEY_HERE>
CONSUMER_SECRET=<YOUR_CONSUMER_SECRET_KEY_HERE>
К настоящему моменту структура вашего проекта должна выглядеть следующим образом:
twitter-bot-python-lambda/
├── venv/
│
├── src/
│ ├── lambda_function.py
│ └── tweets.csv
│
├── .env
├── buildpackage.sh
├── createlambdalayer.sh
├── entrypoint.py
├── LICENSE
├── README.md
└── requirements.txt
Вот назначение каждого из этих файлов:
venv/
: Виртуальная среда с библиотеками, которые требуются вашему проектуsrc/lambda_function.py
: сценарий Python, содержащий логику вашего бота. Вы упакуйте этот код и загрузите его в функцию AWS Lambda.src/tweets.csv
: Список предустановленных твитов, которые ваш бот использует для публикации. Это также входит в пакет, который вы загрузите в функцию Lambda..env
: файл, содержащий ваши учетные данные для аутентификации Twitter API. Он используется для локального тестирования вашего бота.buildpackage.sh
: служебная функция, которая упаковывает содержимоеsrc/
в файл с именемlambda_function.zip
. Вы загрузите этот файл в функцию Lambda.createlambdalayer.sh
: служебная функция, которая упаковывает библиотеки, указанные в требованиях, в файл с именемlayer.zip
. Вы загрузите этот файл на слой лямбда.entrypoint.py
: сценарий Python, который вы будете использовать для локального тестирования своего бота.requirements.txt
: Стандартный способ указания библиотек, необходимых вашему проектуLICENSE
иREADME.md
: Лицензия и описание репозитория
Самый важный файл в репозитории - lambda_function.py
. В нем вы определите логику для своего бота:
import os
import random
import json
from pathlib import Path
import tweepy
import csv
ROOT = Path(__file__).resolve().parents[0]
def get_tweet(tweets_file, excluded_tweets=None):
"""Get tweet to post from CSV file"""
with open(tweets_file) as csvfile:
reader = csv.DictReader(csvfile)
possible_tweets = [row["tweet"] for row in reader]
if excluded_tweets:
recent_tweets = [status_object.text for status_object in excluded_tweets]
possible_tweets = [tweet for tweet in possible_tweets if tweet not in recent_tweets]
selected_tweet = random.choice(possible_tweets)
return selected_tweet
def lambda_handler(event, context):
print("Get credentials")
consumer_key = os.getenv("CONSUMER_KEY")
consumer_secret = os.getenv("CONSUMER_SECRET")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
print("Authenticate")
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
print("Get tweet from csv file")
tweets_file = ROOT / "tweets.csv"
recent_tweets = api.user_timeline()[:3]
tweet = get_tweet(tweets_file)
print(f"Post tweet: {tweet}")
api.update_status(tweet)
return {"statusCode": 200, "tweet": tweet}
Это код lambda_function.py
. Он состоит из трех частей: импорт библиотек, функция get_tweets
и функция lambda_handler
.
В первой части вы импортируете необходимые библиотеки. Помимо некоторых стандартных библиотек, вы импортируете tweepy
, который вы будете использовать для взаимодействия с Twitter API. Затем вы сохраняете путь, по которому lambda_function.py
находится в переменной с именем ROOT
.
import os
import random
import json
from pathlib import Path
import tweepy
import csv
ROOT = Path(__file__).resolve().parents[0]
Затем вы определяете get_tweet
. Он принимает два параметра и возвращает текст, который ваш бот будет твитнуть. Посмотрите, как это работает:
def get_tweet(tweets_file, excluded_tweets=None):
"""Get tweet to post from CSV file"""
with open(tweets_file) as csvfile:
reader = csv.DictReader(csvfile)
possible_tweets = [row["tweet"] for row in reader]
if excluded_tweets:
recent_tweets = [status_object.text for status_object in excluded_tweets]
possible_tweets = [tweet for tweet in possible_tweets if tweet not in recent_tweets]
selected_tweet = random.choice(possible_tweets)
return selected_tweet
get_tweet
возвращает текст, который ваш бот напишет в Твиттере. Его первый параметр tweets_file
- это путь к csv
файлу, в котором вы храните список предопределенных твитов. Второй, excluded_tweets
, представляет собой список твитов, поступающих из Twitter API, который вы используете, чтобы не писать в Твиттере самые свежие твиты.
Наконец, вы определяете функцию lambda_handler
:
def lambda_handler(event, context):
print("Get credentials")
consumer_key = os.getenv("CONSUMER_KEY")
consumer_secret = os.getenv("CONSUMER_SECRET")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
print("Authenticate")
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
print("Get tweet from csv file")
tweets_file = ROOT / "tweets.csv"
recent_tweets = api.user_timeline()[:3]
tweet = get_tweet(tweets_file)
print(f"Post tweet: {tweet}")
api.update_status(tweet)
return {"statusCode": 200, "tweet": tweet}
lambda_handler
выполняется при срабатывании функции AWS Lambda. Он получает учетные данные Twitter из переменных среды, аутентифицирует вашего бота с помощью Twitter API, получает последние 3 твита и публикует твит, полученный get_tweet
.
Остальные файлы подробно разбирать не нужно. Но не стесняйтесь взглянуть на них самостоятельно, если вам интересно.
Теперь, когда все настроено, вам просто нужно выполнить этот рабочий процесс разработки:
- Определите логику своего бота в
lambda_function.py
- Протестируйте изменения, выполнив
$ python entrypoint.py
из корневого каталога вашего проекта.
Если вас устраивает поведение бота, упакуйте код:
- Добавьте любые дополнительные библиотеки, которые вы использовали в
requirements.txt
- Запустите
sh createlambdalayer.sh 3.8
из корневого каталога вашего проекта. Он упакует библиотеки вrequirements.txt
для среды выполнения Python 3.8+ вlayer.zip
- Запустите
sh buildpackage.sh
из корневого каталога вашего проекта. Он создаст zip-файл с кодом для вашей лямбда-функции с именемlambda_function.zip
.
Далее вы узнаете, как подключить своего бота к функции AWS Lambda.
Разверните своего бота как функцию AWS Lambda
Настроить бота в качестве функции лямбда несложно, но вы должны выполнять все шаги упорядоченно. Давайте рассмотрим детали.
Сначала вы создадите Lambda Layer с библиотеками, используемыми в коде вашего бота (файл layer.zip
, который вы создали ранее). Во-вторых, вы создадите лямбда-функцию, загрузите код своего бота (lambda_function.zip
) и добавите созданный вами слой. Наконец, вы добавите триггер, который будет выполнять вашу лямбда-функцию каждый день в 10.00 (UTC).
Начнем с создания лямбда-слоя.
Найдите Lambda в раскрывающемся меню Службы. Выберите первый вариант (Lambda.).
Нажмите Слой в разделе Дополнительные ресурсы на боковой панели. Затем выберите Создать слой.
В разделе Создать слой выберите имя для своего слоя, загрузите файл layer.zip
, который вы создали ранее, и выберите среду выполнения Python 3.8.
Это все! Вы только что создали свой лямбда-слой. Неплохо, а?
Затем вы создадите новую лямбда-функцию.
Выберите Функции на боковой панели. Затем нажмите Создать функцию.
Затем выберите имя для своей функции и выберите среду выполнения Python 3.8.
У тебя вышло!
Затем вы загрузите свой код, добавите лямбда-слой к своей функции и определите для него запланированный триггер.
Чтобы загрузить код, перейдите в область Код функции, нажмите Действие и выберите Загрузить файл .zip. Загрузите lambda_function.zip
и сохраните изменения.
В дополнение к вашему коду вам нужно будет добавить ключи API Twitter в качестве переменных среды. Перейдите в Переменные среды, нажмите Изменить и добавьте переменные в виде пар "ключ-значение":
Затем вы добавите к своей функции слой лямбда.
Выберите Слои и нажмите Добавить слой.
На следующем экране выберите Пользовательские слои и найдите созданный вами слой. Затем нажмите Добавить.
К настоящему времени вы загрузили код, задали переменные среды и добавили слой. Вам не хватает только триггера, который будет выполнять вашу функцию.
Чтобы добавить риггер, начните с выбора опции Добавить триггер.
На следующем экране заполните обязательные поля следующим образом:
Этот триггер будет выполнять вашу лямбда-функцию каждый день в 10.00 (всемирное координированное время). Если вы хотите добавить другой триггер, ознакомьтесь с документацией Выражения расписания.
Наконец, осталось только протестировать вашу лямбда-функцию. Сделайте это, нажав кнопку Тест. Вам будет предложено настроить Тестовое событие, которое можно оставить со значениями по умолчанию.
Если все прошло успешно, после тестирования функции вы увидите зеленый баннер с сообщением Результат выполнения: выполнено. В противном случае вернитесь к предыдущим шагам и убедитесь, что вы все настроили правильно. Вы также можете оставить комментарий, и я постараюсь вам помочь.
Заключение
Отличная работа! Ваш Twitter-бот жив и здоров, вернее твиттер;)
Вы прошли сквозной процесс разработки и развертывания бота Twitter. Это был долгий путь, в ходе которого вы создали и настроили приложение Twitter, разработали логику своего бота на локальном компьютере, а также создали и настроили функцию AWS Lambda для развертывания своего бота.
Из этого урока вы узнали:
- Что такое боты Twitter и какие действия они могут и не могут выполнять
- Какие варианты у вас есть, чтобы твиттер-бот
- Как разработать бота на локальном компьютере с помощью Python
- Как развернуть бота как бессерверную функцию с помощью функций AWS Lambda
Если вы нашли это полезным, пожалуйста, проявите немного любви в Твиттере.