Создаём политического Twitter-бота с помощью Node.js и StdLib


Оглавление (нажмите, чтобы открыть):

Node.JS: Делаем своего Telegram бота

Последнее время начал увлекаться разработкой приложений на Node.JS. Понравился своей гибкостью и тем, что приложения можно писать на JavaScript, а с ним я хоть немного дружу.

Недавно написал скрипт, который следит за активностью группы в ВК. А чуть позже, решил поинтересоваться Telegram API. Дуровы всегда умели делать качественный продукт и Telegram меня обрадовал своей быстротой и возможностью создания своего бота с понятным даже новичку API.

И в этой статье я коротко расскажу о том, как создать своего бота на Node.JS. Кстати, вот ссылка на репозиторий бота.

Первым делом, нам надо создать своего бота и получить Token. Волноваться вам не стоит насчет тяжести создания бота, для этого у нас есть @BotFather.

Если вы открыли чат с ботом, кликаем на кнопку «Start«.

После чего, бот нам выдает все доступные команды.

Отправляем команду /newbot или кликаем по активной ссылке этой команды. Далее, бот нас попросить ввести имя для нашего бота.

Можете не париться с именем и вписать любое тестовое имя. Плюс в том, что вы в любой момент сможете удалить тестового бота или поменять имя.

Я решил во время статьи создать бота для этого блога и назвал его «Archakov Blog«.

На последнем этапе, бот попросит вас придумать никнейм (логин). К никнейму в конце обязательно надо добавить суффикс «bot» можно и «Bot«. К сожалению, никнейм поменять больше не получится. Если это ваш первый бот, не парьтесь и придумайте любой никнейм.

В итоге, получаем сообщение о том, что бот был создан и в конце будет указан его токен. Этот токен нам пригодится в процессе разработки.

Не советую делиться токеном с другими людьми. Так как он дает полный доступ к вашему боту. Начиная от редактирования имени и до удаления бота.

Теперь приступим к написанию кода и первым делом установим Node.JS. У меня OS X и хочу предупредить, что от операционной системы не будет зависеть разработка нашего бота.

Как установить Node.JS рассказывать я не хочу и не буду. Для этого обращаемся к гугл с запросом как установить Node.JS.

После того, как установили Node.JS, начинаем разрабатывать наше приложение, а точней бота. Node.JS ищет в каждой папке наличие папки node_modules с модулями, откуда он и будет подключать библиотеку для работы с Telegram API.

Советую поучиться работать с npm командой в консоли. Заранее установите этот менеджер пакетов, он нам скоро пригодится. Кстати, очень крутая и полезная штука, в будущем пригодится. Особенно, когда наступит апокалипсис, будете сидеть и пакеты устанавливать.

Создаем папку с тестовым проектом, к примеру telegram-bot . Далее, в этой папке создаем файл index.js и все! Вы красавчик! Бот создан, можете работать с ним.

Ага, канешна. Код сам не напишется!

Прежде чем его и писать, установим модуль node-telegram-bot-api . Для этого открываем консоль, пропишем путь к директории нашего проекта cd telegram-bot (укажите полный путь к этой папке).

В моем случае, это cd /Applications/MAMP/htdocs/telegram-bot .

Если вы на Windows, советую создавать папку в корне диска, чтобы можно было обращаться к проекту по короче, к примеру cd C:\telegram-bot .

Отлично, теперь не забываем про npm . В консоли вбиваем команду: npm install node-telegram-bot-api или yarn add node-telegram-bot-api (в зависимости от того, что вы используете yarn или npm).

И через несколько секунд модуль установился. Ура! В репозитории уже есть пример кода и с помощью этого кода, сделаем своего мега-тру-бота.

Теперь перейдем к файлу index.js и напишем немного кода.

В начале кода мы подключили модуль (библиотеку) для работы с Telegram API. Далее, в переменной token вставляем наш токен, который выдавал нам BotFather при создании нашего бота.

Работа с командами очень простая и понятная. Советую немного потренироваться еще с регулярными выражениями, правильно составлять команду по маске. Данный модуль содержит кучу полезных методов. Прочтите документацию в репозитории этого модуля.

Давайте в качестве моего примера, попробуем сделать напоминалку важных дел. Конечно, пример не ахти, но кому-нибудь будет полезно.

Подключаем модуль для работы с Telegram API и прописываем токен:

Далее, создаем переменную в которой будут храниться все заметки от пользователя.

Добавляем команду /напомни , с помощью которой и будем добавлять напоминание.

  • userId — хранит ID пользователя который прислал сообщение.
  • text — хранит первый параметр — текст. Его бот и должен прислать мне.
  • time — хранит второй параметр — время. Устанавливаем время когда прийдет уведомление.

Сохраняем все эти параметры в наш массив notes и бот отправляет сообщение, что запись успешно сохранилась.

Теперь надо поставить таймер, он будет каждую секунду проверять записи, которые совпадают с конкретным временем. Если одно из напоминаний соответствует настоящему времени (часу и минуте), то отправляем пользователю напоминание.

Чтобы вы поняли как работает код выше, я нарисовал схему:

Сохраняем наш скрипт, я назвал reminder.js . Запускаем его через консоль, командой node reminder.js

В итоге, я получил свое ожидаемое напоминание.

Создаём политического Twitter-бота с помощью Node.js и StdLib

В связи с изменениями в API Twitch бот не будет работать. Возможно сделаю фикс.

Chellbot — небольшой и классный Twitch чат бот разработанный на Node.JS. �� Использует бибилиотеку tmi.js для подключения к Twitch чату. Основные возможности бота:

  • сообщение аптайма стрима;
  • максимальное кол-во зрителей за стрим;
  • бан рулетка;
  • автопостинг сообщений из пабликов VK;
  • автоматический бан за гусей-гидр;
  • создание опросов на StrawPoll одной командой.

Быстрый старт (или медленный, смотря как у вас получится)

Если вы ничего не смыслите в Node.js, а вам срочно хочется бота, необходимо будет ознакомиться с JSON, GIT, Node и NPM. Если вы знаете, что делаете, склонируйте репозиторий:

Получите все необходимые зависимости. Это tmi.js, moment и request. Команда как всегда:

Теперь осталось настроить конфигурационный файл. Файл должен находится в корневой директории с именем: config.json. Образец заполненного конфига присутствует в файле: config.sample.json. Подробное описание конфига в разделе ниже.

Настроили конфиг? Запустите бота командой:

Вот так выглядит файл по умолчанию, это просто JSON объект:

Сразу приступим к описанию каждой строки.

Строка Описание
name Никнейм вашего бота.
oauth OAuth токен для Twitch, можно взять здесь: https://www.twitchapps.com/tmi/
host Название канала для кторого будет браться информация по аптайму и прочему.
debug Режим debug для tmi.js (true или false).
channels Массив с каналами, куда зайдёт бот. Название канала в IRC формате, начинается с # (sharp).
allowedModules Какие модули будут работать у бота. Думаю, по названиям все понятно.
vk Автопостинг новых сообщений из паблика. enable для включения/выключения. ID паблика цифрами и название паблика (латиницей в адресной строке браузера) для формирования ссылки

Критика и претензии к коду

Буду рад вашей помощи в оптимизации кода бота. Не смотря на то, что бот написан местами не очень то и корректно, работает он довольно стабильно (месяц аптайма).

Как создать Meetup+Slack приложение с помощью Standard Library и Node.js

Meetup — это популярный веб-сайт, на котором люди со схожими интересами объединяются в группы для организации тематических мероприятий в своих городах. После того, как мы успешно отправим запрос в API Meetup, мы получим ответ, извлечем конкретные данные из полезной нагрузки JSON (JSON payload), а затем отобразим эти данные в Slack. Мы разработаем дополнение к приложению Slack, которое будет отображать название события, его описание, дату, время, место проведения и многое другое!

Как все устроено:

Когда вы отправляете /nextmeetup 94709&javascript (или любой другой индекс и интересующую тему) в Slack, будет запущен вебхук (прим. ред.: Webhook — это метод расширения или изменения поведения веб-страницы или веб-приложения с помощью пользовательских обратных вызовов). Webhook, созданный и размещенный в Standard Library, сначала отправит запрос в API Meetup, который вернет полезную нагрузку JSON с результатами запроса.

Затем webhook создаст Slack сообщения для каждого события и отправит их на указанный канал.

А теперь подробно, шаг за шагом, мы все это разберем и объясним!

Что нам потребуется:

Шаг 1: Настройте свое Slack-приложение

Убедитесь, что вы вошли в Slack, а затем посетите Slack Apps Dashboard по адресу https://api.slack.com/apps. Вы увидите экран, который выглядит примерно следующим образом:

Нажмите “Create New App”. Появится модальное окно, в котором вам будет предложено ввести имя вашего приложения и пространство разработки Slack, к которому вы хотите добавить его.

Нажмите «Create App» и вы окажетесь на странице с основной информацией — “Basic Information”.

Прокрутите вниз до “Display Information”. Здесь вы можете задать своему Slack приложению имя, описание и изображение.

