Bygga en Instagram-bot med NodeJS, Puppeteer och Firebase

Introduktion

Nyligen skapade jag ett företagskonto på Instagram. Jag insåg då att få nya följare kommer med ett pris på tid och data. Du måste gilla, kommentera och framför allt följa andra för att få följdbackar. Dessa aktiviteter låter också Instagram ta upp ditt konto som förslag till andra användare på dess plattform. Så jag bestämde mig för att prova mina Merlin-krafter genom att automatisera uppgiften. Efter flera anordningar med googling och undersökning om hur man kan utföra denna uppgift. Jag upptäckte att de flesta lösningar som hittades var antingen för komplexa att implementera eller föråldrade. Jag bestämde mig för att samla in kunskapen och skapa en för att rädda nyfikna katter som jag besväret.

I den här tutorialen kommer vi att skapa en bot som hjälper till att automatisera vanliga Instagram-aktiviteter såsom; gilla inlägg, följ användare och följ upp användare. Dessa aktiviteter får oss fler följare och ökar interaktionen om innehållet i vårt konto.

förutsättningar

Denna handledning kräver följande:

  • En IDE som du väljer, t.ex. Visual Studio Code
  • Node.js (minimum Node v7.6.0)
  • Firebase i realtid databas
  • Grundläggande förståelse JavaScript (ES6)

Se till att du har Node och NPM installerat innan du startar självstudien.

Vi diskuterar hur du ställer in Firebase-databas i realtid när vi fortsätter.

Vad är Puppeteer?

Puppeteer är ett NodeJs-bibliotek som tillhandahåller ett API på hög nivå för att kontrollera headless Chrome eller Chromium över DevTools-protokollet. Som standard körs detta bibliotek huvudlöst vilket innebär att det körs utan att visa webbläsaren öppen men kan konfigureras för att köra icke-huvudlös Chrome eller Chromium.

Med hjälp av dockdjur kan vår bot bläddra på Instagram och utföra operationer som en vanlig användare skulle göra. Biblioteket använder väljare för att interagera med en webbsida, dvs klick, inmatning osv. Vi lär oss mer om hur Puppeteer fungerar när vi fortsätter.

Vad är Firebase?

Firebase är en mobil- och webbutvecklingsplattform som erbjuder olika tjänster som analys, autentisering, realtidsdatabas, lagring och mer. Under denna tutorial kommer vi att använda Firebase-databas i realtid för att lagra användare som vi följer och arkivera användare som vi har följt upp. För den här handledningens skull kommer vi inte att titta närmare på hur du använder Firebase för att lära dig mer om du besöker dokumenten.

Ställa in vår databas på Firebase

  • Besök firebase.google.com och logga in med ditt Google-konto
  • Klicka på Lägg till projekt och ange ett projektnamn, t.ex. ig-bot-demo, skapa projektet och klicka sedan på Fortsätt
Firebase välkomstsida
  • Du kommer att omdirigeras till instrumentpanelen klicka på Utveckla från sidofältet och välj sedan Databas
Brandbaspanel
  • Välj nu realtidsdatabas, välj testläge och klicka sedan på aktiveringsknappen.
  • Du kommer att omdirigeras till din databaspanel, nu måste vi hämta vår databasinformation så att vi kan integreras med den från vår bot. För att få dessa referenser, klicka på projektöversikt från sidmenyn och välj projektinställningar.
  • Navigera till servicekonton och generera en ny privat nyckel för vår NodeJs-app och ladda ner JSON-filen som innehåller våra DB-referenser, observera också thatatabaseURL. Vi kommer att behöva dessa detaljer senare i vår utvecklingsprocess.
DB-referenssida

Komma igång

Skapa ett nytt nodprojekt

  • Skapa en projektmapp och öppna den här mappen med önskad IDE Låt oss namnet projektmappig-bot
  • Skapa ett filpaket.jså ansluta till rotmappen och lägg till dessa beroenden

nu runnpm installera från terminalen för att installera dessa beroenden. Vi använder oss av blandningsfält för att blanda igenom vår fördefinierade hashtagg så att vår bot inte besöker hashtag-URL: n i samma mönster. Låt oss nu skapa en mapp som innehåller all vår kod. Låt oss kalla det Bot

Konfigurera och ställa in databasen i vår app

