Hemsida » Kodning » Så här visar / uppdaterar du Facebook gillar med Node.js

    Så här visar / uppdaterar du Facebook gillar med Node.js

    Genom att utarbeta provkoderna från föregående inlägg fick du känslan av vad som är den faktiska fördelen med att använda Node.js. I dagens inlägg kastar vi in ​​ett praktiskt manus som tydligt visar användningen av Node.js i händelsesbaserad programmering.

    Vi skapar ett enkelt skript som producerar antalet "Facebook-liknande" på en viss Facebook-sida. Och dessutom lägger vi in ​​en extra funktion som uppdaterar antalet "Facebook-gillar" varje 2 sekund.

    Utdata blir enkla och vanliga, ser förmodligen ut så här: "Antal Likes: 2630405" och det är upp till dig att ställa det med hjälp av CSS, låt oss komma igång då!

    Att ge dig en idé

    Innan vi dyker in med Node.js, låt oss ta en stund att tänka på vad vi normalt skulle göra med gemensamma programmeringsspråk på server-sidan (som PHP). Om du tänker göra ett AJAX-samtal för att hitta antalet gillar i varje 2 sekunder - du är rätt - men det kan det potentiellt öka serverkostnaden.

    Vi kan överväga åtkomst graph.facebook.com vilket skulle vara en tidskrävande I / O-verksamhet. Tänk på att 5 användare har samma sida (vilken matar ut antalet gillar). Antalet tillgång till graph.facebook.com om 2 sekunder blir 10, eftersom alla kommer att uppdatera hans / hennes nummer av gillar en gång i 2 sekunder och det kommer att utföras som en separat tråd.

    Det är inte nödvändigt med en Node.js-serverimplementering. Endast En åtkomst till Facebook-servern krävs och den tid att få och mata ut resultatet (antal gillar) kan minskas kraftigt.

    Men hur ska vi genomföra detta? Det är vad vi ska ta reda på i nedanstående avsnitt.

    Komma igång

    Innan vi börjar bör du har Node.js installerat och kört på ett webbhotell med v8-miljö. Kolla in ämnena, "Komma igång med Node.js" och "Installera Node.js" i vår tidigare artikel, Beginners Guide to Node.js om du inte har.

    På servern vi tillgång graph.facebook.com med ett intervall på 2 sekunder och uppdatera numret på gillar. Låt oss kalla detta som "Åtgärd 1". Vi kommer att förbereda en sida så att den uppdaterar sig via AJAX varannan sekund.

    Tänk på att många användare får åtkomst till samma sida. För varje användares AJAX-förfrågan är en händelseloggare kopplad till servern för att slutföra "ACTION1". Så när "ACTION1" är slutfört kommer händelseloggarna att utlösas.

    Låt oss ta en titt på serverns kod.

    Koderna

     var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nya händelser.EventEmitter (); funktion get_data () var request = facebook_client.request ("GET", "/ 19292868552", "värd": "graph.facebook.com"); request.addListener ("response", funktion (svar) var body = ""; response.addListener ("data", funktion (data) body + = data;); response.addListener ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();  my_http.createServer var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funktion (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); annars load_file (my_path, response) ;). Lyssna (8080); setInterval (get_data, 1000); sys.puts ("Server running on 8080"); 

    Koder Förklaring:

     var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = nya händelser.EventEmitter (); 

    Vi skapar en HTTP-klient för att komma åt Facebook Graph API facebook_client. Vi behöver också EventEmitter () funktion som kommer att utlösa när "ACTION1" har slutförts.

    Detta kommer att vara tydligt i koden som beskrivs nedan.

     funktion get_data () var request = facebook_client.request ("GET", "/ 19292868552", "värd": "graph.facebook.com"); request.addListener ("response", funktion (svar) var body = ""; response.addListener ("data", funktion (data) body + = data;); response.addListener ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();  

    Fungera hämta data hämtar data från Facebook API-samtalet. Vi först skapa en GET-förfrågan använda begäran Metod för följande syntax:

     Client.request ( 'GET', 'get_url',  "värd": "host_url"); 

    Numret “19292868552” är Facebook-ID på sidan som vi behöver för att få tillgång till dess uppgifter. Så den sista sidan vi försöker komma åt blir: http://graph.facebook.com/19292868552. Efter att ha gjort begäran måste vi lägg till tre lyssnare på den, respektive följande:

    1. Svar - Denna lyssnare utlöses när förfrågan börjar ta emot data. Här ställer vi in ​​svarets kropp på en tom sträng.
    2. Data - Eftersom Node.js är asynkron mottages data som bitar. Denna data läggs till i kroppsvariabeln för att bygga upp kroppen.
    3. Slutet - Denna lyssnare utlöses när "ACTION1" specificerat ovan har slutförts. De data som returneras av Facebook Graph API-samtalet returnerar data i JSON-format. Så vi konverterar strängen till JSON array med JavaScript-funktionen JSON.parse.

    Du kan se att en lyssnare är kopplad till event_emitter objekt. Vi måste utlösa det i slutet av "ACTION1". Vi utlöser lyssnaren uttryckligen med metoden facebook_emitter.emit.

     "id": "19292868552", "namn": "Facebook Platform", "bild": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "kategori": "Produkt / tjänst", "webbplats": "http://developers.facebook.com", "användarnamn": "plattform", "grundad": "maj 2007", "company_overview": "Facebook-plattform gör det möjligt för alla att bygga sociala appar på Facebook och på webben.", "Mission": "Att göra webben mer öppen och social." "parkering": "street": 0, "lot": 0, "valet": 0,

    Ovanstående representerar svaret på Facebook Graph API-samtalet. För att få numret på gillar: ta samma objekt som dataobjektet, konvertera det till strängen och skicka det till avge fungera.

    Efter denna åtgärd vi slutet förfrågan.

     my_http.createServer (funktion (begäran, svar) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funktion data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ). lyssna (8080); setInterval (get_data, 1000); 

    Att skapa servern liknar den tidigare handledningen - med en liten förändring. För varje webbadress (förutom /hämta data) vi ladda motsvarande statiska fil med hjälp av load_file fungera vi definierade tidigare.

    De http: // localhost: 8080 / GetData är webbadressen för AJAX-förfrågan. I varje AJAX-förfrågan vi bifoga en händelse lyssnare till facebook_emitter. Det liknar addListener men lyssnaren dödas efter att lyssnaren emitterats för att undvika minnesläckage. Om du behöver checka ut det bara Ersätt en gång med addListener. Vi ringer också hämta data funktionen en gång i 1 sekund av funktionen setInterval.

    Därefter skapar vi HTML-sidan där utmatningen visas.

    Koderna

        Facebook gillar     

    Antal Likes: Läser in…

    Koder Förklaring:

    JQuery AJAX-delen är ganska självklarande. Kolla in samtalet till load_content fungera. Det ser ut som det kör en oändlig slinga, och ja det är det. Så är antalet gillar blir uppdaterad själv.

    Varje AJAX-samtal kommer att försenas med den genomsnittliga tiden på 1 sekund som fördröjningen i utlösningen av varje sådant samtal kommer att vara 1 sekund från servern. AJAX-förfrågan kommer att vara i ofullständig form för den 1 sekunden.

    Så där går du - en metod för att fördröja ett AJAX-svar från servern för att få antalet Facebook gillar. Släpp fråga i vår kommentar avsnitt om du har några tvivel eller tanke, tack!

    Redaktörens anteckning: Det här inlägget är skrivet av Geo Paul för Hongkiat.com. Geo är en oberoende utvecklare av webb / iPhone som trivs med PHP, Codeigniter, WordPress, jQuery och Ajax. Han har 4 års erfarenhet av PHP och 2 års erfarenhet av iniPhone Application Development.