Держите страницу с основной информацией открытой в вашем браузере; мы будем использовать ее в дальнейшем, чтобы извлечь учетные данные из вашего Slack приложения для подключения этого приложения к бэкенду, размещенному в Standard Library, — коде, запускающем ваше приложение.

Шаг 2: Создание бесплатной учетной записи в Standard Library

Мы разместим код нашего Slack приложения в Standard Library — коде, который будет запрашивать и получать конкретную информацию из Meetups API. Поэтому зайдите в Code on Standard Library и зарегистрируйте бесплатный аккаунт.

Шаг 3: Скопируйте и измените шаблон Slack приложения в Standard Library

После того, как вы войдете в систему или зарегистрируетесь, вы попадете во «Featured API Source». Это шаблоны кода, доступные в Standard Library. Вам нужно выбрать один из шаблонов и изменить его, чтобы создать API, который будет работать со Slack приложением.

Введите уникальное имя для вашего API и нажмите «Оkay».

Краткое объяснение шаблона:

Отлично! Давайте на минуту остановимся, чтобы понять, с чем мы имеем дело. Левая боковая панель показывает структуру вашего API проекта, которую Standard Library настроила для создания Slack приложений.

Шаблон состоит из четырех директорий. В этой статье мы будем работать только с директорией functions , которая содержит в себе еще три директории: actions/, commands/, and events/ , а также один файл __main__.js. Все инструкции для Slack-действий, команд и событий вашего приложения содержатся именно в них.

При развертывании API-интерфейса, Standard Library автоматически создаст конечные HTTPS (URL-адреса) для каждой директории. Полученные URL-адреса позволят нам конфигурировать вебхуки, которые слушают и реагируют на Slack действия, команды и события.

Все пять папок, включая папку functions , настроены с помощью файла __main__.js . Эти конечные точки файла __main__.js отправляют соответствующие функции, когда получают сообщения от Slack. В этой статье файл __main__.js будет отправлять конечные точки commands , когда мы будем вызывать наш API, через наш Slack Bot. Теперь вернемся к настройке нашего бота!

Шаг 4. Добавление команд в Standard Library API

commands: директория commands — это конечная точка для всех Slack слэш-команд. Создайте дополнительную команду, поместив курсор на директорию commands и щелкните правой кнопкой мыши. Выберите «New File», назовите ваш файл nextmeetup.js и нажмите «Оkay».

Здесь вы увидите автоматически сгенерированную JavaScript-функцию “hello world” внутри __main__.js .

Замените содержимое файла nextmeetup.js следующим кодом:

Краткое пояснение кода:

Когда вы отправляете /nextmeetup с помощью приложения Slack, в API Meetup отправляется запрос GET:

Каждый запрос к Meetups API должен быть аутентифицирован API ключом, поэтому мы передаем наш ключ Meetup из нашего файла env.json в наш запрос. Также мы отправляем наш запрос GET с двумя параметрами: zip и topic.

