Come visualizzare / aggiornare Mi Piace di Facebook utilizzando Node.js
Elaborando i codici di esempio del post precedente, potresti avere la sensazione di quale sia il vero vantaggio dell'utilizzo di Node.js. Nel post di oggi, inseriamo un pratico script che dimostra chiaramente l'uso di Node.js nella programmazione basata sugli eventi.
Creeremo un semplice script che genera il numero di "Mi Piace di Facebook" di una particolare pagina di Facebook. E per di più, introdurremo una funzionalità aggiuntiva che aggiornerà il numero di "Mi Piace di Facebook" ogni 2 secondi.
L'output sarà semplice e chiaro, probabilmente somiglia a questo: "Numero di Mi Piace: 2630405" e spetta a te adattarlo usando il CSS, iniziamo quindi!
Per darti un'idea
Prima di approfondire l'uso di Node.js, prendiamo un momento per pensare a cosa faremmo normalmente con i comuni linguaggi di programmazione lato server (come PHP). Se stai pensando di effettuare una chiamata AJAX per trovare il numero di piace in ogni 2 secondi - sei corretto - ma questo può potenzialmente aumentare il sovraccarico del server.
Possiamo prendere in considerazione Accedendo graph.facebook.com quale sarebbe un operazione I / O che richiede molto tempo. Considerare 5 utenti che accedono alla stessa pagina (che emette il numero di piace). Il numero di accesso a graph.facebook.com tra 2 secondi diventerà 10, perché tutti aggiorneranno il suo numero di piace una volta in 2 secondi e sarà eseguito come un thread separato.
Non è necessario con un'implementazione del server Node.js. Solo è richiesto un accesso al server di Facebook e il tempo di ottenere ed emettere il risultato (numero di piace) può essere notevolmente ridotto.
Tuttavia, come lo implementeremo? Questo è ciò che scopriremo nelle sezioni seguenti.
Iniziare
Prima di iniziare, dovresti farlo avere Node.js installato e in esecuzione su un account di hosting Web supportato da ambiente v8. Scopri gli argomenti, "Guida introduttiva a Node.js" e "Installazione di Node.js" nel nostro precedente articolo, Guida per principianti a Node.js se non hai.
Nel server noi accesso graph.facebook.com
a un intervallo di 2 secondi e aggiorna il numero di piace. Chiamiamolo come "Action1"Prepareremo una pagina in modo che si aggiorni automaticamente tramite AJAX ogni 2 secondi.
Considera molti utenti che accedono alla stessa pagina. Per la richiesta AJAX di ogni utente, un server listener di eventi è collegato al server per il completamento di "ACTION1". Quindi, ogni volta che "ACTION1" è completato, gli ascoltatori di eventi verranno attivati.
Diamo un'occhiata al codice lato server.
I codici:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter (); function get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("response", function (response) var body = ""; response.addListener ("data", function (data) body + = data;); response.addListener ("end", function ( ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end (); my_http.createServer (function (request, response) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funzione (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response) ;). listen (8080); setInterval (get_data, 1000); sys.puts ("Server in esecuzione su 8080");
Codici Spiegazione:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter ();
Creiamo a Client HTTP per accedere alle API del grafico di Facebook facebook_client
. Abbiamo anche bisogno del EventEmitter ()
funzione che si innescherà al termine di "ACTION1".
Questo sarà chiaro nel codice descritto di seguito.
function get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("response", function (response) var body = ""; response.addListener ("data", function (data) body + = data;); response.addListener ("end", function ( ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();
Funzione get_data
recupera i dati dalla chiamata API di Facebook. Per prima cosa creare una richiesta GET usando il richiesta
metodo della seguente sintassi:
Client.request ( 'GET', 'GET_URL', "host": "host_url");
Il numero “19292868552” è l'ID di Facebook della pagina di cui abbiamo bisogno per accedere ai suoi dettagli. Quindi la pagina finale a cui stiamo tentando di accedere diventa: http://graph.facebook.com/19292868552. Dopo aver effettuato la richiesta, dobbiamo aggiungi tre ascoltatori, rispettivamente il seguente:
- Risposta - Questo listener viene attivato quando la richiesta inizia a ricevere i dati. Qui impostiamo il corpo della risposta a una stringa vuota.
- Dati - Poiché Node.js è asincrono, i dati vengono ricevuti come blocchi. Questi dati vengono aggiunti alla variabile del corpo per costruire il corpo.
- Fine - Questo listener viene attivato quando l'azione "ACTION1" specificata sopra è stata completata. I dati restituiti dalla chiamata dell'API di Facebook Graph restituiscono i dati in formato JSON. Quindi convertiamo la stringa in array JSON usando la funzione JavaScript
JSON.parse
.
Puoi vedere che un ascoltatore è collegato per il event_emitter
oggetto. Noi è necessario attivarlo alla fine di "ACTION1". Attuiamo l'ascoltatore esplicitamente con il metodo facebook_emitter.emit
.
"id": "19292868552", "nome": "Piattaforma Facebook", "immagine": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "category": "Prodotto / servizio", "sito web": "http://developers.facebook.com", "nomeutente": "piattaforma", "fondata": "Maggio 2007", "company_overview": "La piattaforma Facebook consente a chiunque di creare app sociali su Facebook e sul Web.", "mission": "Rendere il web più aperto e sociale.", "parking": "street": 0, "lot": 0, "valet": 0,
Quanto sopra rappresenta la risposta della chiamata dell'API di Facebook Graph. Al fine di ottenere il numero di piace: prendi l'oggetto "Mi piace" dell'oggetto dati, convertirlo in stringa e passarlo a emettere
funzione.
Dopo questa azione noi fine
la richiesta.
my_http.createServer (funzione (richiesta, risposta) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", function ( data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ). listen (8080); setInterval (get_data, 1000);
La creazione del server è simile al precedente tutorial, con una piccola modifica. Per ogni URL (tranne / getdata
) noi caricare il file statico corrispondente usando il LOAD_FILE
funzione abbiamo definito prima.
Il http: // localhost: 8080 / getdata
è l'URL per la richiesta AJAX. In ogni richiesta AJAX noi allegare un listener di eventi a facebook_emitter
. È simile al addListener
ma l'ascoltatore viene ucciso dopo che l'ascoltatore viene emesso per evitare perdite di memoria. Se hai bisogno di controllarlo solo sostituisci il una volta
con addListener
. Chiamiamo anche il get_data
funzione una volta in 1 secondo dalla funzione setInterval
.
Successivamente, creiamo la pagina HTML in cui viene visualizzato l'output.
I codici:
Mi piace su Facebook Numero di Mi Piace: Caricamento in corso…
Codici Spiegazione:
La parte di jQuery AJAX è piuttosto auto-esplicativa. Controlla la chiamata di load_content
funzione. Sembra proprio sta facendo girare un ciclo infinito, e sì lo è. Ecco come il numero di piace si aggiorna da solo.
Ogni chiamata AJAX sarà ritardato del tempo medio di 1 secondo poiché il ritardo nell'attivazione di ciascuna di tali chiamate sarà di 1 secondo dal server. La richiesta AJAX sarà in forma incompleta per 1 secondo.
Quindi ecco qui - un metodo per ritardare una risposta AJAX dal server per ottenere il numero di Facebook piace. Lascia la domanda nella nostra sezione commenti se hai dubbi o pensieri, grazie!
Nota dell'editore: Questo post è scritto da Geo Paul per Hongkiat.com. Geo è uno sviluppatore indipendente di Web / iPhone che ama lavorare con PHP, Codeigniter, WordPress, jQuery e Ajax. Ha 4 anni di esperienza in PHP e 2 anni di esperienza nello sviluppo di applicazioni iniPhone.