Создание бота для Twitter в NodeJS
Я знаю, что в последнее время я немного притих, я в значительной степени сделал перерыв в программировании во время Хануки. Итак, вчера вечером я подумал, что вместо того, чтобы приобщиться к древней еврейской традиции наслаждаться лучшими блюдами китайской кухни, я останусь дома и буду работать над проектом, который собирался исследовать; написание Twitter-бота.
Я выбрал для начала что-нибудь простое. Любой, кто владеет автомобилем в Нью-Йорке, знает, какую боль представляет собой альтернативная боковая парковка (ASP). В определенные дни недели нам не разрешается парковать автомобили на определенных сторонах улицы в течение произвольных полутора часов. В назначенную минуту армия стервятников в синих мундирах набрасывается на город, и любой автомобиль, владелец которого опоздал даже на несколько минут, украшается оранжевым конвертом с дорогостоящим штрафом.
К счастью, есть несколько дней в году (в основном официальные праздники и дни после сильных снежных бурь), когда мы получаем отсрочку. Я решил сделать бота, который будет твитнуть в те дни.
По правде говоря, в Нью-Йорке уже есть учетная запись в Твиттере, которая публикует твиты о статусе ASP (@NYCASP), но эта учетная запись каждый день публикует твиты о статусе. Я не хотел, чтобы мой канал был загроможден в те дни, когда действуют правила ASP (а это бывает большую часть дней), поэтому я решил написать бота, который будет следовать за мной @NYCASP и ретвитить его только в те дни, когда ASP правила приостановлены.
К счастью, есть пакет Node под названием twit, который предоставляет клиент Twitter API, который довольно прост в использовании.
Чтобы настроить своего бота, я использовал это замечательное руководство моего друга и коллеги, выпускника Flatiron School, Бена Гринберга. Если вы хотите написать своего собственного бота, я предлагаю следовать его посту для начальной настройки, а также инструкциям по развертыванию на Heroku, чтобы ваш бот мог работать. В этом посте я просто опишу, как я создал самого бота.
В итоге мой бот выглядел так:
const twit = require('twit'); require('dotenv').config() const config = { consumer_key: process.env.consumer_key, consumer_secret: process.env.consumer_secret, access_token: process.env.access_token, access_token_secret: process.env.access_token_secret } const Twitter = new twit(config) const userID = "102773464" const stream = Twitter.stream('statuses/filter', {follow: [userID]}) stream.on('tweet', function (tweet) { if(tweet.text.includes("suspended")) { retweet(tweet.id_str) } }) const retweet = function(id) { Twitter.post('statuses/retweet/:id', {id: id}, function(err,res){ if(res){ console.log("Successfully Retweeted") } else { console.log(error.message) } }) }
В первой строке я импортировал пакет twit
, а затем определил конфигурацию, необходимую для публикации моего бота. Я спрятал секретные ключи в переменных среды, к которым получил доступ с помощью dotenv
.
Затем я определил несколько переменных: переменную Twitter
для нового экземпляра twit, используя мою конфигурацию, переменную userID
, которая содержит идентификатор пользователя учетной записи Twitter @NYCASP, и, наконец, я открыл твит stream
, который прослушивал все активность, связанная с учетной записью Twitter @NYCASP.
Теперь, когда мой поток запущен, я прикрепил к потоку прослушиватель событий, который запускает функцию обратного вызова каждый раз, когда в поток добавляется твит. Функция просматривает текст твита и, если он содержит слово "suspended"
, запускает другую функцию, которая ретвитит его.
На самом деле довольно просто!
Теперь все, что осталось, - это развернуться на Heroku, дождаться рождественского утра и посмотреть, ретвитнет ли мой бот о утренней приостановке:
Джекпот! Это сработало!
Если вы житель Нью-Йорка и хотите подписаться на моего бота, вы можете найти его на @AlterSideBot