de Kofo Okesola

Cum se creează un bot Twitter de la zero cu Golang

Cum se creeaza un bot Twitter de la zero cu

Deci, un pic de fundal: recent l-am luat pe Golang și am decis să creez un Twitter bot ca proiect secundar. Apoi a venit problema. Există puțină sau deloc documentație despre utilizarea API-ului Twitter cu Golang? (În special părțile de criptare oauth1 și CRC ale acestuia). Deci, după câteva zile de încercare și eroare și, în cele din urmă, finalizarea, vreau să împărtășesc procesul. Sperăm că acest lucru ajută pe cineva acolo.

Ce vom construi?

Vom construi un bot Twitter care va fi servit de pe mașina noastră locală. Acesta va răspunde la orice tweet care este etichetat cu o „lume bună”.

Iată o scurtă explicație cu privire la ce va face acest program go. O sa:

  • Ascultați și răspundeți la webhook Validare CRC.
  • Înregistrați un URL webhook care îl indică.
  • Ascultați tweet-uri și răspundeți cu „salut lume”.

De ce ai nevoie?

  • Câteva cunoștințe de bază despre Golang
  • Un cont de dezvoltator Twitter aprobat. Cum se aplică.
  • Ar trebui să aveți configurat un mediu de dezvoltare API pentru activitatea contului – apelați-l dev pentru acest proiect
  • A Aplicația Twitter cu chei de consum și jetoane de acces generate (citire și scriere)
  • Golang instalat pe mașina dvs. de dezvoltare.
  • Oarecare hotărâre.

Gata? Sa mergem

Să începem cu începutul. Creați folderul proiectului în $GOPATH/src/ . Vom numi acest proiect și dosarul nostru hellobot . În el creați fișierul introductiv /hellobot.go

Primul lucru pe care trebuie să-l facem este să creăm un punct final pentru ca aplicația noastră să asculte verificările CRC și să răspundă. Twitter rezumă destul de bine cerințele pentru verificare.

1611438485 421 Cum se creeaza un bot Twitter de la zero cu

Configurarea unui server

Primul lucru pe care îl facem este să încărcăm fișierul .env fişier. Pentru asta folosim godotenv conecteaza. Fișierul .env este de obicei în acest format:

CONSUMER_KEY=CONSUMER_SECRET=ACCESS_TOKEN_KEY=ACCESS_TOKEN_SECRET=WEBHOOK_ENV=devAPP_URL=

Notă: Vom folosi baza go get pentru a instala toate dependențele noastre, având în vedere dimensiunea mică a proiectului nostru

Apoi ne-am configurat serverul folosind mux ca gestionar al nostru și ascultați traseul de bază și webhook/twitter . Dacă instalați acest lucru folosind go install și fugi hellobot, când îl rulați și navigați la localhost: 9090 ar trebui să vedeți mesajul

1611438485 902 Cum se creeaza un bot Twitter de la zero cu

Validare CRC

Acum, pentru CRC, actualizați fișierul CrcCheck() funcționează cu următorul cod:

Aici ceea ce facem în funcție este:

  • Setați antetul la „aplicație / json”
  • Obțineți parametrul URL crc_token
  • Criptați-l utilizând Hmac sha256 și codificați-l
  • Imprimați-l către scriitorul de răspuns

Asigurați-vă că înlocuiți CONSUMER_SECRET cu cheia secretă reală a consumatorului pentru aplicația dvs. Acum, dacă navigați la localhost:9090/webhook/twitter?crc_token=test ar trebui să primiți un răspuns similar cu acesta:

1611438486 738 Cum se creeaza un bot Twitter de la zero cu

Acum, că avem un traseu CRC funcțional, este timpul să vă înregistrați webhook-ul. Acum câteva lucruri de remarcat aici. Twitter nu va accepta localhost URL-uri bazate și nici nu va accepta o adresă URL cu un număr de port sau o adresă URL non-https ca un webhook. O modalitate de a evita acest lucru în timpul dezvoltării este de a folosi un serviciu de genul ngrok. Pur şi simplu instalare și porniți un server dev care indică portul 9090:

