Простой бот для Twitter в 16 строках кода. (Менеджеры социальных сетей НЕНАВИЖУ его!)

Зачем делать твиттер-бота?

Потому что причины.

Нет, правда, почему?

Два дня назад я почти ничего не знал о Node.js, Javascript или командной строке. Я начал исследовать каждую из этих тем, а затем решил убить 3 зайцев одним выстрелом и создать бота для Twitter.

Я неофициально назвал своего Twitter-бота Sisyphus в честь «Мифа о Сизифе» философа Альбера Камю. Обоих разделяет участь выполнять бессмысленную задачу целую вечность, и у них нет другого выбора, кроме как принять абсурдность своего существования.

Вместо того, чтобы толкать валун в гору, я выбрал абсурдную задачу заставить Sisyphus автоматически твитить самые популярные посты Reddit сабреддита /r/politics.

Разве твиттер-боты не зло?

Вау, это робофобия! Кроме того, некоторые из них, я полагаю, хорошие боты. Если вы предпочитаете, чтобы ваш бот в Твиттере делал что-то другое, не стесняйтесь указывать ему другой сабреддит (или API, если уж на то пошло).

Подожди! Разве нет сайтов-ботов для автоматизации твитов?

Нет, ТЫ держись! Эти веб-сайты, хотя и очень просты в использовании, очень ограничены, поскольку они не обеспечивают гибкости нашего бота. Эти веб-сайты ограничены заранее определенными входными и выходными данными.

Бот, который мы делаем, ограничен только нашим воображением.

Хотите научиться ловить рыбу?

Установите Node.js



Мы используем Node.js для запуска нашего бота. Мы не будем использовать веб-сайт или внешний интерфейс.

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

Вы быстро поймете, что командная строка намного быстрее и проще, чем использование GUI (графического пользовательского интерфейса), и удивитесь, почему от нее отказалось большинство населения.

Установить модули

[Я буду использовать модуль фразы и пакет взаимозаменяемо]

Этот веб-сайт является хранилищем полезных пакетов. На момент написания было размещено почти полмиллиона пакетов. Воспользуйтесь функцией поиска. Ищите «Reddit» и «Twitter» для пакетов. Посмотрите, какие пакеты в настоящее время поддерживаются и популярны.

Наш бот будет использовать пакеты «Twit» и «Redditor». Потратьте время, чтобы прочитать и понять предоставленную ими документацию.



Привыкайте постоянно видеть команду «npm». NPM расшифровывается как Node Package Manager. Это помогает нам устанавливать необходимые пакеты, чтобы сократить шаблонный код.

Реддит API

Давайте разберемся с API Reddit и структурой ответа JSON.

Твиттер API

Теперь давайте посмотрим на API Twitter… Шучу. Известно, что документация по API Twitter ужасна! Кроме того, пакет twit облегчит большую часть работы. Конечные точки просты для понимания, а множество примеров отправки и получения запросов, перечисленных в документации twit, великолепны.

Все, что вам нужно, это ваши ключи API. Перейдите на https://dev.twitter.com и войдите в свою учетную запись. Создайте новое приложение. Назовите это как хотите. Если вы не уверены в некоторых полях формы, просто игнорируйте их, так как они не относятся к создаваемому нами боту.

Сгенерируйте и получите ключи API. Скопируйте их в текстовый файл или оставьте вкладку браузера открытой.

Приступаем к кодированию!!!

Изучите командную строку. Для Mac 90% команд одинаковы. Для Linux они уже должны быть гордо вытатуированы.

Перейдите в каталог вашего проекта и инициализируйте:

npm init

Следуйте шагам инициализации. Это создает файл package.json. Этот файл действует как манифест с важной метаинформацией и всеми зависимостями проекта.

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

Установите наши пакеты из репозитория, который мы рассматривали ранее.

npm install twit 

Посмотрите назад в наш файл «package.json». Теперь у нас есть объявленная зависимость twit. Модуль twit теперь установлен в папку «modules».

Теперь установите пакет «redditor» таким же образом:

npm install redditor

В редакторе создайте новый файл для точки входа. Назовите его app.js или как-то так, как вы решили назвать во время процесса «npm init».

[app.js] Импорт зависимостей

