Kom igång med Node.js och skapa en Twitter-bot som tweetsar foton och information med bara en Raspberry Pi!

Hur man bygger ett foto som Twitterar Twitter Bot med Raspberry Pi och Node.js

Annons Letar du efter ett sätt att göra Twitter mer användbar, bara för andra? Ett sätt är att skapa en automatiserad Twitter-bot som tweetsar bilder med användbara beskrivningar. Du kan göra det manuellt ... eller så kan du bygga det med Node.js och värd det på en Raspberry Pi. Läs vidare för att ta reda på hur. Varför bygga

Annons

Letar du efter ett sätt att göra Twitter mer användbar, bara för andra? Ett sätt är att skapa en automatiserad Twitter-bot som tweetsar bilder med användbara beskrivningar. Du kan göra det manuellt ... eller så kan du bygga det med Node.js och värd det på en Raspberry Pi. Läs vidare för att ta reda på hur.

Varför bygga en Twitter-bot?

Tweetar foton med en bot

Om du någonsin har varit på Twitter och sett konton som publicerar foton, fakta eller tecknad film osv., Är det överväldigande troligt att dessa är automatiserade. Det är ett utmärkt sätt att bygga en publik av människor intresserade av samma ämne.

Men det finns en annan anledning, utöver retweets och följer. Att bygga en Twitter-bot kommer att lära dig några användbara programmeringsfärdigheter. Vi har tidigare tittat på hur man bygger en grundläggande Twitter-bot med Python Hur man bygger en hallon Pi Twitter bot Hur man bygger en hallon Pi Twitter Bot Twitter är världens största arkiv med korta meddelanden från människor med ingenting att säga - och nu har du också kan bidra till det episka projektet med en automatiserad Twitter-bot, som drivs av din Raspberry ... Läs mer (även på en Raspberry Pi), men den här gången tar vi en annan inställning.

I det här projektet kommer vi att använda Node.js för att bygga en fototweetande bot på en Raspberry Pi. Bilderna kommer att vara foton från första världskriget, tillsammans med en kort mening och tillskrivning). Den här informationen kommer att lagras i en matris, en grundläggande databas. Vad är en databas, hur som helst? [MakeUseOf Explains] Så vad är en databas, hur som helst? [MakeUseOf Explains] För en programmerare eller en teknikentusiast är begreppet en databas något som verkligen kan tas för givet. Men för många är konceptet med en databas i sig lite främmande .... Läs mer.

Kom igång: Bygg din databas

Om du vill bygga en fototweeting-bot måste du börja med att samla de bilder du vill dela. Dessa bör antingen vara dina egna bilder, eller de du har skaffat under en Creative Commons eller någon annan öppen källkodslicens.

Du bör också notera attribut och annan information som du vill följa med bilderna. Vi kommer tillbaka till den här informationen senare, när botten är igång.

Installera Node.js på Raspbian

Börja med att installera Node.js. Du bör redan ha en Raspberry Pi igång, med Raspbian installerat Hur man installerar ett operativsystem på en Raspberry Pi Hur man installerar ett operativsystem på en Raspberry Pi Så här installerar du ett operativsystem på Raspberry Pi och hur man klonar ditt perfekta inställning för snabb återhämtning av katastrofer. Läs mer . För detta projekt rekommenderar vi en Raspberry Pi 2 eller senare; projektet testades på Raspberry Pi 3 B + Hur man bestämmer om du behöver Raspberry Pi 3 B + -modellen Hur man bestämmer om du behöver Raspberry Pi 3 B + -modellen Hur mycket kostar Raspberry Pi 3 B +, vilken specifikation har den, och kommer det att förbättra dina befintliga projekt? Läs mer .

På terminalen (eller via SSH VNC, SSH och HDMI: Tre alternativ för att se din hallon Pi VNC, SSH och HDMI: tre alternativ för att se din hallon Pi Raspberry Pi är en anmärkningsvärd liten dator, men det kan vara tidskrävande att ställa in upp och anslut den till din bildskärm. Läs mer), uppdatera systempaketlistan och uppgradera till den senaste versionen:

 sudo apt-get update sudo apt-get dist-upgrade 

Följ prompt på skärmen och vänta medan din Pi uppdateras. När du är klar, starta om med

 sudo reboot 

När du är klar använder du curl för att ladda ner Node.js:

 curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - 