Skapa en konfigurationsmapp i mappen Bot och kopiera den nedladdade databaskonfigurerade JSON-filen till den här mappen, byt namn på filen tilldb_config.json. Filens innehåll ska se ut som nedan

Därefter skapar vi en db.js-fil i vårBot-mapp som innehåller koden för vår databasinteraktion. Insidedb.js kommer vi att upprätta en anslutning mellan två objekt (kommer från MySQL-bakgrundsobjekt liknar tabeller) i vår databas.

  • följandeobjekt innehåller listan över användare som vi har följt.
  • follow_history håll listan över användare som vi har följt upp så att vi inte följer dem igen.

Vi lägger till fyra funktioner i den här filen som hjälper till med dessa uppgifter.

  1. addFollowing sparar ett användarnamn som vi började följa tillsammans med tiden. Vi sparar tid eftersom vi kommer att följa upp användare baserat på hur länge vi har följt dem. Observera att vi ställer in användarnamn som nyckel i vårt objekt istället för att använda ID eftersom vi är säkra på att Instagram-användarnamn är unika.
  2. getFollowing returnerar listan över alla användare vi följer.
  3. unFollow tar användarnamnet för att följa upp som ett argument och tar sedan bort posten från listan över personer vi följer och lägger till den i det följande_history-objektet, dvs personer vi har följt tidigare.
  4. inHistory tar ett användarnamn som ett argument och kontrollerar om användaren finns i det följande_history-objektet. Om det är sant, returnerar det användarobjektet eller noll om användaren inte finns.

Kopiera koden nedan till din db.js-fil

Nu när vi är klar med att sätta upp vår databas, låt oss fortsätta att implementera marionettdocka.

Ställer in konfiguration för marionettbibliotek

Innan vi börjar implementera vår bot måste vi först skapa en puppeter.json-fil i vår konfigurationsmapp. Den här filen innehåller några viktiga data, dvs autentiseringsdetaljer, hashtags, väljare och bot-inställningar. Puppeteer använder väljare för att navigera runt på webbplatsen, vi måste spara de nödvändiga väljarna i vår config så att vi inte behöver gå igenom vår kod när Instagram uppdaterar sina klasser.

Inställningsegenskapen i vår konfigurationsfil har ett objekt som värde som innehåller följande egenskaper:

  • run_every_x_hours hur ofta vi vill att vår bot ska köras
  • like_ratiothe-förhållandet där vi vill att vår bot ska gilla ett inlägg
  • unfollow_after_days antal dagar innan du följer upp en användare
  • headlesswhether att köra marionettare i headless mode eller inte. För enkel felsökning kör vi inte dockteater i huvudlöst läge.

Klistra in följande JSON-data i filen thepuppeteer.json.

Implementera vår bot med marionett

För tydlighetens skull kommer detta avsnitt att delas upp i en serie steg. Innan du fortsätter med dessa steg skapar du en aindex.js-fil i mappen Bot.

Puppeteer avslöjar ett löfte baserat API, vi definierar synkroniseringsmetoder så att vi enkelt kan arbeta med API och hålla våra löften

Steg 1:

Låt oss lägga till en klassInstagramBot som innehåller sex metoder i vår nya fil. Dessa metoder diskuteras i detalj när vi implementerar dem.

Öppna filenindex.js och lägg till utdraget nedan:

Som ni kan se skapade vi vår klass och importerade våra konfigurationsfiler inom konstruktormetoden.

Steg 2:

Nästa sak vi ska göra är att lägga till en initPupperer () -metod i vår klass som importerar marionettbiblioteket, startar webbläsaren och skapar en ny sida samt ställer in webbläsarens bredd och höjd.

Eftersom Instagram är en lyhörd webbplats måste vi ställa in webbläsarens vy till samma storlek som en skrivbordslayout. Detta beror på att väljarna i vår konfigurationsfil matchar den i en skrivbordsvy.

Vi lägger till metoden initPuppeter () till vår klass så:

Steg 3:

I det här steget lägger vi till en visitInstagram () -metod som naturligtvis besöker Instagrams webbplats och väntar i 2,5 sekunder innan nästa åtgärd utförs. Denna försening behövs eftersom om åtgärderna är för snabba kommer vår bot lätt att upptäckas av Instagram som kan resulterar i att vårt konto blockeras eller stängs av.

Efter att ha laddat Instagram navigerar nästa uppsättning av instruktioner till inloggningssidan, matar in våra inloggningsuppgifter (användarnamn och lösenord) och stänger sedan aktiveringsmeddelandet för aktiveringen efter en framgångsrik inloggning.

