Как я создал бота для Twitter, который создает тексты песен

1656548770 kak ya sozdal bota dlya twitter kotoryj sozdaet teksty pesen

от Шона Тубо

-cYs1OPrIZOA9dDdAY9oZ8Ykgx92QSYQXWlX
Фото israel palacio на Unsplash

В этой статье я расскажу, как я создал свой лирический бот в Twitter и как вы сможете настроить свой собственный.

Процедура

Вот список компонентов, которые мы должны настроить.

  1. Учетная запись Twitter
  2. Текстовый редактор/IDE
  3. бот
  4. Автоматизация Heroku

Настройте новую программу Twitter

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

Редактор настроек/IDE

Теперь вы захотите настроить свой редактор. Я предпочитаю VS Code, поэтому это то, что я буду использовать.

Убедитесь, что у вас установлен Git и Node.

Продолжайте клонировать следующий репозиторий git на свой компьютер.

git clone https://github.com/ShawnToubeau/lyric-bot.git

Code Walk Trough

3 основных файла, из которых состоит бот, это bot.js, lyrics.txt и .env.

Примечание: Ваш клон проекта не будет содержать файл .env через .gitignore, поэтому мы создадим собственный позже в статье!

bot.js

Начиная с bot.js мы начинаем с импорта Twit, fs и dotenv.

Twit – это модуль, поддерживающий API разработчика Twitter.

Fs, или файловая система, – это узел ввода-вывода файлов, который позволяет нам взаимодействовать с нашим файлом lyrics.txt.

Dotenv — это модуль, считывающий переменные среды, хранящиеся в нашем файле .env.

const Twit = require('twit');
const fs = require('fs');
require('dotenv').config();
const order = 4; // length of each n-gram
let nGrams = {};
const Bot = new Twit({
  consumer_key: process.env.TWITTER_CONSUMER_KEY,
  consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
  access_token: process.env.TWITTER_ACCESS_TOKEN,
  access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
});

nGrams – это объект, который отслеживает случаи подстроки, чтобы мы могли использовать вероятность для случайного генерирования собственных текстов. Подробнее о них можно прочесть здесь.

А бот – это… ну… наш бот! Нам нужно определить некоторые переменные, чтобы он работал. Используя модуль dotenv, мы можем получить значения, сохраненные в нашем .env файле.

Далее мы определяем несколько функций следующим образом:

выбрать RandomStart()

function pickRandomStart(lyrics) {
  const random = Math.floor(Math.random()*lyrics.length)
  return lyrics.substring(random, random + order)
}

Это выбирает отправную точку, где мы захватываем наш первый n-грамм.

makeEngramModel()

function makeEngramModel(lyrics) {
  for (let i = 0; i < lyrics.length - order; i++) {
    const gram = lyrics.substring(i, i + order);
    if (!nGrams[gram]) {
    nGrams[gram] = [];
    }
    nGrams[gram].push(lyrics.charAt(i + order));
  }
}

Это создает модель, отслеживающая порядок и вхождение всех n-грамм, разобранных из текста. Используя количество встреч в качестве вероятности n-грамма, это позволяет нам генерировать новые тексты в случайном порядке.

твит ()

function tweet() {
  fs.readFile('lyrics.txt', 'utf8', function(error, lyrics) {
  if (error) {
  console.log(error.message);
  } else {
    makeEngramModel(lyrics);
    let currentGram = pickRandomStart(lyrics);
      // checks to see if the start of the tweet doesn't start
      // with punctuation or special characters and ends with a space
      while (!currentGram.match(/^[0-9a-zA-Z]+$/)) {
        currentGram = pickRandomStart(lyrics);
      }
      let tweet = currentGram;
      // runs until char limit is reached while finishing the last word it was on
      for (let j = 0; (j < 150) || (tweet.charAt(j).match(/^[0-9a-zA-Z]+$/)); j++) {
        const possibilities = nGrams[currentGram];
        const next = possibilities[Math.floor(Math.random()*possibilities.length)];
        tweet += next;
        const len = tweet.length;
        currentGram = tweet.substring(len-order, len);
      }
      console.log(tweet)
      Bot.post('statuses/update', {status: tweet}, function(error, tweet, response) {
        if (error) {
          console.log("Error making post. ", error.message);
        };
      });
    }
  });
}