Därefter installerar du den med

 sudo apt-get install -y nodejs 

När allt är klart, kör en kontroll för att se till att programvaran var korrekt installerad. Det enklaste är att kolla efter versionnummer:

 node -v 

Svaret bör vara något som v8.11.3 (eller högre). Om du ser något liknande, kan du vara säker på att Node.js är redo att användas.

Bygg din Twitter-bot

Nästa steg är att mata in koden som skapar botten. Börja med att skapa en katalog:

 mkdir twitterbot 

Ändra sedan den till den nya katalogen för din bot:

 cd twitterbot 

Skapa här en fil som heter server.js

 sudo nano server.js 

Skriv in en enda rad i den här filen:

 console.log('I am a Twitter bot!'); 

Tryck på Ctrl + X för att spara och avsluta, kör sedan skriptet:

 node '/home/pi/twitterbot/server.js' 

Detta bör returnera frasen "Jag är en Twitter-bot!". Nu när du har bekräftat att detta fungerar är det dags att installera Twit-biblioteket med npm ( Node Package Manager ). Se till att detta är installerat genom att ange:

 npm -v 

Återigen bör du se ett versionnummer visas.

Följ detta med:

 npm init 

Detta börjar med att be dig om information om Node.js-appen du skapar. Standardalternativ visas (som det här) så att du bara kan trycka på Enter för att acceptera dem. Du kan också välja att ange dina egna detaljer. När denna konfiguration är över kommer du att be om att bekräfta informationen med ”ja”.

Nästa steg är att installera Twit-modulen från kl.

 npm install twit --save 

Vänta medan filerna laddas ner i underkatalogen för node_moduler. När det är klart öppnar du filen server.js igen i nano.

 sudo nano server.js 

Ta bort här kommandot som du angav tidigare och ersätt det med:

 var fs = require('fs'), path = require('path'), Twit = require('twit'), config = require(path.join(__dirname, 'config.js')); 

Spara och avsluta som tidigare.

Skapa en Twitter-app

För att bygga en fungerande Twitter-bot måste du skapa en Twitter-app. Detta är en enkel process som kräver att du först registrerar dig för ett nytt Twitter-konto. Observera att detta också kräver ett telefonnummer för att verifiera kontot, och när detta är gjort, gå till Developer.twitter.com för att skapa appen.

Om du inte har ett utvecklarkonto kan det ta lite tid, eftersom det krävs en viss mängd blankett. Detta är ett steg som Twitter har tagit för att undvika skräppost, så ta dig tid och svara korrekt på frågorna.

Klicka på Skapa en app och lägg till informationen som begärts. I skrivande stund genomgår utvecklingssystemet en översyn, så du kanske måste vänta några dagar (och svara på några ytterligare frågor).

Skapa en app på Twitter

Därefter byter du till fliken Nycklar och tokens, och under Tillstånd hittar du åtkomstbehörigheten och ser till att den är inställd på Läs och skriv (använd Redigera om inte). Växla sedan till nycklar och tokens och notera följande:

  • Konsumentnyckel
  • Konsumenthemlighet

Under Access token klickar du på Skapa för att generera:

  • Åtkomsttoken
  • Access Token Secret

Det här är API-nycklarna som du behöver för att ge bot åtkomst till ditt Twitter-konto.

Tillbaka i kommandoraden, skapa config.js i nano:

 sudo nano config.js 

Lägg till följande

 var config = { consumer_key: 'XXXXX', consumer_secret: 'XXXXX', access_token: 'XXXXX', access_token_secret: 'XXXXX' } module.exports = config; 

Om det står "XXXXX", ersätt dina egna motsvarande API-nyckeldetaljer.

Lägg till dina nyckelsträngar genererade av Twitter i konfigurationsfilen

Spara och avsluta och öppna sedan server.js.

 sudo nano server.js 

Bifoga här följande rader i slutet av filen:

 var T = new Twit(config); T.post('statuses/update', { status: 'My first tweet!' }, function(err, data, response) { console.log(data) }); 

Det ska se ut så här:

Den här koden får en tweet att skickas.

Återigen, spara och avsluta, sedan i kommandoraden, ange

 node server.js 

Öppna ditt Twitter-konto i webbläsaren för att se resultaten:

En testtweet skickad med Node.js-kod

Du har bekräftat att boten tweetar, så det är dags att ge den något att göra!