Lägg till visitInstagram () -metoden till vår klass så:

Steg 4:

Här lägger vi till nyckelingrediensen för att ge vår bot den smak den förtjänar. Vi gör det genom att lägga till metoden thevisitHashTagUrl () (En kärnimplementering av vår bot) till vår klass. Inom den här metoden kommer vi att importera den uppsticknings-array-modulen som vi hade installerat tidigare som en del av våra projektberoende. Detta bibliotek hjälper oss att blanda oss genom thehashTags-arrayen så att vi inte går igenom våra hashtags i samma ordning varje gång vi kör vår bot. Goto-funktionen som visas i rad 10 gör att vår bot kan besöka varje hashtag-URL. Åtgärder som att gilla inlägg och följa användare kommer att utföras med metoden_doLikeAndFollow () som vi diskuterar i steg 5.

Vi lägger till visitHashTagUrl () -metoden till vår klass så:

Steg 5:

Låt oss add_doPostLikeAndFollow () -metoden som vi åberopar i föregående steg. Som namnet antyder gillar metoden ett inlägg och följer användaren som skapade inlägget. Den här metoden tar två argumentparentClass och sida.

Här är en sammanfattning av vad som hände inom den här metoden:

  • Vår bot kommer igenom den första raden på has-tag-sidan som innehåller 3 inlägg. Se skärmdumpen bifogad nedan.
  • Slingar igenom varje inlägg inom dessa rader. Vi kommer att interagera med totalt 9 inlägg.
  • Kontrollera om vi redan har gillaat inlägget, om inte vår bot fortsätter att klicka på liknande-knappen.
  • Get's postnamnets användarnamn och kontrollera sedan vårt follow_historyobjekt från vår databas för att bekräfta om vi någonsin har följt användaren.

Varje rad har korrekt kommenterats för att förklara varje kodblock.

Instagrams hashtaggsida med 3 inlägg i rad.

Lägg till metoden _doPostLikeAndFollow () till vår klass så:

Steg 6:

Därefter implementerar vi metoden theFollowUsers (). Vad detta gör som namnet antyder är att följa upp användare som vi har följt under en viss tid. Varaktigheten anges i vår konfigurationsfil asunfollow_after_days.

Lägg till metoden unFollowUsers () till vår klass så:

Steg 7:

Den sista metoden vi kommer att implementera är thecloseBrowser () -metoden. Den här metoden stänger webbläsaren efter att aktiviteten har avslutats.

Lägg till metoden thecloseBrowser () till vår klass och exportera vår InstagramBot lass:

Vi är nästan klara. Nästa sak vi gör är att skapa en startpunkt till vår bot där vi kommer att åberopa varje metod vi har skapat. Den sista kodraden kör helt enkelt vår bot med ett intervall, enligt definitionen i vår konfigurationsfil. Att köra botten för ofta kan uppmärksamma vårt konto. Så vi måste ställa in en rimlig tid.

För att göra detta skapar vi anindex.js-filen i vår rotmapp ig-bot och lägger till följande radkod så:

Nu när vi är klara att implementera vår bot är det dags att testa. Vi gör detta genom att köra node index.js från terminalen i vår rotmapp.

Vår bot kan värdas på en fjärrserver. Om det finns tillräckligt med reaktioner diskuterar vi det med mer i den andra delen av den här artikeln.

Slutsats

I den här artikeln har vi framgångsrikt byggt upp vår egen Instagram-bot, som gör grundläggande Instagram-aktiviteter. Du kan alltid klona projektförvaret.

Här är några saker vi kan göra för att lägga till fler funktioner i vår bot.

Ytterligare funktioner som vi kan lägga till:

  1. Hämta trendiga hashtags från en källa så att vi inte behöver ställa in hashtags manuellt.
  2. Lägg till möjlighet för vår bot att besöka utforska sidan, som inlägg och följa användare.
  3. När vi navigerar i varje inlägg kan vi tillfälligt lagra tre användare, bläddra i deras bilder som och följa då kommer detta att öka våra chanser att få fler följare.

Jippie!! du klarade det till slutet.

Tack för din tid att läsa. Förhoppningsvis har detta varit tillräckligt detaljerat.

Om du gillar den här självstudien, ge en klapp

Om du gillar den här självstudien, ge en klapp