Letar du efter ett sätt att göra Twitter mer användbart, om än för andra människor? Ett sätt är att skapa en automatiserad Twitter-bot som tweetar bilder med användbara beskrivningar. Du kan göra detta manuellt … eller så kan du bygga det med Node.js och vara värd för det på en Raspberry Pi. Läs vidare för att ta reda på hur.
Varför bygga en Twitter-bot?
Om du någonsin har varit på Twitter och sett konton som lägger upp foton, eller fakta, eller tecknade serier, etc., då är det överväldigande troligt att dessa är automatiserade. Det är ett bra sätt att bygga upp en publik med människor som är intresserade av samma ämne.
Men det finns en annan anledning, bortom 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 (även på en Raspberry Pi), men den här gången tar vi ett annat tillvägagångssätt.
I det här projektet kommer vi att använda Node.js för att bygga en foto-tweeting-bot på en Raspberry Pi. Bilderna kommer att vara bilder från första världskriget, åtföljda av en kort mening och tillskrivning). Denna information kommer att lagras i en array, en grundläggande databas.
Kom igång: Bygg din databas
Om du vill bygga en fototwittningsbot måste du börja med att samla bilderna du vill dela. Dessa bör antingen vara dina egna bilder, eller sådana som du har förvärvat under en Creative Commons-licens eller någon annan öppen källkodslicens.
Du bör också notera attribution och annan information som du vill ska följa med bilderna. Vi återkommer till den här informationen senare, när boten är igång.
Installera Node.js på Raspbian
Börja med att installera Node.js. Du borde redan ha en Raspberry Pi igång, med Raspbian installerad. För detta projekt rekommenderar vi en Raspberry Pi 2 eller senare; projektet testades på Raspberry Pi 3 B+.
I terminalen (eller via SSH), uppdatera systempaketlistan och uppgradera till den senaste versionen:
sudo apt-get update
sudo apt-get dist-upgrade
Följ uppmaningen 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 -
Installera sedan med
sudo apt-get install -y nodejs
När allt är klart, kör en kontroll för att säkerställa att programvaran installerades korrekt. Det enklaste är att leta efter versionsnumret:
node -v
Svaret bör vara ungefär som v8.11.3 (eller högre). Om du ser något sådant 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 kommer att skapa boten. 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
I den här filen anger du en enda rad:
console.log('I am a Twitter bot!');
Tryck 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 (de Node Package Manager). Se till att detta är installerat genom att ange:
npm -v
Återigen bör du se ett versionsnummer.
Följ detta med:
npm init
Detta börjar med att du uppmanas att ange information om Node.js-appen du skapar. Standardalternativ visas (så här) så du kan bara trycka på Enter för att acceptera dem. Du kan också välja att ange dina egna uppgifter. När denna konfiguration är över kommer du att bli ombedd att bekräfta detaljerna med “ja”.
Nästa steg är att installera Twit-modulen från npm.
npm install twit --save
Vänta medan filerna laddas ner till underkatalogen node_modules. När det är gjort öppnar du filen server.js igen i nano.
sudo nano server.js
Ta här bort kommandot 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 formulär. Det här är ett steg som Twitter har tagit för att undvika spam, så ta dig tid och svara på frågorna korrekt.
Klick Skapa en app, och lägg till detaljerna efter önskemål. I skrivande stund genomgår utvecklarsystemet en översyn, så du kan behöva vänta några dagar (och svara på några ytterligare frågor).
Byt sedan till Nycklar och polletter flik och under Behörigheter hitta Åtkomstbehörighet och se till att den är inställd på Läsa och skriva (använda sig av Redigera om inte). Byt sedan till nycklar och tokens och notera följande:
Konsumentnyckel Konsumenthemlighet
Klicka på under Åtkomsttoken Skapa att generera:
Access Token Access Token Secret
Dessa är API-nycklarna som du behöver för att ge boten åtkomst till ditt Twitter-konto.
Tillbaka på 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;
Där det står “XXXXX”, ersätt dina egna motsvarande API-nyckeldetaljer.
Spara och avsluta och öppna sedan server.js.
sudo nano server.js
Här lägger du till 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:
Återigen, spara och avsluta, sedan på kommandoraden, enter
node server.js
Öppna ditt Twitter-konto i webbläsaren för att se resultaten:
Du har bekräftat att boten twittrar, så det är dags att ge den något att göra!
Skapa din mapp med bilder
För att tweeta bilder, kopiera bilderna du samlade in i en mapp (vanligtvis namngiven bilder). Börja med ett dussin eller så.
Gå sedan tillbaka till server.js-dokumentet:
sudo nano server.js
Ta här bort koden som skickade tweeten, raden som börjar T.post(‘statuses/update’).
Ersätt sedan detta med en funktion som kallas random_from_array. Detta kommer att välja en bild slumpmässigt från mappen bilder.
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!');
}
}
);
}
});
}
Den här funktionen väljer en bild slumpmässigt från bildmappen, och när den väl är vald laddas den upp till Twitter med hjälp av media/upload API.
Lägg sedan till följande kod. Detta kommer att hitta bildkatalogen och ta en bild från den och lägga upp en slumpmässigt var 60:e sekund. Du kan (och bör) redigera denna timing, som representeras i koden med siffran 60000. Längre mellanrum är att rekommendera.
setInterval(function(){
upload_random_image(images);
}, 60000);
}
});
Spara detta med Ctrl + X, sedan Ja för att spara. (GitHub-källan är inte längre tillgänglig).
En enda användning av nod server.js kommandot kommer sedan att uppmana bilderna att börja twittra! (Om du behöver avsluta inläggen, tryck Ctrl + Z för att avbryta server.js-skriptet.)
Lägga till text till dina fototweets
Om du behöver lägga till text till dina bilder kan detta göras med hjälp av en array. Arrayen kommer att referera till bildernas filnamn och lista texten som ska läggas till. Du kan till exempel lägga till attribution till bilder som du inte har tagit. Eller så kan du lägga till lite fakta eller ett citat.
Börja med att skapa images.js
sudo nano images.js
Här lägger du till följande kod. Detta är en array med två element, fil och källa. Dessa innehåller bildens filnamn och attributionen (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 vid 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 detta i listan med variabler:
images = require(path.join(__dirname, 'images.js'));
Spara och avsluta, starta sedan om Twitter-boten med nod server.js kommandot igen.
Du kan också använda fältet “källa” för att inkludera lite text som förklarar bakgrunden till bilden. Detta kan inkluderas bredvid webbadressen.
Din första Twitter-bot, redo att återanvändas!
Vid det här laget borde du ha en Twitter-bot som publiceras automatiskt och dela bilder, fakta och attribut om ditt angivna ämne.
För att sammanfatta är processen:
Samla dina foton Installera Node.js Bygg din Twitter-bot Ansök om utvecklarstatus på Twitter Skapa en Twitter-app Lägg till en attributionsarray Börja twittra!
Det kanske bästa med detta är att koden kan användas för att tweeta bilder, fakta och attribut om bokstavligen vilket ämne som helst.
Vill du veta vilka andra bots du kan köra med en liknande installation? Kolla vår lista över de bästa Twitter-botprojekten för Raspberry Pi!
Om författaren
Christian Cawley (1562 publicerade artiklar)
Biträdande redaktör för säkerhet, Linux, gör-det-själv, programmering och teknisk förklarad, och riktigt användbar podcastproducent, med lång erfarenhet av skrivbords- och mjukvarustöd. Christian är en bidragsgivare till tidningen Linux Format och är en Raspberry Pi-pyssling, en Lego-älskare och en retrospelfantast.
Mer från Christian Cawley
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