Skapa din mapp med bilder

För att tweeta foton, kopiera bilderna du samlade i en mapp (vanligtvis namngivna bilder ). Börja med ett dussin eller så.

Återgå sedan till server.js-dokumentet:

 sudo nano server.js 

Här tar du bort koden som skickade tweeten, raden som börjar T.post ('statuser / uppdatering').

Byt därefter ut den med en funktion som kallas random_from_array . Detta kommer att välja en bild slumpmässigt från bildermappen.

 function random_from_array(images){ return images[Math.floor(Math.random() * images.length)]; } 

När du har gjort detta måste du lägga till en andra funktion, upload_random_image :

 function upload_random_image(images){ console.log('Opening an image...'); var image_path = path.join(__dirname, '/images/' + random_from_array(images)), b64content = fs.readFileSync(image_path, { encoding: 'base64' }); console.log('Uploading an image...'); T.post('media/upload', { media_data: b64content }, function (err, data, response) { if (err){ console.log('ERROR:'); console.log(err); } else{ console.log('Image uploaded!'); console.log('Now tweeting it...'); T.post('statuses/update', { media_ids: new Array(data.media_id_string) }, function(err, data, response) { if (err){ console.log('ERROR:'); console.log(err); } else{ console.log('Posted an image!'); } } ); } }); } 

Denna funktion väljer en bild slumpmässigt från bildermappen, och när den valt laddas upp till Twitter med media / upload API.

Lägg sedan till följande kod. Då hittar du bildkatalogen och tar en bild från den och lägger ut en slumpmässig var 60: e sekund. Du kan (och borde) redigera denna timing, som representeras i koden med siffran 60000. Längre luckor rekommenderas.

  setInterval(function(){ upload_random_image(images); }, 60000); } }); 

Spara detta med Ctrl + X, sedan Ja för att spara. (Du kan hitta fullständig kod för detta projekt på GitHub).

En enda användning av kommandot node server.js uppmanar fotona att börja tweeta! (Om du behöver avsluta inlägg, tryck Ctrl + Z för att avbryta skriptet server.js.)

Lägga till text till dina foto-tweets

Om du behöver lägga till text till dina bilder kan du göra det med hjälp av en matris. Matrisen hänvisar till filnamnen på bilderna och listar texten som ska läggas till. Till exempel kan du lägga till attribution till bilder som du inte tog. Eller så kan du lägga till några fakta eller en offert.

En Twitter-bot kan posta foton och text

Börja med att skapa images.js

 sudo nano images.js 

Lägg till följande kod här. Detta är en matris med två element, fil och källa. Dessa har bildens filnamn och attributen (vanligtvis en URL).

 var images = [ { file: 'image0001.png', source: 'http://www.example.com/image0001.png' }, { file: 'image0002.png', source: 'http://www.example.com/image0002.png' }, ] 

Upprepa efter behov för varje bild och avsluta sedan images.js-filen med:

 module.exports = images; 

Spara och stäng filen, öppna sedan server.js igen och lägg till den i listan med variabler:

 images = require(path.join(__dirname, 'images.js')); 

Spara och avsluta och starta sedan om Twitter- botten med kommandot node server.js igen.

Du kan också använda fältet "källa" för att inkludera lite text som förklarar bildens bakgrund. Detta kan inkluderas bredvid webbadressen.

Din första Twitter-bot, redo att återanvända!

Nu bör du ha en automatisk bokföring av Twitter-botten igång, dela foton, fakta och attribut om ditt angivna ämne.

För att sammanfatta är processen:

  • Samla dina bilder
  • Installera Node.js
  • Bygg din Twitter-bot
  • Ansök om utvecklarstatus på Twitter
  • Skapa en Twitter-app
  • Lägg till ett attributionsfält
  • Börja tweeta!

Det bästa med detta är kanske att koden kan användas för att tweeta foton, fakta och attribut om bokstavligen alla ämnen.

Vill du veta vilka andra bots du kan köra med en liknande installation? Kolla in vår lista över de bästa Twitter-botprojekten för Raspberry Pi 10 Bästa Twitter Bot-projekt för Raspberry Pi 10 Bästa Twitter Bot-projekt för Raspberry Pi Läs mer!

Utforska mer om: DIY-projektstudier, JavaScript, Raspberry Pi, Twitter.