ngrok http 9090 

Ar trebui să vedeți un răspuns similar cu acesta:

1611438486 623 Cum se creeaza un bot Twitter de la zero cu

Acum, dacă accesați adresa URL .ngrok.io, ar trebui să vedeți același răspuns ca și localhost: 9090. Nu uitați să adăugați adresa URL la .env file APP_ENV

Înregistrarea webhook-ului

Pentru acest tutorial vom verifica prezența unui register semnalizați în lista de argumente. Puteți adăuga acest lucru la cod:

Aici robotul nostru verifică prezența -register în lista argumentelor. Apoi rulează registerWebhook() ca o goroutină. Definim registerWebhook() funcție într-un client.go fișier pe care îl vom folosi pentru toate cererile de pe Twitter. Acum, pentru corpul funcției:

Deci, o defalcare a noului cod. Primul lucru este să creezi un CreateClient() funcţie. Această funcție returnează un pointer la un OAuth http.Client pe care îl putem folosi apoi pentru a face toate cererile Twitter în numele contului nostru de bot. Nu uitați să fugiți go get în folderul proiectului, astfel încât să poată prelua fișierul neat go bibliotecă folosim pentru toate cererile OAuth. În registerWebhook funcție, noi:

  • Aduceți un client
  • Treceți URL-ul webhook-ului nostru ca parametru folosind url.Values
  • Faceți un răspuns post la înregistrați punctul final webhook apoi anulați (decodați) și citiți răspunsul

Apoi, avem nevoie de codul nostru pentru abonați-vă webhook-ul la evenimente.

Notă: Puteți utiliza fișierul cont-activitate-tablou de bord aplicație creată de Twitter pentru gestionarea webhook-urilor în timpul dezvoltării

Actualizați-vă client.go fișier așa cum se arată mai jos:

Codul de mai sus este foarte simplu. Cand heck după înregistrare, abonați-vă la evenimente și verificați dacă există un cod de stare pentru 204 . Acum dacă alergi go install pe codul dvs. și rulați codul ca hellobot -register ar trebui să primiți următorul răspuns:

Starting ServerRegistering webhook...Webhook id of <hook_id> has been registeredSubscribing webapp...Subscribed successfully

Ascultarea evenimentelor

Acum avem nevoie de webhook-ul nostru pentru a asculta de fapt evenimentele după ce URL-ul este apelat. Actualizați fișierele după cum se arată mai jos:

Ce facem în hellobot.dev ascultă cererile de postare către rutele noastre și le transmite funcției corespunzătoare. În timp ce în client.go adăugăm structurile adecvate pe care le-am folosi analizați JSON sarcină utilă către botul nostru.

Acum actualizați codul, astfel încât să trimită tweet-ul pe etichetă.

Actualizările pe care le-am adăugat la fișierele sursă sunt pur și simplu pentru a răspunde la evenimentele webhook. Verificați dacă a fost un tweet_create_event și trimiteți un răspuns ca răspuns folosind SendTweet() metoda noastră client.go fişier.

Notă: Orice tweet trimis ca răspuns trebuie să includă mânerul utilizatorului la care răspunde ca conținut inițial al răspunsului

Acum, dacă rulați acest lucru cu acreditările corespunzătoare, botul dvs. ar trebui să răspundă la etichete și să răspundă cu „Hello World”.

Concluzie

Acum este gata și, deoarece aceasta este o versiune extrem de simplă a unui bot, puteți încerca să adăugați câteva lucruri:

  • Verificarea și ignorarea evenimentelor de retweet
  • Adăugarea unui nume la răspuns
  • Răspuns la tweet în caz de eroare oriunde în aplicație.

Codul pentru această prezentare este activat Github aici. Simțiți-vă liber să vă furcați și să vă jucați cu el

Noroc!