И последнее, но не менее важно, это часть, взаимодействующая с ботом. Она начинается с чтения текстов песен с помощью модуля fs, а затем создается n-граммовая модель с помощью переменной lyrics. Он выбирает случайную начальную точку для использования в качестве первого n-грамма, который будет началом нового текста. Он выполняет проверку, чтобы увидеть, содержит ли первая n-грамма только буквенно-цифровые символы, потому что тогда у нее есть большие шансы начать несколько умнее.

Затем он объединяет случайно выбранные n-граммы, сочетающиеся с последними n-граммами, добавленными к переменному твиту. Он выполняет это не менее 150 символов и по-прежнему выполняет проверку, чтобы увидеть, закончится ли он на буквенно-цифровой n-грамм. Если он не заканчивается на буквенно-цифровой n-грамм, он будет связываться с моделью, пока не сделает это.

И, наконец, бот делает запрос на сообщение с текстом песни как полезной нагрузкой для твита.

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

npm install

в папке проекта lyric-bot.

Это устанавливает необходимые модули() // и объясняет, что делает npm install.

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

Теперь вы хотите скопировать набор текстов песен в файл lyrics.txt.

Затем создайте файл .env. Здесь будут храниться ваши маркеры API Twitter.

Вставьте внутрь нового файла следующее:

TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=

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

Пора проверить это!

Тип

node bot.js

И посмотрите на консоль!

9n4D549XRgXATvMh5rHdoh6mz5KfSq4QSKS-
Образец лирики, созданный Movements от Dailyly

И, конечно, проверьте аккаунт Twitter:

QlJ4o4NGqHCfCdLnporB-IcYc80I5zce9ZSN
Твит, отправленный от бота к API Twitter

ТА ДА!

Теперь у вас есть рабочий твиттер-бот, который может публиковать недавно созданные тексты песен! ?

Подождите, нам все еще нужно автоматизировать это…

Развертывание Heroku

Перейдите к Heroku.com и войдите. Если у вас нет аккаунта, вы можете создать бесплатный! ?

Теперь на главной информационной панели создайте новую программу, нажав Создать->Создать новую программу.

Введите доступное имя и нажмите кнопку Создать приложение.

Вот главная панель управления вашего приложения!

Если вы прокрутите вниз на вкладке «Развертывание», вы увидите инструкции по «Развертыванию с помощью Heroku Git». Выполните следующие действия, а после успешного развертывания программы перейдите к следующему шагу.

Автоматизация

Перейдите на вкладку «Обзор» и нажмите «Настроить надстройки». Затем в строке поиска надстройки введите «Планировщик Heroku» и выберите его. Появится диалоговое окно, нажмите кнопку «Добавить».

После добавления можно нажать на надстройку и создать такие вещи, которые называются «роботами». Работы по сути являются задачами, которые выполняет Heroku Scheduler.

Вам нужно нажать «Добавить новое задание» и появится окно настройки. В параметре команды введите следующее:

node bot.js

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

И благодаря этому вы успешно развернули лирический бот Twitter! ?

Благодарности

Большинство кода для создания пользовательского текста приписывается Дэниелю Шиффману. Его материал можно найти здесь!

Тексты, которые я использовал в этой статье, взяты из песни под названием Daylily от Movements.

Большое спасибо Моргану Олгроув-Ходжесу за отзыв и исправление моих глупых грамматических ошибок! ?

Свяжитесь со мной на LinkedIn или следите за мной в Twitter! Я люблю заводить новые связи?

~ Шон Тубо

Добавить комментарий

Ваш адрес email не будет опубликован.