de Shawn Toubeau

Cum am construit un bot pe Twitter care generează versuri de melodii

Cum am construit un bot pe Twitter care genereaza versuri
Fotografie de israel palacio pe Unsplash

În acest articol, voi trece în revistă modul în care mi-am construit botul liric pe Twitter și cum veți putea să vă configurați propriul.

Procedură

Iată o listă a componentelor pe care trebuie să le configurăm.

  1. Cont Twitter
  2. Editor de text / IDE
  3. Botul
  4. Heroku Automation

Configurați o nouă aplicație Twitter

Pentru a crea o nouă aplicație Twitter, accesați aici. Va trebui să solicitați acces pentru dezvoltatori. După ce trimiteți cererea, poate dura ceva timp, dar Twitter vă va anunța când veți fi acceptat.

Setup Editor / IDE

Acum veți dori să vă configurați editorul. Preferința mea este codul VS, deci asta voi folosi.

ad-banner

Asigurați-vă că aveți Git și Node instalate.

Continuați să clonați următorul depozit git pe computer.

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

Codul de mers pe jos

Cele 3 fișiere principale din care constă botul sunt bot.js, lyrics.txt și .env.

Notă marginală: Clona dvs. a proiectului nu va conține un fișier .env din cauza .gitignore, astfel vom crea propriul nostru mai târziu în articol!

bot.js

Începând cu bot.js, începem prin importul Twit, fs și dotenv.

Twit este un modul care acceptă Twitter Developer API.

Fs sau sistemul de fișiere este un nodul I / O de fișiere care ne permite să interacționăm cu fișierul lyrics.txt.

Dotenv este un modul care citește în variabilele de mediu stocate în fișierul nostru .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 este obiectul care ține evidența aparițiilor substring, astfel încât să putem folosi o probabilitate pentru a genera propriile versuri aleatoriu. Puteți citi mai multe despre ele aici.

Și Bot este … ei bine … Botul nostru! Trebuie să definim câteva variabile pentru a-l face să funcționeze. Folosind modulul dotenv, putem prelua valorile stocate în fișierul nostru .env.

În continuare definim câteva funcții după cum urmează:

pickRandomStart ()

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

Aceasta selectează punctul de plecare pentru locul în care luăm primul nostru n-gram.

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));
  }
}

Aceasta creează modelul care urmărește ordinea și aparițiile tuturor n-grame analizate din versuri. Prin utilizarea numărului de apariții ca probabilitate a n-gramului, ne permite să generăm versuri noi într-o ordine aleatorie.

tweet ()

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);
        };
      });
    }
  });
}

Nu în ultimul rând, aceasta este partea care interacționează cu botul. Începe prin citirea versurilor folosind modulul fs și apoi creează modelul n-gram folosind variabila versurilor. Selectează un punct de plecare aleatoriu pentru a fi utilizat ca primul n-gram care va fi începutul versurilor noi. Efectuează o verificare pentru a vedea dacă primul n-gram conține doar caractere alfanumerice, deoarece atunci are șanse mai mari să înceapă ceva mai sensibil.

Apoi lanțează n-grame selectate aleatoriu care se împerechează cu ultimul n-gram adăugat la variabila tweet. Face acest lucru pentru cel puțin 150 de caractere și, ca înainte, efectuează o verificare pentru a vedea dacă se va termina pe un n-gram alfanumeric. Dacă nu se termină pe un n-gram alfanumeric, atunci va păstra înlănțuirea de la model până când va ajunge.

Și, în cele din urmă, robotul face o cerere de postare cu versurile ca încărcătură utilă pe tweet.

Acum, că avem o idee bună despre cum funcționează codul nostru, rulați următoarea comandă:

npm install

în dosarul proiectului lyric-bot.

Aceasta instalează modulele necesare () // și explică ce face npm install.

Configurare

Acum veți dori să copiați un set de versuri în fișierul lyrics.txt.

Apoi creați un fișier .env. Aceasta va stoca jetoanele dvs. API Twitter.

În noul fișier, lipiți următoarele:

TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=

și copiați jetoanele respective din consola pentru dezvoltatori a aplicației dvs., după ce ați aprobat aplicația pentru dezvoltator.

Este timpul să-l testați!

Tip

node bot.js

Și aruncă o privire la consolă!

Cum am construit un bot pe Twitter care genereaza versuri
Eșantion de lirică creat din Dailily de Movements

Și verificați și contul Twitter, desigur:

1611521765 180 Cum am construit un bot pe Twitter care genereaza versuri
Tweetul trimis de la bot către API-ul Twitter

TA DA!

Acum aveți un bot pe Twitter care funcționează, care este capabil să posteze versuri de melodii nou generate! ?

Stai, totuși, trebuie să-l automatizăm …

Implementare Heroku

Du-te la Heroku.com și autentificare. Dacă nu aveți un cont, puteți crea unul gratuit! ?

Acum, din tabloul de bord principal, creați o aplicație nouă făcând clic pe Nou-> Creați o aplicație nouă.

Introduceți un nume disponibil, apoi faceți clic pe Creați aplicație.

Iată principalul panou de control al aplicației!

Dacă derulați în jos în fila „Deploy”, veți vedea instrucțiunile pentru „Deploy using Heroku Git”. Urmați pașii de aici și, după ce ați implementat cu succes aplicația, continuați cu pasul următor.

Automatizare

Mergeți la fila „Prezentare generală” și faceți clic pe „Configurare programe de completare”. Apoi, în bara de căutare a suplimentului, tastați „Heroku Scheduler” și selectați-l. Se va afișa o casetă de dialog, apăsând „Provision”.

Odată adăugat, puteți face clic pe add-on și puteți crea aceste lucruri numite „joburi”. Joburile sunt în esență sarcini care sunt executate de Heroku Scheduler.

Veți dori să faceți clic pe „Adăugați o lucrare nouă” și va apărea o fereastră de configurare. În opțiunea de comandă, tastați următoarele:

node bot.js

și selectați frecvența pe care doriți să o rulați. După ce ați terminat, faceți clic pe Salvați.

Și cu aceasta ați implementat cu succes un bot liric Twitter! ?

Mulțumiri

Majoritatea codului pentru crearea textului personalizat este creditat la Daniel Shiffman. Puteți găsi materialul său aici!

Datele lirice pe care le-am folosit în acest articol au fost prelevate dintr-un cântec numit Daylily by Movements.

Mulțumesc Morgan Allgrove-Hodges pentru că am dat feedback și am remediat greșelile mele gramaticale stupide! ?

Conectează-te cu mine pe LinkedIn sau urmează-mă Stare de nervozitate! Îmi place să fac noi conexiuni?

~ Shawn Toubeau