Узнайте, как использовать Python и функцию AWS Lambda для бесплатной разработки собственного бота для Twitter.

Оглавление

  1. Что такое Twitter-бот?
  2. Какие есть альтернативы созданию бота для Twitter?
  3. Как создать бота для Twitter с помощью Python и AWS Lambda
    - Создать учетную запись разработчика Twitter
    - Создать приложение Twitter
    - Разработать бота на локальном компьютере
  4. Разверните своего бота как функцию AWS Lambda
  5. Заключение

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

Начните с подачи заявки на доступ к учетной записи разработчика здесь.

На Какова ваша основная причина использования инструментов разработчика 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.

Остальные файлы подробно разбирать не нужно. Но не стесняйтесь взглянуть на них самостоятельно, если вам интересно.

Теперь, когда все настроено, вам просто нужно выполнить этот рабочий процесс разработки:

  1. Определите логику своего бота в lambda_function.py
  2. Протестируйте изменения, выполнив $ python entrypoint.py из корневого каталога вашего проекта.

Если вас устраивает поведение бота, упакуйте код:

  1. Добавьте любые дополнительные библиотеки, которые вы использовали в requirements.txt
  2. Запустите sh createlambdalayer.sh 3.8 из корневого каталога вашего проекта. Он упакует библиотеки в requirements.txt для среды выполнения Python 3.8+ в layer.zip
  3. Запустите 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

Если вы нашли это полезным, пожалуйста, проявите немного любви в Твиттере.