Meetup API возвращает массив объектов событий, который мы можем просмотреть, зарегистрировав наш ответ: console.log(response.data . Вкладка “Logs” находится под разделом отладки (Debug).

response.data — это массив событий, соответствующий вашему запросу. Мы хотим создать два параметра для каждого события (для местоположения и темы). У нас есть функция formatAttachement , которую мы можем вызвать для каждого из событий. Результаты помещаются в массив, называемый attachments , который затем отправляется в Slack.


После того, как вы скопировали и вставили код в свой файл nextmeetup.js , сохраните изменения и перейдите к файлу env.json в баре слева (бар со структурой вашего API).

Шаг 5: Заполнение файла env.json пользовательскими данными и ключами приложения

Внутри env.json вы заметите переменные среды для вашего API. Вы можете установить различные значения для локальной среды, среды разработки и релизной среды. В этом файле будут храниться все ваши уникальные ключи доступа к учетной записи Standard Library, учетной записи Meetup и учетным данным приложения Slack.

Мы будем вносить изменения только в переменные среды «dev» (среда разработки)! Обратите внимание, что значения «dev” предназначены для вашей среды разработки, а значения «release» следует заполнять только тогда, когда вы готовы выпустить приложение. “local” переменные можно оставить пустыми при развертывании из Standard Library, но они должны быть заполнены при работе с инструментами командной строки.

Начнем с заполнения переменной “STDLIB_TOKEN” . Поместите курсор между кавычками (смотрите скриншот), щелкните правой кнопкой мыши и выберите “Insert Library Token”(Вставить библиотечный токен) или используйте сочетание клавиш ⌘ + K.

Выберите Library Token, чтобы заполнить среду «dev» (разработки).

Затем вернитесь на страницу «Basic Information» своего Slack-приложения и прокрутите вниз до «App Credentials»:

Скопируйте свой Client ID, Client Secret, и Verification Token. Вставьте их в соответствующие поля в разделе “dev” файла env.json .

Добавьте имя, которое вы дали своему Slack приложению в SLACK_APP_NAME .

“SLACK_REDIRECT” будет конечной точкой https, созданной Standard Library, после развертывания API. Мы еще не развернули наш API, однако попробуйте заполнить его сейчас, используя эту структуру. https:// .api.stdlib.com/@dev/auth/ —с именем вашей библиотеки и именем API. После того, как мы развернем наш API, вы можете вернуться, чтобы подтвердить правильность указанных значений.

Мой SLACK_REDIRECT выглядит следующим образом: https://Janethl.api.stdlib.com/ [email protected] /auth/ —убедитесь, что вы добавили путь аутентификации в конце.

Возможности и разрешения вашего приложения Slack будут настроены для следующих областей:

Последняя переменная, которую вам нужно будет добавить— это ваш ключ API Meetup. Meetup требует, чтобы каждый запрос аутентифицировался с помощью ключа API (API key).

Шаг 6: Получение ключа API Meetup

Войдите или зарегистрируйтесь на Meetup.com. Перейдите по адресу https://secure.meetup.com/meetup_api/key/, чтобы получить уникальный ключ API. Нажмите на замок, чтобы открыть свой ключ API и затем скопируйте его.

Вернитесь в файл env.json на Code on Standard Library и добавьте ваш ключ Meetup в качестве значения переменной ключа, так же, как и здесь:

Обязательно сохраните изменения в файле с помощью “⌘ + s “(или нажмите «Сохранить» в правом нижнем углу).

В боковом меню находится файл __main__.js , расположенный под директорией событий. Разверните код приложения Slack в Standard Library, нажав «Run» (выполнить).

  • Вскоре после развертывания, Standard Library создаст URL-адрес конечной точки API HTTPS, в котором будет находиться ваш код. Этот адрес будет состоять из вашего .api.stdlib.com, за которым следует имя, которое вы дали своей API @ the environment:https://janethl.api.stdlib.com/ [email protected] /

Теперь у нас есть URL-адрес, который позволит нам отправлять и получать сообщения из нашего приложения Slack в API Meetup. Теперь нам нужно установить наш URL как webhook в Slack, так что давайте вернемся к панели инструментов приложения Slack.

Шаг 7: Создайте новую слэш-команду и установите Webhook

Что такое Webhook?
Возможно, вам станет понятнее, что такое webhook, если мы сравним его с API. API основаны на запросах — это означает, что они работают, когда будет сделан запрос из стороннего приложения. Webhook же основан на событиях — он запускается, когда его вызывает определенное событие.

Чтобы установить Webhook, сервис-провайдер должен разрешить своим пользователям регистрировать URL-адрес, по которому провайдер может отправлять информацию при возникновении события. В нашем примере Slack позволяет зарегистрировать наш URL-адрес, и после регистрации слэш-команда может запустить наш webhook, который выполнит код в нашем URL.

Теперь, когда мы разобрались с этим, перейдем на страницу API Slack, чтобы настроить наш webhook. Найдите и выберите Slash Commands в сайдбаре.

После нажатия «Create New Command» вас попросят ввести данные вашей команды, для этого примера используйте:

Short Description: retrieves Meetup events

Шаг 8. Включите OAuth и разрешения

Вернитесь к своему Slack приложению. В боковом меню выберите OAuth & Permissions.

Здесь вам нужно будет ввести URL-адрес перенаправления следующим образом: https:// .api.stdlib.com/ @dev/auth/

нажмите «Add» и «Save URLS».

Этот URL-адрес должен соответствовать URL-адресу, который мы указали в файле env.json в Standard Library.

Шаг 9: Добавляем бота в наше Slack приложение

Вернитесь на страницу Slack App и нажмите «Bot Users» в сайдбаре. Нажмите “Add Bot User”. Все настройки оставьте по умолчанию.

Последний шаг — авторизация приложения. Введите в вашем браузере следующее: https:// .api.stdlib.com/@dev/

Нажав кнопку “Add to Slack”, вы попадете на экран авторизации.

Нажав “Authorize”, вы должны увидеть сообщение об успешной авторизации

Шаг 10: Протестируем наше Slack Meetup-приложение

Вы все сделали. Теперь ваше Slack-приложение доступно для использования в Slack. Ваше приложение Slack должно отвечать на /nextmeetup & , как на скриншоте выше.

Build a Twitter Bot With Node.js

I was really hoping to do this as a learning experiment. I guess what I did learn, is that doing simple things with the Twitter API is actually really easy.

What Are We Building?

What we’re going to build here is a simple Twitter bot that send a query to the Twitter API, receives a response containing the results of our search, and then retweets the most recent tweet returned. In my case, I set my bot to search for tweets containing either #coldfusion or #cfml . Why these tags? Well, I use ColdFusion at work, so this is a community I am actually part of. I also find it kind of ironic to use Node.js to retweet a totally unrelated language.

Getting Started

The first, and arguably most difficult, part of the process is setting up a Twitter Application for your bot. I highly recommend you create a new Twitter account, as bot activity often gets banned from Twitter. You likely don’t want that happening to your personal account. So, head on over to Twitter and set up a new account. Quick tip, add a mobile phone number to your account. It is a requirement in order for your app to be able to post to Twitter, so without that, you won’t be retweeting anything.

After your new account is activated, go to the Twitter Developer Center, sign in and create an app. Make sure you set the permissions for the app to ‘Read and Write’, not the default of ‘Read-Only’. Again, failure to do this means you won’t be Tweeting anything.

Once you’re app is created, go to the ‘API’ Tab in the app settings:

Toward the bottom of this page, you should have a button that says ‘Generate Access Token’ — click that. You have to wait a bit before you actually have the token, but that’s ok, we can write the code while we wait.

The Code

To interact with the Twitter API, we’ll be using a Node.js library called Twit. Create a folder for your project code, then in your Terminal window, navigate to that folder and type npm install twit . Now, create a file called bot.js , and open that in your favourite text editor. At the very top of the file, we need to include Twit:

Then we create an instance of the Twit client, using the simple example they have on GitHub:

Don’t worry if your tokens still haven’t generated yet, we still have some time. The next thing we need to do, is write the function that will search Twitter, and retweet the most recent Tweet returned:

First, this uses the get() method in Twit. The first argument is API call to be made, in our case search/tweets . The second is the settings for the call. q is required, and is the query to be performed. You can search hashtags, text, users, there are a lot of options for what you can search on. Take a look at the Twitter Search for more details. result_type is optional, we want the most recent Tweets, but you could also search for popular Tweets. The third argument is a callback function to fire when the search is complete. Inside of this we will add the code to either retweet the most recent tweet matching our search, or show an error if that’s what we encounter. We can now replace . with:

This should be pretty straight forward. First, I make sure there wasn’t an error. If we’re error free, I get the id of the most recent tweets, then call post() , and tell that function what I’m doing. In this case I want to call the Twitter method statuses/retweet and include the id of the tweet. I have a callback function that simply outputs to the console a message that describes what happened.

Finally, we call the function so that the bot Tweets as soon as it is run, then we set a timer to call the function at a set interval, in milliseconds. I went with every half hour:

That’s all there was to it. There entire code is 29 lines (including breaks):

You can check out my bot on Twitter, and you can find the code on GitHub.

There are things available to me that would allow me to quote tweets, reply to tweets, generate random tweets, listen to streams, etc. This bot might evolve into something more complex, but for now this is all there is to it!

Создание Slack Bot с помощью Node.js

Slack быстро становится новым отраслевым стандартом общения для команд. На самом деле, он настолько популярен, что, когда я набрал Slack в Google, как я и ожидал, первым результатом было определение слова из словаря. За этим последовал сразу сайт Slack!

Это почти неслыханно для большинства распространенных слов в английском словаре. Обычно в определении Google следуют несколько ссылок на верхние словарные сайты.

Что такое Slack?

В своей основе Slack — это система обмена сообщениями. Он позволяет отправлять сообщения членам команды и создавать каналы (частные или общедоступные), которые позволяют легко общаться в режиме реального времени. Для получения дополнительной информации о Slack вы можете просмотреть функции Slack.

На данный момент вам может быть интересно узнать, откуда здесь Node.js. Как я уже упоминал, в его самом основном, Slack — система обмена сообщениями; однако он может быть бесконечно расширен и настроен. Slack предоставляет невероятно гибкую систему для настройки интеграции вашей команды, в том числе:

  • создание пользовательских приветственных сообщений
  • создание пользовательских emojis
  • установка сторонних приложений
  • создание собственных приложений
  • создание пользовательских Slack Bots

В этой статье я собираюсь продемонстрировать, как создать Slack Bot на Node.js, который можно добавить в конфигурацию Slack вашей команды.

Определены Slack бота

Задача Slack Bot — получать события, отправленные из Slack и обрабатывать их. Существует множество событий, которые будут отправлены вашему боту, и именно здесь нам понадобится Node.js. Мы должны решить не только, какие события обрабатывать, но и как обрабатывать каждое отдельное событие.

Например, некоторые общие события, которые будет обрабатывать Bot:

  • member_joined_channel
  • member_left_channel
  • message

В этой статье я создам приложение Node.js и Slack Bot, которые могут быть добавлены в ваш командный проект для выполнения определенных действий на основе событий, которые он получает.

Для начала мне нужно создать Bot на Slack. Можно создать два типа ботов:

  • пользовательский бот
  • создание приложения и добавление пользователя-бота

В этой статье будет создан пользовательский бот, потому что пользователь-бот приложения будет более уместным, если вы планируете писать и публиковать приложение на Slack. Учитывая, что я хочу, чтобы этот бот был закрыт для моей команды, будет достаточно специального бота.

Создание пользовательского Slack Bot

Пользовательский бот можно создать здесь: https://my.slack.com/apps/A0F7YS25R-bots. Если вы уже вошли в свою учетную запись Slack, слева выберите кнопку «Добавить конфигурацию»; в противном случае войдите в свою учетную запись Slack, прежде чем продолжить. Если у вас нет учетной записи Slack, вы можете зарегистрироваться бесплатно.

Это приведет вас к новой странице, в которой вам необходимо указать имя пользователя для своего бота. Введите свое имя пользователя, следуя инструкциям по наименованию Slack. После того как вы выбрали удивительное имя бота, нажмите «Добавить конфигурацию бота».

После того, как вы успешно создали своего бота, Slack перенаправляет вас на страницу, которая позволяет выполнить дополнительную настройку вашего бота. Я оставлю эту творческую часть для вас. Единственное, что нужно от этой страницы, это токен API, который начинается с xoxb- . Я бы либо скопировал этот токен в безопасное место для последующего использования, либо просто оставил эту страницу открытой, пока нам не понадобится токен для приложения Node.js.

Конфигурации

Прежде чем перейти к коду, потребуется еще две конфигурации Slack:


  1. Создайте или выберите существующий канал, с которым будет взаимодействовать ваш бот. Пока я тестирую своего нового бота, я решил создать новый канал. Обязательно запомните название канала, оно вам понадобится в ближайшее время.
  2. Добавьте/Пригласите своего бота на канал, чтобы он мог взаимодействовать с ним.

Теперь, когда у меня настроен Slack Bot, пришло время перейти к приложению Node.js. Если у вас уже установлен Node.js, вы можете перейти к следующему шагу. Если у вас нет Node.js, я предлагаю вам начать с посещения страницы загрузки Node.js и выбрать установщика для вашей системы.

Для моего Slack Bot я собираюсь создать новое приложение Node.js, выполнив процесс npm init . В командной строке, в которой указано, где вы хотите установить приложение, вы можете запускать следующие команды:

Если вы не знакомы с npm init , запускается утилита, которая поможет вам настроить ваш новый проект. Первое, что она спросит, — это имя. Это по умолчанию мой slackbot , с которым мне удобно. Если вы хотите изменить свое имя приложения, сделайте это сейчас; в противном случае нажмите « Enter», чтобы перейти к следующему шагу конфигурации. Следующие опции — это версия и описание. Я оставил оба по умолчанию и просто продолжал, нажимая Enter для обоих этих параметров.

Точки входа

Следующее, что требуется, — это точка входа. По умолчанию используется index.js ; однако многие люди любят использовать app.js . Я не хочу вступать в эту дискуссию, и если мое приложение не потребует интенсивной структуры проекта, я собираюсь оставить мое значение по умолчанию index.js .

После того, как вы оправились от дискуссии, которая, вероятно, так же сильна, как про табы и пробелы, конфигурация продолжается, задавая нам еще несколько вопросов:

  • команда тестирования
  • репозиторий git
  • ключевые слова
  • автор
  • лицензия

Для целей этой статьи я оставил все параметры по умолчанию. Наконец, после того, как все параметры были настроены, перед созданием файла отображается подтверждение файла package.json . Нажмите «Enter», чтобы завершить настройку.

Погружаемся в SDK

Чтобы облегчить взаимодействие со Slack, я также собираюсь установить пакет Slack Developer Kit следующим образом:

Готовы ли вы к некоторому коду? Я уверен, что да. Для начала я собираюсь использовать код примера с веб-сайта Slack Developer Kit, который отправляет сообщение Slack с использованием Real-Time Messaging API (RTM) с несколькими настройками.

Учитывая, что точкой входа, которую я выбрал, был index.js , пришло время создать этот файл. Пример с сайта Slack Developer Kit составляет примерно 20 строк кода. Я собираюсь разбить его по нескольким строкам за раз, только чтобы дать объяснения тому, что делают эти строки. Но учтите, что все эти строки должны содержаться в вашем файле index.js .

Код начинается с включения двух модулей из пакета Slack Developer Kit:

RtmClient будет нашим бот-объектом, который ссылается на RTM API. CLIENT_EVENTS — это те события, которые наш бот будет слушать.

Когда эти модули включены, пришло время создать экземпляр и запустить бот:

Обязательно замените токен API, на ваш токен, полученный во время создания Slack Bot.

Вызов функции start на моем RtmClient инициализирует сеанс бота. Это попытается аутентифицировать моего бота. Когда мой бот успешно подключится к Slack, события будут отправлены. На мгновение эти события будут показаны.

При создании экземпляра клиента создается переменная channel , которая мгновенно заполняется внутри одного из событий CLIENT_EVENTS .

Переменная channel будет использоваться для выполнения определенных действий, таких как отправка сообщения на канал, к которому подключен бот.

Когда сеанс RTM запущен ( rtm.start(); ) и задан действительный токен API для бота, будет отправлено сообщение RTM.AUTHENTICATED . Следующие несколько строк прослушивают это событие:

Когда получено событие RTM.AUTHENTICATED , предыдущий код выполняет цикл for через список командных каналов Slack. В моем случае я специально ищу jamiestestchannel и гарантирую, что мой бот является членом этого канала. Когда это условие выполняется, идентификатор канала сохраняется в переменной channel .

Отладка

Чтобы помочь в отладке, регистрируется сообщение консоли, в котором отображается сообщение о том, что бот успешно прошел аутентификацию, отображая его имя ( $ ) и имя команды ( $ ) которой он принадлежит.

После того, как бот прошел аутентификацию, запускается другое событие ( RTM.RTM_CONNECTION_OPENED ), которое означает, что бот полностью подключен и может начать взаимодействовать с Slack. Следующие строки кода создают слушателя событий; после успеха, сообщение Hello! отправляется в канал (в моем случае jamiestestchannel).

На этом этапе я могу запустить приложение Node и посмотреть, как мой бот автоматически публикует новое сообщение на моем канале:

Результаты выполнения этой команды (при успешном завершении) двоякие:

  1. Я получаю сообщение об отладке, указывающее, что мой бот успешно вошел в систему. Это произошло из RTM.AUTHENTICATED , вызванного после запуска RTM-клиента.
  2. Я получаю сообщение Hello! в моем канале Slack. Это произошло, когда сообщение RTM.RTM_CONNECTION_OPENED было получено и обработано приложением.

Прежде чем приступить к дальнейшему совершенствованию моего приложения, сейчас самое время вспомнить, что я сделал, чтобы дойти до этого:

  1. Создал пользовательского Slack Bot.
  2. Создал пользовательский Slack Channel и пригласил туда моего бота.
  3. Создано новое приложение Node.js, под названием slackbot.
  4. Установил пакет Slack Developer Kit в мое приложение.
  5. Создал мой файл index.js , который создает RtmClient , используя мой токен API из моего пользовательского бота.
  6. Создал прослушиватель событий для RTM.AUTHENTICATED , который находит Slack Channel, в который входит мой бот.
  7. Создал слушателя событий для RTM.RTM_CONNECTION_OPENED , который отправляет сообщение Hello! моему в мой Slack каналl.
  8. Вызывается метод RTM Start Session, чтобы начать процесс аутентификации, который обрабатывают мои слушатели событий.

Создание бота

Теперь пришло время начать настоящую забаву. Slack предлагает (я не считал) не менее 50 различных событий, которые доступны для моего пользовательского бота. Как видно из списка Slack Events, некоторые события являются обычными для RTM API (которые мы используем), в то время как другие события являются обычными для API событий. На момент написания этой статьи я понимаю, что SDK Node.js поддерживает только RTM.

Чтобы закончить моего бота, я обработаю событие message ; конечно, это, вероятно, одно из самых сложных событий, поскольку оно поддерживает большое количество подтипов, которые мне скоро придется изучить.

Вот пример того, как выглядит самое основное событие message из Slack:

В этом базовом объекте три наиболее важные вещи, которые мне будут интересны:

  1. channel . Я хочу, чтобы это сообщение принадлежало каналу, с которым мой бот взаимодействует.
  2. user . Это позволит мне напрямую взаимодействовать с пользователем или выполнять определенное действие, основанное на пользователе.
  3. text . Это, вероятно, самая важная часть, так как она содержит содержимое сообщения. Мой бот захочет отвечать только на определенные типы сообщений.

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

  • edited : дочерний объект, который описывает, какой пользователь редактировал сообщение и когда это произошло.
  • subtype : Строка, которая определяет один из множества различных типов, например channel_join, channel_leave и т. д.
  • is_starred : логическое значение, указывающее, было ли это сообщение оценено.
  • pinned_to : массив каналов, в которых это сообщение было закреплено.
  • reactions : массив объектов реакции, определяющих реакцию (например, facepalm), сколько раз это происходило, и массив пользователей, которые реагировали таким образом на сообщение.

Я собираюсь расширить ранее созданный index.js для прослушивания событий message . Чтобы уменьшить избыточность кода, следующие примеры будут содержать только часть кода, связанного с усовершенствованиями, которые касаются событий message .

Первое, что нужно сделать, это включить новый модуль для RTM_EVENTS , который я буду слушать. Я разместил это ниже моего двух предыдущих включений:

Код для обработки события message я буду размещать в нижней части моего файла. Чтобы проверить правильность работы message , я создал новый прослушиватель событий, который регистрирует объект message в консоли следующим образом:

Теперь я могу повторно запустить приложение Node ( node index.js ). Когда я ввожу сообщение в свой канал, на мою консоль регистрируется следующее:

Все идет нормально. Мой бот успешно получает сообщения. Следующим шагом, который необходимо сделать, является обеспечение того, чтобы сообщение принадлежало каналу, в котором находится мой бот:

Теперь, когда я запускаю свое приложение, я вижу только сообщение об отладке, если событие message было для channel , которому принадлежит мой бот.

Теперь я собираюсь расширить приложение для отправки кастомного сообщения на канал, демонстрируя то, как можно пометить пользователь в сообщении:

Теперь, когда кто-то вводит сообщение в канал, мой бот отправляет свое собственное сообщение, которое выглядит примерно так: «Остановитесь, все слушайте, у @endyourif есть что-то важное для вас!»

Хорошо, но не очень полезно. Вместо этого я собираюсь закончить своего бота, улучшив слушателя событий message , чтобы он отвечал на конкретные команды. Это будет достигнуто путем выполнения следующих действий:

  1. Разделите text часть message на массив на основе пробела.
  2. Проверьте, совпадает ли первый индекс с именем пользователя моего бота.
  3. Если это так, то я смотрю второй индекс (если он существует) и рассмотрим это как команду, которую должен выполнить мой бот.

Чтобы было легко обнаружить, был ли указан мой бот, мне нужно создать новую переменную, которая будет хранить идентификатор пользователя бота. Ниже приведен обновленный раздел кода, в котором я ранее задавал переменную channel . Теперь он также сохраняет идентификатор пользователя моего бота в переменной bot .

С установкой переменной bot я закончил своего бота, выделив ранее созданный слушатель событий message следующим образом:

Следующий код разбивает свойство text объекта message в массив на основе пробела. Затем я гарантирую, что у меня есть как минимум два элемента в массиве, в идеале — мой бот и команда для выполнения.

Когда первый элемент в массиве соответствует моему боту, я выполняю оператор switch со вторым элементом массива: командой. Поддерживаемые текущие команды — это jump и help. Когда сообщение отправляется на канал, который выглядит как «самый большой прыжок», мой бот будет отвечать специальным сообщением исходному пользователю.

Если команда не распознана, она попадет в мой оператор case по умолчанию для моего switch и бот ответит общей командой, которая будет выглядеть так: «@endyourif, извините, я не понимаю команду «привет». Для получения списка поддерживаемых команд, введите: @jamiestest help».

Вывод

На данный момент мой бот завершен! Если вы заинтересованы в дальнейшем улучшении своего бота, вот список идей:

  • Обращайтесь к члену новой команды, слушая событие team_join . Когда присоединяется новый член команды, было бы неплохо послать им разнообразную информацию и/или документацию, приветствуя их в вашей команде.
  • Увеличьте список поддерживаемых команд, с которых я начал.
  • Сделайте интерактивные команды, выполнив поиск в базе данных, Google, YouTube и т.д.
  • Создайте пользователя-бота в приложении и создайте свои собственные команды.

Создание инструмента для анализа профилей Twitter с использованием Node.js, Mongo и D3

Инструмент для создания облака слов на облачной платформе IBM Bluemix

Работая дизайнером пользовательского интерфейса, я должен знать, чем руководствуются люди, использующие приложения, в создании которых я участвую. Хорошо продуманный пользовательский интерфейс повышает конкурентоспособность продукта.

Я подумал, что сведения об особенностях той или иной пользовательской базы можно получить из социальные сетей. Нужно взять твиты и биографии из профилей пользователей продукта в Twitter и посмотреть, как его последователи описывают себя. Возможно, это поможет понять их мотивацию и использовать результат при создании следующего продукта.

“ Чем сегодня занимаются люди в социальных сетях? Они создают свой собственный образ и индивидуальность, то есть, по сути, свой бренд. Они общаются с теми, кто желает общаться с ними. ”

Изучив несколько профилей, я был впечатлен подробностями биографий, которые выбрал. Однако решая эту задачу вручную, я смог бы обработать лишь малую толику пользователей, чтобы составить общую картину их менталитета. Я чувствовал, что это многообещающая идея, — биографии открыты и позволяют произвести интересный, глубокий анализ аудитории или сравнительный анализ. Тем не менее, инструментов, помогающих заглянуть в зеркало социальных сетей — чтобы понять, какими нас видят другие, оказалось не много.

Хотелось бы получить облако слов на основе биографий тысяч последователей, которое демонстрировало бы, какие слова в них встречаются чаще всего, но я не смог найти бесплатный и доступный инструмент, позволяющий создавать облако слов из биографий.

Я нашел коммерческий инструмент, составляющий список из первой пятерки слов по биографиям моих последователей, но за это нужно было платить, а мне этого не хотелось. К тому же я подозревал, что и в не самых часто употребляемых словах есть своя ценность и что для получения общей картины нужен более широкий спектр данных.

В результате я разработал приложение на облачной платформе IBM Bluemix, помогающее проиллюстрировать эти данные. Ниже приведен пример выходных данных этого приложения. Это облако слов, наиболее часто встречающихся в биографиях из профилей моих последователей. Ту же идею можно использовать и для анализа биографий из профилей пользователей программного продукта и твитов из его учетной записи в Twitter.

Облако слов можно использовать как инструмент:

  • проверки и оттачивания своего собственного образа;
  • сравнения последователей конкурирующих продуктов или персон;
  • оценки новых последователей или людей, которых вы хотели бы видеть в числе своих последователей.

В прекрасной статье, упомянутой выше, Скотт Рич показывает, как создать в Bluemix соответствующую платформу на основе Node, express и Twitter. Платформа моего приложения подобна этой, за исключением того, что я дополнил базовое Node.js-приложение Twitter средствами аутентификации в Twitter, интеграцией с базой данных Mongo и преобразованием результатов в более сложную инфографику.

Я включил обычные шаги по интеграции Mongo с Node и добавил связи с простыми проектами, посвященными обеспечению такой интеграции, но связал все это со своим приложением для изображения облака слов, которое служит примером практической реализации интеграции Mongo и Node.

Что нужно для создания подобного приложения

Это сложное приложение. Инструкции этого руководства помогут разработчику среднего уровня узнать, как построить приложение с аутентификацией в Twitter на базе Node и развернуть его в PaaS без большого количества необходимых компонентов и шагов.

Мой подход заключается в том, чтобы создать локальную среду с применением Mongo и Node, а затем использовать функцию автоматического развертывания в DevOps Services для развертывания приложения в Bluemix после внесения изменений в git.

Для локальной разработки я установил серверные модули Node.js и клиентские библиотеки JavaScript.

  • Серверные модули Node.js:
    • Mongodb: для подключения к базе данных mongo;
    • express: помогает организовывать и анализировать HTTP-запросы из конкретных URL-путей;
    • twit: очень удобная библиотека для вызова Twitter API;
    • OAuth: для проверки подлинности в Twitter.

  • Клиентские библиотеки JavaScript:
    • Bootstrap: для программирования некоторых надежных компонентов пользовательского интерфейса HTML;
    • D3: документы, управляемые данными, которые используются при визуализации облака слов.

При нажатии приведенной выше кнопки Получить код загружается файл package.json.

Этот файл также содержит несколько пакетов, необходимых для работы Mongo и OAauth.

Весь этот код разработан с помощью технологий простого стека MEAN и предназначен для работы в Bluemix. Я привожу описание настройки службы MongoLabs в Bluemix.

Чтобы построить свое визуальное mashup-приложение для Twitter, я поступил следующим образом.

  1. Выполнил инструкции из статьи Скотта [Рича].
  2. Локально установил Mongo.
  3. Создал приложение для Twitter, описанное на сайте для разработчиков Twitter.
  4. Настроил конфигурацию для проверки подлинности в Twitter.
  5. Создал простое Mongo-приложение.
  6. Добавил базовую аутентификацию в Twitter, завершив тем самым создание платформы.
  7. Начал писать код для вызова API Twitter и записи в базу данных.
  8. Добавил библиотеку визуализации (D3).

Шаг 1. Хранение конфигурации в среде исполнения

Одно из 12 условий разработки современного программного обеспечения — хранение конфигурации в среде исполнения. Этот метод помогает надежно хранить ключи API (и другие данные).

Так как в этом проекте используется API Twitter, нужно создать новое приложение для Twitter, в котором будет работать код. Для этого предоставляются некоторые ключи Twitter, которые должны быть известны приложению app.js; в противном случае Twitter будет отклонять вызовы API, исходящие от приложения. Подробнее см. в файле README.MD моего приложения.

В моем файле app.js есть следующие строки кода, которые создают объект потребительского ключа аутентификации.

В этом листинге есть строковые значения process.env.TWITTER_CONSUMER_KEY и process.env.TWITTER_CONSUMER_SECRET , предоставленные Twitter для моего приложения. Создайте новое приложение для Twitter и перейдите на вкладку API keys своего приложения, как показано на следующем рисунке. Определите ключи для своей среды. Мое приложение называется ProfileWords. У вашего будет свое имя.

Пользователям Mac: чтобы определить ключи для своей среды, выполните следующие действия.

  1. Откройте окно терминала.
  2. Выполните следующую команду:
  3. Отредактируйте файл launchd.conf и добавьте следующие строки:

Щелкните на вкладке Settings своего приложения. Укажите имя, описание, URL веб-сайта и URL обратного вызова. Установите флажок Allow this application to be used to Sign in with Twitter.

Перезагрузите систему. Теперь при запуске Node-приложения оно получит доступ к вашим строковым переменным.

Для пользователей Windows: выполните следующую команду из оболочки:

Шаг 2. Копирование проекта из DevOps Services

  1. Войдите в Bluemix и добавьте экземпляр службы MongoLab. Оставив экземпляр непривязанным, задайте имя (например, MongoLab_profilesExample) и запишите его.

Перейдите в раздел Environment variables и добавьте ключи во вкладке User-Defined, как показано на следующем рисунке.

Шаг 3. Настройка аутентификации и задание предельной пропускной способности

В Twitter предусмотрена предельная пропускная способность API. Этот предел ограничивает количество запросов, которые пользователь может подавать в течение определенного периода времени для предотвращения неограниченной нагрузки на серверы. Twitter советует пользователям предусматривать в своих приложениях собственное распределение ресурсов, вместо того, чтобы запускать приложение из одной учетной (например, разработчика).

Когда пользователь моего приложения ProfileWords вводит имя последователя, оно обращается к списку последователей. Этот запрос может возвращать до 1000 учетных записей. Ограничение Twitter по пропускной способности позволяет делать 15 таких запросов в течение 15 минут. (Когда занимаешься изучением профилей, это ограничение кажется тесным, но c’est la vie.)

Первый шаг заключается в том, чтобы аутентифицировать пользователя, поэтому можно вызвать API и работать в рамках персонального предела пропускной способности этого пользователя.

Изучение способа проверки подлинности в Twitter с помощью Node заняло у меня несколько часов. Хотя это обычная задача (открытую аутентификацию используют многие службы), технология Node меняется так быстро, что те примеры, которые я нашел, с последней версией модуля OAuth не работали.

Поэтому я разработал отдельный проект, чтобы показать, как использовать OAuth для подключения к Twitter. Файл README в этом проекте содержит инструкции по клонированию этого приложения с вашей собственной информацией разработчика Twitter.

Общий процесс показан в следующем примере кода:

  • когда пользователь вводит URL-адрес приложения, ему предлагается войти через Twitter;
  • когда пользователь нажимает кнопку Login, он перенаправляется на страницу аутентификации Twitter;
  • после того как пользователь выполняет вход в Twitter, он возвращается на заданную страницу обратного вызова (в данном случае это страница облака слов). URL обратного вызова запрограммирован в файле server.js подпроекта.

Файл README проекта содержит инструкции по использованию этой структуры кода для аутентификации в Twitter. Путь /sessions/connect приводит пользователя к диалоговому окну входа на его безопасном веб-сайте, а затем возвращает на путь /sessions/callback. Важно войти под своими собственными учетными данными Twitter, как показано.

В проекте ProfileWords я использовал тот же подход к аутентификации и реализовал его в файле app.js.

После аутентификации пользователя в Twitter можно получить больше информации о человеке. Доступна самая разная информация, включая имя пользователя, его местоположение, а также набор цветов в дизайне страницы пользователя в Twitter.

Особенно важная информация – секретный ключ пользователя, который понадобится ему при последующих запросах к Twitter. Этот ключ фигурирует в следующем листинге. Я храню эти данные в базе данных Mongo для последующего применения от имени пользователя.

Шаг 4. Подключение к Mongo

При отправке запросов к API Twitter код для сервера Node должен иметь доступ к секретному ключу пользователя Twitter. В запросе к Twitter указываются как открытый, так и секретный ключи.

Я использую открытый ключ в качестве дескриптора базы данных для поиска секретного ключа. Нужно, чтобы приложение ProfileWords могло поддерживать несколько пользователей одновременно, оно должно принимать и составлять запросы от имени нескольких пользователей, у каждого из которых свои учетные данные Twitter.

При аутентификации пользователя Twitter выдает ему секретный ключ. Этот ключ хранится в базе данных. Затем, когда пользователь отправляет запрос, приложение разыскивает сохраненный секретный ключ по открытому ключу, который хранится в веб-браузере и отправляется вместе с запросом.

Вот последовательность действий.

Mongo работает с пулом соединений. При запуске приложение Node создает соединение:

Обратите внимание, что все, что делает приложение Node, оно делает в рамках этого соединения, и я могу сослаться на базу данных, просто прибегнув к выражению followersDatabase .

Во многих примерах применения Mongo всякий раз, когда делается запрос, создается новое соединение. Я понял, что при развертывании в среде исполнения PaaS этот метод быстро дает осечку. В документации Mongo (откуда я узнал о MongoClient.connect ) советуют работать в сеансе соединения, что я и делаю.

Я специально создал простой проект соединения с базой данных, чтобы продемонстрировать некоторые основы Mongo, но вы можете понять, как я использую ее, и из файла app.js.

Например, следующий код ищет секретный маркер, чтобы можно было направить запрос к Twitter.

В базе данных можно хранить самые разнообразные аналитические данные. Например, можно подсчитывать все запросы пользователя или записывать выбор цвета темы для облака слов. В текущей версии приложения база данных используется для управления доступом к маркерам пользователей.

На этом этапе мы продолжили изучение Node и express, освоив работу с Mongo и аутентификацией. Те же ингредиенты можно использовать и в других mashup-приложениях для социальных сетей. Эти строительные блоки позволяют пойти довольно далеко.

Приобретение этих знаний заняло у меня какое-то время, но процесс — решение задач и обучение — стал привычнее. Полезные пакеты Node обеспечивают хороший фундамент.

Шаг 5. Визуализация результатов с помощью D3

За несколько часов я пришел к жестко запрограммированному приложению с извлечением данных аутентификации для Twitter. Сценарий JavaScript для облака слов я нашел довольно быстро – и увидел свою основную идею в действии.

Но дальше дело застопорилось. Мне не терпелось развивать свое приложение, но для представления данных разными способами, такими как графики или круговые диаграммы, требовалась универсальная библиотека визуализации. Немного поискав, я обнаружил D3.

Джейсон Дэвис дополнил JavaScript-библиотеку D3 расширением для облака слов. Он предлагает отличный пример и описание. После многих попыток я понял, как подставлять различные цвета слов в облаке. (Я искал красивые сочетания цветов в облаках слов, но готовые примеры найти трудно, поэтому я решил поэкспериментировать и попробовать составить привлекательные комбинации сам).

Я составил набор тем и написал небольшую процедуру для случайного выбора цвета из темы при каждой прорисовке слова. Экспериментальным путем я обнаружил, что в теме должно быть не более пяти цветов, и включил небольшой компонент пользовательского интерфейса для выбора темы. Я хотел получить возможность предложить, например, тему простой газетной бумаги, чтобы облако можно было скачать для включения в документ. Так получилась однотонная тема, но можно использовать и другие цвета. Мне нравится оранжевый цвет, как показано выше.

Что касается данных, то я написал код Node.js на сервере для сбора биографий и определения наиболее часто встречающихся слов. Поэкспериментировав, я решил, что 70 слов выглядят привлекательно с точки зрения сбалансированности распределения данных и не слишком перегруженно. Сервер возвращает данные, и облако слов воспроизводится.

Заключение

Мой код включает в себя множество деталей. Целью было написать реальное приложение, которое могут использовать обычные люди. Поэтому я обрабатываю ошибки; управляю маркерами авторизации; разрешаю включать просмотр списка пользователей, за которыми следит человек, а также их последователей, твиты и «избранное»; реагирую, если страница загружается на телефон; и реализую многие другие функции.

Это руководство посвящено нескольким важным строительным блокам (указатели для базы данных, аутентификация и визуализация) и обеспечивает читателю фундамент для создания подобных приложений. Остальные детали те, кто ими интересуется, могут найти в коде.

В другой моей статье, Что говорят в twitter о кандидатах на выборах, я использую свой инструмент для изучения профилей кандидатов, участвовавших в недавних выборах в провинции Онтарио.

Образ личности в социальных сетях – чрезвычайно увлекательный предмет. Я планирую встроить в эту экспериментальную программу много других вещей и со временем наращивать ее.

Creating a Twitter bot with Node.js

In this tutorial, we will be learning how to create a simple Twitter bot that automatically tweets a response to a user when they follow the account. We will write the bot in JavaScript using Node.js and it will be awesome!

Here’s a look at the finished bot in action:

A look at the Twitter bot we will be building.

Before we dive in, let’s ensure you meet the prerequisites for this tutorial.

Prerequisites

  1. Since the bot is written in JavaScript, basic knowledge of JavaScript would be helpful
  2. A Twitter account
  3. A valid phone number that you can verify via SMS

If you have everything you need, let’s get the show started.

Installing Node and NPM

To install the npm module we need for our bot, we will first need Node.js, a JavaScript runtime.

  1. Visit the official Node.js website to get the installer.
  2. After it downloads, run the installer until the end.
  3. Restart your computer to ensure the changes can take effect.

The Node.js installer.

The Node.js installer should have also installed NPM for you. To confirm that you have installed both properly, you’ll need to open Windows Command Prompt if you’re on Windows, or Terminal if you’re on Mac or Linux.

To check if you installed node:

To check if you installed NPM:

If both of these commands return a version number, you’re good to go.

Initilizing our Project and Installing twit


Create a folder to serve as the home of your bot. Inside that folder, initialize a new project by running this command:

Feel free to enter anything you’d like or nothing at all. Once that is complete, you should see a file called package.json . To simplify our interactions with the powerful Twitter API, we will be using an npm module called twit. Twit will serve as our Twitter API client and you can install it by running this command in the same folder as your files:

After that is finished, we are ready to use twit in our code. Let’s hop on Twitter!

Creating a new Twitter Application

After you are logged in to your Twitter account, ensure you have a verified phone number tied to the account. Twitter requires this to register any new applications. After your Twitter account has a verified phone number, head on over to the Twitter Application page to start creating a new Twitter application.

The page where you can create a new Twitter application.

Give your application a name, description, website (it can be anything really), check the checkbox, and hit «Create your Twitter Application». Once created, head to your bot from this page and then click on the tab that says «Keys and Access Tokens». On this page you can get the four things you need for your bot:

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

The page where can get your keys and access tokens.

With all the information you need from Twitter on-hand, we can begin coding!

Starting the Bot

Ins >package.json , create a file called index.js and let’s set up authentication:

Import the twit module as the variable Twit and then initialize an instance of it by calling the constructor for it and passing in the credentials you obtained earlier. Let’s test and see if Twitter recognizes this information by attempting to authenticate:

What this code does is take our twit instance and attempt to authenticate using it. We pass in a callback function to be called after we get a response from Twitter. If Twitter returned an error, we just throw it immediately. If not, and if our credentials are valid, we should see a success message printed.

To start the bot, run this command:

Then the credentials are valid and we can now authorize things like tweets, likes, and retweets.

Streams

We can establish a long-term connection to Twitter’s Streaming API by creating a stream using twit. With streams, we can let Twitter do the filtering of events for us, and then only do something when an event that we care about does occur, like, say, a follow of our account.

Creating a stream is simple, and we should do it right after we successfully authenticate:

That’s all you need to create a stream. We’re connecting to the user endpoint because the events we care about for this tutorial will only affect us as a user. Here are all the endpoints you could connect to:

  • statuses/filter
  • statuses/sample
  • statuses/firehose
  • user
  • site

They each offer different functionality so definitely read up on the Twitter documentation if you’d like to expand the functionality of your bot.

Listening to Events

For the purposes of this tutorial, the only event we want to listen for is the follow event. Remember that we want to automatically reply to the user thanking them for following our account. Let’s attach listeners:

After passing in the name of the event you want to listen to, you also pass in a callback function to be called when the event occurs. We also added in a listener on errors so that we can handle them if they occur.

Now let’s define those two callback functions:

When a follow event occurs, it fires the onFollowed callback function. Inside it we extract the information that we know we will need which is the user’s name and screen name, or Twitter handle. From there we construct our response message which is simply a generic thank you message with their screen name and name embedded in it.

If an error occurs at any point, we simply throw the error immediately. However, you could totally handle this another way if you’d like.

At the end there, we do a simple console.log so that we can see in real-time if we were just followed in the time the bot was running. You could perhaps improve this by adding a timestamp to the log so you also know exactly when you gained a new follower, but that’s completely optional!

Now to finish this bot we must tweet a reply to the user that followed.

Automatically Tweeting with Twit

Tweeting using twit is extremely simple. We just have to call the post method on our twit instance, tell it what we want to post (in this case, a tweet/status), pass in what we want to tweet (our response text), and then finally a callback function.

This looks like this:

If you’re curious where statuses/update comes from, the Twitter docs for it does a great job explaining it! For example, if you wanted to instead send a direct message to a user, you would instead use direct_messages/new .

Now that we have told twit to tweet out our response, we just to need to define the onTweeted callback function and our bot is complete:

If an error occurred, then we log it to our console, otherwise we log the exact thing we tweeted. This is useful if you decide you want to go from a static thank you message to a more dynamic one. By logging what you tweeted, you can ensure your bot is sending the messages you intend for it to send because the response is coming straight from Twitter itself.

Running your Twitter Bot

After you have saved all your files, run this command to start your bot:

As like before, if successful you should see:

Our Twitter bot in action.

Here is the entire index.js file for our twit-powered Twitter bot:

Conclusion

In this tutorial we have seen how we can use Node.js and the twit npm module to create a simple Twitter bot that automatically responds to users that follow an account. Twit is powerful and can do much more than simply tweet out, including retweeting and liking other tweets. For more information, check out their docs and see how you can take this simple bot and make something more advanced and intricate.

We hope this tutorial has been helpful to you. Thanks for reading!

Resources

DISCLAIMER: Twitter has rules on automation and bots so while you’ll be completely fine using the code provided in this tutorial, just keep in mind if you expand the functionality of your bot that you remain within their rules. We cannot and will not be held liable for any actions Twitter takes against your account as a result of any bot you create using the code provided here.

If you learned from this tutorial, follow us on Facebook, Twitter and LinkedIn! �� Also, join the conversation over at our official forum!

Give feedback on this page , leave a comment below, or join our forum !

Build a simple Twitter Bot with Node.js in just 38 lines of code

Tutorials don’t have to be complicated. Together we’ll build a simple Twitter favorite bot with Node.js in just 38 lines of code.

This is the first post in a multi-part series. In future posts, I’ll show you how to add more advanced functionality to our bot. For now, we’re going to build a very simple Twitter bot that favorites anyone who tweets about a certain subject.

EDIT — Part 2 has been posted : Build a simple Node.js Twitter Bot Part 2: Do More . To stay up to date on future articles, please enter your email here if you’d like to be added to my once-weekly email list.

Before we get started, all of the code for this tutorial can be found in my GitHub Repository

Ready? Let’s do it. Here’s what we’re going to need:

  • Twitter API : If you have a Twitter account, you can utilize the Twitter API. You can read the API Documentation here.
  • Node.js: Visit the official Node.js website to download and install Node if you haven’t already. Looking for a more in-depth tutorial? Check out my Top Three Node.js courses.
  • Twitter NPM : An NPM module that allows to easily interact with the Twitter API.

Create an Application

First thing’s first: The only reason this bot will work is because of the Twitter API. On the most basic of levels an API is simply a way for one program to interact with another. We’ll be creating a Node.js application that interacts with the Twitter API. In this application, the API will allow us to search for tweets, and favorite the tweets that our application finds.

To use the Twitter API, we need some information! Head on over to the Twitter API and create a new application.

You’ll have to fill out some information, then look for the following information under the Keys and Access Tokens tab. You may have to click Generate Access Token to create your access token.

  • Consumer Key
  • Consumer Secret
  • Access Token Key
  • Access Token Secret

Once you see these four pieces of information, you’re ready to move on to the next section.

Configuration

Now that we have the application information we need, lets set up our bot.

  1. Create an empty directory named twitter-bot and run:

2. Fill out the required information to initialize our project.

Here’s what my package.json file looked like after initializing my project. Note: Yours may look slightly different, that’s OK.

3. Next, we’ll save our one needed dependency by running:

4. Create two files, config.js and app.js

Our config.js file will store the configuration information. The app.js file will contain our twitter bot code.

5. Let’s add the twitter application information from above to our config.js file. Replace each of the blanks below with your corresponding app data that you got from Twitter.

6. We can now require our two dependencies in our app.js file:

7. Now that we have all the puzzle pieces, it’s time to bring everything together. We do this by passing our configuration details into Twitter . Add the following code to app.js

At this point we have our configuration all set up. Our application details (which are necessary to interact with the Twitter API) are being passed into the npm module Twitter . This npm module simplifies the process of interacting with Twitter’s API. Now we can make get and post requests to the API which is what allows us to ‘do things’ on Twitter via our bot!

Build the Bot

Remember, we’re starting very simple with this tutorial. Let’s visualize the flow of favoriting a tweet: There are two parts. First, you search for Tweets, then you select one and favorite it. Lets work on the search functionality first:

We’re going to set up a params variable which will house our search parameters. There are a lot of parameters we can use. You can see the full list on Twitter’s API documentation here.

q is the only required parameter and it stores our search query. In my example we’re searching for tweets containing #nodejs. Feel free to change this to whatever query you’d like.

I also use three optional search parameters:

count — specify the number of tweets you’d like to return

result_type: ‘recent’ — returns only the most recent results


lang: ‘en’ — returns only English results

Now that we have our search parameters we plug them into a get request so we can find some tweets!

To gain a deep understanding of what is happening here, you’ll need to read the Twitter API Documentation on GET search/tweets, but I’ll try and provide a basic introduction:

With the help of the npm Twitter module, we are able to make a get request to ‘search/tweets’ and pass in our search params we set previously. This get request returns a callback. If there is no error in this callback, we will run our code to favorite a tweet. If there is an error, we will log the error and be done.

Awesome, so now we just need some code to add into our if(!err) statement above!

Our get request is returning an array of multiple tweets via the data.statuses object. So we need to loop through all of the tweets in that array and favorite each one individually. Here’s how we do that:

  1. We create a for loop and loop each and every tweet (until we’ve reached the length of data.statuses ).
  2. Ins >for loop we capture the tweet >data.statuses[i].id_str . We need this >favorites/create . This is the API route that is used to favorite a tweet. We pass in our tweet >It’s done! Run your bot in the command line with node app.js

That’s it! Watch in glory as your bot favorites and logs each tweet url out!

Full Code

Here’s what the full app.js file looks like. I also have all the code on my GitHub, so head over there if you want a way to easily download and play with the bot!

Coming Soon

Here’s a list of possible enhancements and additions we can make to our twitter bot. What do you want to learn? Tweet me @BrandonMorelli to let me know and I’ll cover it in Part 2 of this series! Also, I publish a few articles and tutorials each week, please consider entering your email here if you’d like to be added to my once-weekly email list.

  • Add retweet functionality
  • Reply to tweets on a certain subject/hashtag
  • Reply to users if they follow you
  • Follow Bot
  • Run the bot on a server (instead of locally)

Twitter Bot Node.js и пакет Twit

ПРОБЛЕМА

Так что я пытаюсь создать Twitter-бота, и все шло хорошо, пока я не попытался автоматически отвечать пользователям, которые следуют за мной. Я учусь и смотрю из этого учебника Twitter Bot (CINK) по обучению, но я, похоже, получаю эту ошибку (ФОТО), даже несмотря на то, что сделал все точно так же.

Я использую:

  • Node.js
  • NPM
  • Командная строка Windows CMD
  • Возвышенный текст 3

Импорт пакетов

Настройка потока.

Я верю, что ошибка находится где-то в части потока, но я не понимаю. я сделал все то же самое, что и видео. Может быть, твиттер заблокировал это от их API? IDK, о чем я говорю, но любая обратная связь будет потрясающей.

Как создать Meetup+Slack приложение с помощью Standard Library и Node.js

Meetup — это популярный веб-сайт, на котором люди со схожими интересами объединяются в группы для организации тематических мероприятий в своих городах. После того, как мы успешно отправим запрос в API Meetup, мы получим ответ, извлечем конкретные данные из полезной нагрузки JSON (JSON payload), а затем отобразим эти данные в Slack. Мы разработаем дополнение к приложению Slack, которое будет отображать название события, его описание, дату, время, место проведения и многое другое!

Как все устроено:

Когда вы отправляете /nextmeetup 94709&javascript (или любой другой индекс и интересующую тему) в Slack, будет запущен вебхук (прим. ред.: Webhook — это метод расширения или изменения поведения веб-страницы или веб-приложения с помощью пользовательских обратных вызовов). Webhook, созданный и размещенный в Standard Library, сначала отправит запрос в API Meetup, который вернет полезную нагрузку JSON с результатами запроса.

Затем webhook создаст Slack сообщения для каждого события и отправит их на указанный канал.

А теперь подробно, шаг за шагом, мы все это разберем и объясним!

Что нам потребуется:

Шаг 1: Настройте свое Slack-приложение

Убедитесь, что вы вошли в Slack, а затем посетите Slack Apps Dashboard по адресу https://api.slack.com/apps. Вы увидите экран, который выглядит примерно следующим образом:

Нажмите “Create New App”. Появится модальное окно, в котором вам будет предложено ввести имя вашего приложения и пространство разработки Slack, к которому вы хотите добавить его.

Нажмите «Create App» и вы окажетесь на странице с основной информацией — “Basic Information”.

Прокрутите вниз до “Display Information”. Здесь вы можете задать своему Slack приложению имя, описание и изображение.

Держите страницу с основной информацией открытой в вашем браузере; мы будем использовать ее в дальнейшем, чтобы извлечь учетные данные из вашего Slack приложения для подключения этого приложения к бэкенду, размещенному в Standard Library, — коде, запускающем ваше приложение.

Шаг 2: Создание бесплатной учетной записи в Standard Library

Мы разместим код нашего Slack приложения в Standard Library — коде, который будет запрашивать и получать конкретную информацию из Meetups API. Поэтому зайдите в Code on Standard Library и зарегистрируйте бесплатный аккаунт.

Шаг 3: Скопируйте и измените шаблон Slack приложения в Standard Library

После того, как вы войдете в систему или зарегистрируетесь, вы попадете во «Featured API Source». Это шаблоны кода, доступные в Standard Library. Вам нужно выбрать один из шаблонов и изменить его, чтобы создать API, который будет работать со Slack приложением.

Введите уникальное имя для вашего API и нажмите «Оkay».

Краткое объяснение шаблона:

Отлично! Давайте на минуту остановимся, чтобы понять, с чем мы имеем дело. Левая боковая панель показывает структуру вашего API проекта, которую Standard Library настроила для создания Slack приложений.

Шаблон состоит из четырех директорий. В этой статье мы будем работать только с директорией functions , которая содержит в себе еще три директории: actions/, commands/, and events/ , а также один файл __main__.js. Все инструкции для Slack-действий, команд и событий вашего приложения содержатся именно в них.

При развертывании API-интерфейса, Standard Library автоматически создаст конечные HTTPS (URL-адреса) для каждой директории. Полученные URL-адреса позволят нам конфигурировать вебхуки, которые слушают и реагируют на Slack действия, команды и события.

Все пять папок, включая папку functions , настроены с помощью файла __main__.js . Эти конечные точки файла __main__.js отправляют соответствующие функции, когда получают сообщения от Slack. В этой статье файл __main__.js будет отправлять конечные точки commands , когда мы будем вызывать наш API, через наш Slack Bot. Теперь вернемся к настройке нашего бота!

Шаг 4. Добавление команд в Standard Library API

commands: директория commands — это конечная точка для всех Slack слэш-команд. Создайте дополнительную команду, поместив курсор на директорию commands и щелкните правой кнопкой мыши. Выберите «New File», назовите ваш файл nextmeetup.js и нажмите «Оkay».

Здесь вы увидите автоматически сгенерированную JavaScript-функцию “hello world” внутри __main__.js .

Замените содержимое файла nextmeetup.js следующим кодом:

Краткое пояснение кода:

Когда вы отправляете /nextmeetup с помощью приложения Slack, в API Meetup отправляется запрос GET:

Каждый запрос к Meetups API должен быть аутентифицирован API ключом, поэтому мы передаем наш ключ Meetup из нашего файла env.json в наш запрос. Также мы отправляем наш запрос GET с двумя параметрами: zip и topic.

Meetup API возвращает массив объектов событий, который мы можем просмотреть, зарегистрировав наш ответ: console.log(response.data . Вкладка “Logs” находится под разделом отладки (Debug).

response.data — это массив событий, соответствующий вашему запросу. Мы хотим создать два параметра для каждого события (для местоположения и темы). У нас есть функция formatAttachement , которую мы можем вызвать для каждого из событий. Результаты помещаются в массив, называемый attachments , который затем отправляется в Slack.

После того, как вы скопировали и вставили код в свой файл nextmeetup.js , сохраните изменения и перейдите к файлу env.json в баре слева (бар со структурой вашего API).

Шаг 5: Заполнение файла env.json пользовательскими данными и ключами приложения

Внутри env.json вы заметите переменные среды для вашего API. Вы можете установить различные значения для локальной среды, среды разработки и релизной среды. В этом файле будут храниться все ваши уникальные ключи доступа к учетной записи Standard Library, учетной записи Meetup и учетным данным приложения Slack.

Мы будем вносить изменения только в переменные среды «dev» (среда разработки)! Обратите внимание, что значения «dev” предназначены для вашей среды разработки, а значения «release» следует заполнять только тогда, когда вы готовы выпустить приложение. “local” переменные можно оставить пустыми при развертывании из Standard Library, но они должны быть заполнены при работе с инструментами командной строки.

Начнем с заполнения переменной “STDLIB_TOKEN” . Поместите курсор между кавычками (смотрите скриншот), щелкните правой кнопкой мыши и выберите “Insert Library Token”(Вставить библиотечный токен) или используйте сочетание клавиш ⌘ + K.

Выберите Library Token, чтобы заполнить среду «dev» (разработки).

Затем вернитесь на страницу «Basic Information» своего Slack-приложения и прокрутите вниз до «App Credentials»:

Скопируйте свой Client ID, Client Secret, и Verification Token. Вставьте их в соответствующие поля в разделе “dev” файла env.json .

Добавьте имя, которое вы дали своему Slack приложению в SLACK_APP_NAME .

“SLACK_REDIRECT” будет конечной точкой https, созданной Standard Library, после развертывания API. Мы еще не развернули наш API, однако попробуйте заполнить его сейчас, используя эту структуру. https:// .api.stdlib.com/@dev/auth/ —с именем вашей библиотеки и именем API. После того, как мы развернем наш API, вы можете вернуться, чтобы подтвердить правильность указанных значений.

Мой SLACK_REDIRECT выглядит следующим образом: https://Janethl.api.stdlib.com/ [email protected] /auth/ —убедитесь, что вы добавили путь аутентификации в конце.

Возможности и разрешения вашего приложения Slack будут настроены для следующих областей:

Последняя переменная, которую вам нужно будет добавить— это ваш ключ API Meetup. Meetup требует, чтобы каждый запрос аутентифицировался с помощью ключа API (API key).

Шаг 6: Получение ключа API Meetup

Войдите или зарегистрируйтесь на Meetup.com. Перейдите по адресу https://secure.meetup.com/meetup_api/key/, чтобы получить уникальный ключ API. Нажмите на замок, чтобы открыть свой ключ API и затем скопируйте его.

Вернитесь в файл env.json на Code on Standard Library и добавьте ваш ключ Meetup в качестве значения переменной ключа, так же, как и здесь:

Обязательно сохраните изменения в файле с помощью “⌘ + s “(или нажмите «Сохранить» в правом нижнем углу).

В боковом меню находится файл __main__.js , расположенный под директорией событий. Разверните код приложения Slack в Standard Library, нажав «Run» (выполнить).

  • Вскоре после развертывания, Standard Library создаст URL-адрес конечной точки API HTTPS, в котором будет находиться ваш код. Этот адрес будет состоять из вашего .api.stdlib.com, за которым следует имя, которое вы дали своей API @ the environment:https://janethl.api.stdlib.com/ [email protected] /

Теперь у нас есть URL-адрес, который позволит нам отправлять и получать сообщения из нашего приложения Slack в API Meetup. Теперь нам нужно установить наш URL как webhook в Slack, так что давайте вернемся к панели инструментов приложения Slack.

Шаг 7: Создайте новую слэш-команду и установите Webhook

Что такое Webhook?
Возможно, вам станет понятнее, что такое webhook, если мы сравним его с API. API основаны на запросах — это означает, что они работают, когда будет сделан запрос из стороннего приложения. Webhook же основан на событиях — он запускается, когда его вызывает определенное событие.

Чтобы установить Webhook, сервис-провайдер должен разрешить своим пользователям регистрировать URL-адрес, по которому провайдер может отправлять информацию при возникновении события. В нашем примере Slack позволяет зарегистрировать наш URL-адрес, и после регистрации слэш-команда может запустить наш webhook, который выполнит код в нашем URL.

Теперь, когда мы разобрались с этим, перейдем на страницу API Slack, чтобы настроить наш webhook. Найдите и выберите Slash Commands в сайдбаре.

После нажатия «Create New Command» вас попросят ввести данные вашей команды, для этого примера используйте:

Short Description: retrieves Meetup events

Шаг 8. Включите OAuth и разрешения

Вернитесь к своему Slack приложению. В боковом меню выберите OAuth & Permissions.

Здесь вам нужно будет ввести URL-адрес перенаправления следующим образом: https:// .api.stdlib.com/ @dev/auth/

нажмите «Add» и «Save URLS».

Этот URL-адрес должен соответствовать URL-адресу, который мы указали в файле env.json в Standard Library.

Шаг 9: Добавляем бота в наше Slack приложение

Вернитесь на страницу Slack App и нажмите «Bot Users» в сайдбаре. Нажмите “Add Bot User”. Все настройки оставьте по умолчанию.

Последний шаг — авторизация приложения. Введите в вашем браузере следующее: https:// .api.stdlib.com/@dev/

Нажав кнопку “Add to Slack”, вы попадете на экран авторизации.

Нажав “Authorize”, вы должны увидеть сообщение об успешной авторизации

Шаг 10: Протестируем наше Slack Meetup-приложение

Вы все сделали. Теперь ваше Slack-приложение доступно для использования в Slack. Ваше приложение Slack должно отвечать на /nextmeetup & , как на скриншоте выше.

Мастер Йода рекомендует:  С чего начать дизайн пользовательского интерфейса
Добавить комментарий