Нека заедно изградим Twitter бот

Хората имат отношения на любов и омраза с Twitter ботове. Те могат да бъдат полезни за ретуитване на съдържание, което е подходящо за нещата, които търсите, но също така могат да бъдат досадни, ако туитват твърде много или ако туитват за неща, които не ви интересуват. Можете обаче да заобиколите този проблем, като създадете свой собствен бот.

Създаването на Twitter бот е сравнително лесно. В истински стил без сървър е възможно да създадете свой собствен по рентабилен начин. Тази статия ще се фокусира върху създаването на Twitter бот в Node, хостван в AWS Lambda.

Защо без сървър?

Използването на модели без сървър за Twitter бот има пълен смисъл.

Спусъкът

Тригерът ще се основава на задание на cron. В истински безсървърен стил ще използвам Cloudwatch и ще използвам израз, подобен на cron, за да задействам моята ламбда.

Ето моето събитие, прокарано през Terraform:

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:

По принцип търся хаштаг и се опитвам да филтрирам по-спамните туитове.

Регистрирайте се за акаунт на програмист

За да изпращате туитове с код, ще трябва да се регистрирате, за да създадете акаунт на програмист. Процесът се обсъжда тук:

https://apps.twitter.com/

След като се регистрирате, не забравяйте да съхраните:

  • Жетон за достъп
  • Тайен маркер за достъп
  • 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 бот, който ретуитва конкретен хаштаг на всеки час! Надявам се, че сте намерили тази статия за полезна. Моля, оставете всякакви отзиви или въпроси в секцията за коментари. Благодаря за четенето.