const Twit = require("twit");
const Reddit = require("redditor");

Создайте файл [config.js] для хранения наших ключей API.

Почему бы просто не предоставить ключи внутри app.js? Безопасность. Делая ключи внешними по отношению к app.js, можно добиться определенного уровня абстракции, чтобы никто не видел их на виду.

Создайте файл config.js и вставьте свои ключи:

module.exports = {
consumer_key:         ‘...’
,consumer_secret:     ‘...’
,access_token:        ‘...’
,access_token_secret: ‘...’
}

Обратите внимание, что мы определяем module.exports для этого объекта, разделенного запятыми. Это позволяет основной части приложения (app.js) ссылаться на эти ключи. Мы «экспортируем» эти ключи из файла config.js. Затем мы «импортируем» их в файл app.js.

[app.js] распечатать сообщение

console.log(‘Hello, world!’);

[package.json] создайте сценарий запуска

"start": "node app.js"

Добавление этого в «скрипты» позволит нам запускать наше приложение с помощью команды «npm start». Не забудьте разделить их запятыми, если скриптов больше одного!

[cmd.exe]

npm start

Наше «Hello, world!» должно отображаться в командной строке. Прохладный.

Node.js поддерживает все функции ECMAScript2015 (ES6). Мы используем const вместо var. Следите за постом о разнице между var, let и const. А пока существуют Google и Stack Overflow.

[app.js]

Node.js позволяет нам импортировать модули в «app.js», используя этот синтаксис.

const Twit = require(‘twit’); //imports the twit package

Таким же образом импортируйте модуль «redditor».

const reddit = require(‘redditor’);

Импортируйте файл «config.js» в «app.js» и передайте зависимость конфигурации в новый объект Twit «T».

const config = require(‘./config’);
const T = new Twit(config);

Примечание. точка-косая черта (./) предшествует пользовательскому модулю. Это указывает на файл в том же каталоге, что и «app.js». Если бы по какой-то причине нам нужно было импортировать файл выше в структуре каталогов, мы бы использовали нотацию (../). Мы можем указать на любой файл в любом каталоге, используя эти обозначения.

Примечание. Node.js умеет искать обычные сгенерированные модули (Twit и Redditor) в папке модулей, поэтому им не нужно определять свои каталоги.

Вызовите функцию «get» для созданного нами объекта Reddit. Он принимает два параметра: конечную точку субреддита и функцию обратного вызова.

reddit.get(‘/r/politics.json’, function(err, response) {
 if (err) throw err;
 for (i = 0; i < 3; i++) {
 const result = response.data.children;
 const nestedUrls = result[i].data.url;
 console.log(nestedUrls);
}

Выше мы повторили ответ JSON, который возвращает массив (вложенный в несколько объектов). Изучите документацию API Reddit, чтобы узнать, как структурированы ответы JSON.

[cmd.exe]

npm start

Вы должны увидеть первые 3 поста. Прохладный!

Похлопайте себя по спине, у вас есть способ программно получить URL-адреса из Reddit. Но мы еще не закончили! Мы хотим, чтобы они попали в Twitter!

Позвоните в сообщение и передайте «статусы/обновление», чтобы завершить конечную точку API. Я решил объединить статус (твит) с хэштегом «#news». Не забудьте добавить пробел перед хэштегом, чтобы разделить их, чтобы URL-адрес не стал недействительным.

reddit.get(‘/r/politics.json’, function(err, response) {
 if (err) throw err;
 for (i = 0; i < 3; i++) {
 const result = response.data.children;
 const nestedUrls = result[i].data.url;
 console.log(nestedUrls);
 T.post(‘statuses/update’, {
 status: nestedUrls + “ #news”
 }, function(err, data, response) {});
 }
});

Запустите приложение с помощью команды «npm start». Теперь откройте веб-браузер и проверьте свой профиль в Твиттере. Вы должны увидеть, как бот твитнул сам по себе! Пост должен содержать «карточки» изображений, которые генерирует твиттер, поскольку новостные организации следуют передовым методам встраивания тегов социальных сетей в свой html (то же самое верно для Instagram, Facebook и т. д.).

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

Какие еще идеи для ботов у вас есть?