Медиум полон сообщений о твиттер-ботах. Зачем еще один пост бота? 🤔 🤔 Chill 😎 мы будем учиться создавать полнофункциональный Twitter Bot, который может захватывать случайные цитаты и твитнуть их самостоятельно. Мы развернем нашего бота на heroku и встроим временную шкалу твиттера на наш статический веб-сайт.
Что будет делать этот бот?
Это простой бот для Twitter, который будет извлекать цитаты из Formastic Api и публиковать цитаты с # кавычками и смайликами. Этот бот любит пост #Nature и транслирует твит о Непале в командной строке.
Что вам нужно?
- В вашей системе должен быть установлен Node.js.
- Учетная запись Twitter.
- Ваш бот будет использовать node-twitter, который представляет собой модуль npm для управления твитами и потоками, а также для связи с Twitter API.
- Учетная запись Heroku, которая представляет собой платформу как услугу (PaaS), без особых усилий обслуживает и размещает наши веб-приложения.
Давайте начнем
Создайте новую папку и инициализируйте ее с помощью npm init -f, который инициализирует файл package.json с настройками по умолчанию, или используйте npm init.
Создайте index.js и tweet.js, которые будут нашим сервером и сценарием твита соответственно.
Ваша текущая структура каталогов должна выглядеть так:
root/Twitter_bot |- index.js |- tweet.js |- package.json
Создайте папку внутри Twitter_bot в качестве конфигурации, в которой у нас будет секрет нашего приложения от Twitter API.
Папка config выглядит так:
root/Twitter_bot/config |- dev.js |- keys.js |- prod.js
Настройка и предоставление разрешений из Twitter API
После входа в свою учетную запись Twitter перейдите по этой ссылке: https://apps.twitter.com/app/new, чтобы создать новое приложение. Заполните необходимые поля в форме, нажмите кнопку Create Your Twitter Application. После создания приложения найдите Ключи и токены доступа под панелями навигации и нажмите Создать действия с токенами, а затем скопируйте:
- Потребительский ключ
- Потребительский секрет
- Токен доступа
- Секрет токена доступа
Откройте dev.js
file и вставьте в него все четыре значения. Выставьте эти значения с помощью module.export
:
//config.js /** TWITTER APP CONFIGURATION * consumer_key * consumer_secret * access_token * access_token_secret */ module.exports = { consumer_key: '', consumer_secret: '', access_token: '', access_token_secret: '' };
Откройте prod.js
file и вставьте в него все четыре значения.
//prod.js /** TWITTER APP CONFIGURATION * consumer_key * consumer_secret * access_token * access_token_secret */ module.exports={ consumer_key: process.env.TWITTER_CONSUMER_KEY, consumer_secret: process.env.TWITTER_CONSUMER_SECRET, access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY, access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET };
Мы будем использовать это значение позже, чтобы развернуть нашего бота на heroku.
В keys.js
file вставьте эти:
if(process.env.NODE_ENV === 'production'){ module.exports = require('./prod'); } else{ module.exports=require('./dev'); }
Это все, что касается нашего файла конфигурации. Давайте двигаться дальше.
Сборка сервера
При развертывании на heroku и автоматизации твитов нашего твиттер-бота нам понадобится экспресс-сервер.
index.js const express = require('express'); const app = express(); const port = process.env.PORT||5000; app.listen(port,()=>{ console.log(`Server is running at port ${port}`); })
Теперь наш сервер запущен и работает. Теперь мы переключаемся на основную задачу использования twitter API для создания Quote Bot.
Цитата Бот
Мы начнем с установки зависимости, которая нам нужна для нашего приложения.
$ npm install --save twitter
После завершения установки зависимости перейдите к файлу tweet.js
и потребуйте зависимость и файл config.
.
const Hero= require(’twit’); const Keys= require(’.config/keys’);
Передайте конфигурацию (потребителя и токены доступа) нашего приложения Twitter в dev.js
twitter:
const Hero = new Twitter(Keys);
Все идет нормально?
Давайте напишем функциональное выражение, которое находит случайные цитаты из Formastic Api, и разместим эту цитату в Твиттере.
Давайте установим дополнительную зависимость, чтобы получить доступ к Formastic API.
const request = require('request'); const requestPromise = require('request-promise'); const API_URL = 'https://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=json';
Напишем функцию, которая будет фактически получать информацию из API и публиковать твиты.
const getQuote = (() => { /* request options */ const OPTIONS = { uri: API_URL, json: true }; requestPromise( OPTIONS ) /* Successful call */ .then( (response) => { if ( !response ) getQuote(); let quoteText = response.quoteText; let author = response.quoteAuthor || “Unknown”; let fullQuote = `”${quoteText}”` + “ — “ +` ${author}` printQuote( fullQuote ); Hero.post(‘statuses/update’, {status: fullQuote+’😊😊 #Quotes’}, function(error, tweet, response){ if(error){ console.log(error); } console.log(tweet); // Tweet body. console.log(response); // Raw response object. }); }) /* Handling errors */ .catch( (err) => { console.log(“Unable to retrieve quote, try again”); }) })(); let printQuote = (fullQuote) => { console.log( fullQuote ) }
Любимый бот
Мы инициализируем объект params
, который будет содержать различные свойства для поиска твита, но, что наиболее важно, свойство query
или q
, которое уточнит наш поиск. Какое бы значение вы ни указали в этом свойстве, наш бот будет искать твиты в избранное на основе этого критерия. Для нашего примера бота мы нашли последние твиты на #nature. result_type:'mixed recent'
найдет недавний и популярный твит в параметрах поиска и добавит его в избранное.
const params = { q: ‘#Nature’, result_type: ‘mixed recent’, lang: ‘en’ }
Функциональная часть Favorite Bot
Hero.get('search/tweets', params, function(err, data, response) { // If there is no error, proceed if(!err){ // Loop through the returned tweets for(let i = 0; i < data.statuses.length; i++){ // Get the tweet Id from the returned data let id = { id: data.statuses[i].id_str } // Try to Favorite the selected Tweet Hero.post('favorites/create', id, function(err, response){ // If the favorite fails, log the error message if(err){ console.log(err[0].message); } // If the favorite is successful, log the url of the tweet else{ let username = response.user.screen_name; let tweetId = response.id_str; console.log('Favorited: ', `https://twitter.com/${username}/status/${tweetId}`) } }); } } else { console.log(err); } })
Тада, ты создал своего твиттер-бота !!
Теперь в вашем index.js
файле просто укажите tweet.js
as:
require('./app');
index.js
должен выглядеть так
const express = require('express'); const app = express(); require('./app'); app.use(express.static('public')); const port = process.env.PORT||5000; app.listen(port,()=>{ console.log(`Server is running at port ${port}`); })
В файле package.json
добавьте стартовый скрипт как
"scripts": { "start": "node index.js" },
Затем из терминала запускаем npm start
Для развертывания ботов в Heroku
Я предполагаю, что вы знакомы с платформой Heroku. Если не парьтесь, можете прочитать Здесь.
Создайте public
в корневом каталоге и добавьте файл index.html
, а затем внутри index.html
добавьте следующий скрипт встраивания внутри тега body, который просто добавит вашу временную шкалу твиттера.
</style> <a class="twitter-timeline" href="https://twitter.com/CoastQuote?ref_src=twsrc%5Etfw">Tweets by CoastQuote</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <script>
Обратите внимание, что
app.use(express.static('public'));
Это будет служить нашему статическому HTML. Вы также можете сделать полностью динамическим.
GIT и HEROKU
Инициализируйте git для своего проекта, если вы еще этого не сделали.
$ git init $ git add remote origin //From your repo $ git add . $ git commit -m "Quote Bot Finished" $ git push origin master $ heroku create $ git push heroku master $ heroku open //your bot will be live on your browser
Это мой первый средний пост, так что я не вижу ошибок.
Вы можете найти исходный код здесь.