Давайте вместе создадим Twitter-бота
У людей с ботами Твиттера отношения любви-ненависти. Они могут быть полезны для ретвитов контента, который имеет отношение к тому, что вы ищете, но они также могут раздражать, если они пишут слишком много или если они пишут о вещах, которые вам не интересны. Однако вы можете обойти эту проблему, создав своего собственного бота.
Создать бота для Twitter относительно просто. В истинном бессерверном стиле можно построить собственное решение с минимальными затратами. В этой статье речь пойдет о создании Twitter-бота в Узле, размещенном в AWS Lambda.
Почему бессерверный?
Использование бессерверных шаблонов для бота Twitter имеет полный смысл.
Триггер
Триггер будет основан на задании cron. В истинном бессерверном стиле я буду использовать Cloudwatch и использовать выражение, подобное cron, для запуска моей лямбды.
Вот мое мероприятие, проведенное через Терраформ:
resource aws_cloudwatch_event_rule every_one_hour { name = "every-one-hour" description = "Fires every one hour" schedule_expression = "rate(1 hour)" }
Правило события Cloudwatch будет запускаться каждый час. Когда это выполняется, я хочу, чтобы он вызывал лямбду, поэтому мне также нужно настроить цель события.
resource aws_cloudwatch_event_target twitter_bot { rule = aws_cloudwatch_event_rule.every_one_hour.name target_id = "lambda" arn = aws_lambda_function.lambda.arn }
Не забывая настроить, чтобы функция могла выполняться:
resource aws_lambda_permission allow_cloudwatch_to_call_check_foo { statement_id = "AllowExecutionFromCloudWatch" action = "lambda:InvokeFunction" function_name = aws_lambda_function.lambda.function_name principal = "events.amazonaws.com" source_arn = aws_cloudwatch_event_rule.every_one_hour.arn }
Код
Итак, теперь есть метод для запуска лямбды, теперь нам нужен код для его запуска. Я выбрал Node для фреймворка, так как мне очень нравится JavaScript. Было бы так же легко написать это на множестве других языков.
В этом проекте я собираюсь использовать следующие зависимости (package.json
):
Затем мне нужно создать точку входа, где AWS Lambda будет вызывать мою функцию (index.js
):
Как видите, вся конфигурация вводится через переменные среды.
TwitterClient.js
:
Я в основном ищу хэштег и пытаюсь отфильтровать больше спамовых твитов.
Зарегистрируйте учетную запись разработчика
Чтобы отправлять твиты с использованием кода, вам необходимо зарегистрироваться для создания учетной записи разработчика. Процесс обсуждается здесь:
После регистрации обязательно сохраните:
- Токен доступа
- Секрет токена доступа
- Ключ API
- Секрет ключа API
Тестировать локально
Чтобы проверить, как все это работает, я в основном вызываю обработчик вручную, устанавливая переменные среды:
В конце index.js
я добавляю:
exports.handler();
И запустите функцию как:
TWITTER_CONSUMER_KEY=xxxxU5FaJU3bgDz6nGt9xxxxx TWITTER_CONSUMER_SECRET=XXXXXXXXaQsdHuaC4h3oR3URRqYd0jnqoBVcd9HEV1XXXXXXXX TWITTER_ACCESS_KEY=0000000051433271300-XXXXXXXXRRUdtAMtHoAHIVXXXXXXXX TWITTER_ACCESS_SECRET=xxxxxxxxGalNApvG3yDwPtY2szibxW7TLEImXXXXXXXX FIND_HASHTAG=#serverless RETWEET_COUNT=5 npm start
Будет выполнено поиск до 30 твитов с хэштегом #serverless, и до пяти из них будет ретвититься.
Сборка для Lambda
Поскольку Node по умолчанию устанавливает свои пакеты в каталог node_modules
, это всего лишь случай заархивирования каталога и его отправки в AWS.
Опять же, это довольно просто сделать с Terraform.
Заключение
И вот он: бот Twitter, который ретвитит определенный хэштег каждый час! Надеюсь, эта статья оказалась для вас полезной. Пожалуйста, оставьте любые отзывы или вопросы в разделе комментариев. Спасибо за прочтение.