Anzeigen / Aktualisieren von „Facebook Likes“ mithilfe von Node.js
Wenn Sie die Beispielcodes aus dem vorherigen Beitrag ausarbeiten, haben Sie möglicherweise das Gefühl, was der tatsächliche Nutzen der Verwendung von Node.js ist. In dem heutigen Beitrag fügen wir ein praktisches Skript ein, das die Verwendung von Node.js in der ereignisbasierten Programmierung deutlich macht.
Wir erstellen ein einfaches Skript, das die Anzahl der "Facebook-Likes" einer bestimmten Facebook-Seite ausgibt. Außerdem fügen wir eine zusätzliche Funktion hinzu, die die Anzahl der "Facebook-Likes" alle 2 Sekunden aktualisiert.
Die Ausgabe wird einfach und schlicht sein, sieht wahrscheinlich in etwa wie folgt aus: "Anzahl der Likes: 2630405" und es liegt an Ihnen, sie mit CSS zu stylen. Lassen Sie uns dann beginnen!
Um Ihnen eine Idee zu geben
Bevor wir uns mit Node.js beschäftigen, überlegen wir uns kurz, was wir normalerweise mit gängigen serverseitigen Programmiersprachen (wie PHP) tun würden. Wenn Sie einen AJAX-Anruf tätigen möchten, um die Nummer von zu ermitteln Likes in 2 Sekunden - Sie haben Recht - aber das kann sein möglicherweise den Server-Overhead erhöhen.
Wir können überlegen Zugriff graph.facebook.com was wäre ein zeitraubender E / A-Betrieb. Betrachten Sie 5 Benutzer, die auf dieselbe Seite zugreifen (die die Anzahl von ausgibt) Likes). Die Anzahl der Zugriffe auf graph.facebook.com in 2 Sekunden werden 10, da jeder seine / ihre Anzahl von aktualisiert Likes einmal in 2 Sekunden und dann wird als separater Thread ausgeführt.
Bei einer Node.js-Serverimplementierung ist dies nicht erforderlich. Nur Ein Zugriff auf den Facebook-Server ist erforderlich und das Zeit, um das Ergebnis abzurufen und auszugeben (Anzahl der Likes) kann stark reduziert werden.
Wie sollen wir das aber umsetzen? Das erfahren wir in den folgenden Abschnitten.
Fertig machen
Bevor wir anfangen, solltest du Node.js muss installiert sein und auf einem V8-Umgebung-unterstützten Webhosting-Konto ausgeführt werden. Lesen Sie die Themen "Erste Schritte mit Node.js" und "Installieren von Node.js" in unserem vorherigen Artikel, Anfängerhandbuch für Node.js, falls dies nicht der Fall ist.
Auf dem Server haben wir Zugriff graph.facebook.com
im Abstand von 2 Sekunden und aktualisieren Sie die Anzahl von Likes. Nennen wir das als "AKTION1". Wir bereiten eine Seite vor, damit sie sich alle 2 Sekunden über AJAX aktualisiert.
Berücksichtigen Sie, dass viele Benutzer auf dieselbe Seite zugreifen. Für jede AJAX-Anforderung eines Benutzers wird ein Ereignislistener an den Server angehängt, um "ACTION1" abzuschließen.. Wenn also "ACTION1" abgeschlossen ist, werden die Ereignis-Listener ausgelöst.
Schauen wir uns den Code der Server-Seite an.
Die Codes:
var facebook_client = mein_http.createClient (80, "graph.facebook.com"); var facebook_emitter = neue events.EventEmitter (); function get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("Antwort", Funktion (Antwort) var body = ""; response.addListener ("data", Funktion (data) body + = data;); response.addListener ("end", Funktion ( ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end (); my_http.createServer (Funktion (Anforderung, Antwort) 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 (mein_Pfad, Antwort) ). listen (8080); setInterval (get_data, 1000); sys.puts ("Server läuft auf 8080");
Codes Erklärung:
var facebook_client = mein_http.createClient (80, "graph.facebook.com"); var facebook_emitter = neue events.EventEmitter ();
Wir schaffen ein HTTP-Client um auf Facebook Graph APIs zuzugreifen facebook_client
. Wir brauchen auch die EventEmitter ()
Funktion, die ausgelöst wird, wenn "ACTION1" abgeschlossen ist.
Dies wird im unten beschriebenen Code deutlich.
function get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("Antwort", Funktion (Antwort) var body = ""; response.addListener ("data", Funktion (data) body + = data;); response.addListener ("end", Funktion ( ) var data = JSON.parse (body); facebook_emitter.emit ("data", String (data.likes)););); request.end ();
Funktion Daten empfangen
ruft Daten aus dem Facebook-API-Aufruf ab. Wir zuerst Erstellen Sie eine GET-Anfrage Verwendung der anfordern
Methode der folgenden Syntax:
Client.request ('GET', 'get_url', "host": "host_url");
Die Nummer “19292868552” ist die Facebook-ID der Seite, auf die wir zugreifen müssen. Die letzte Seite, auf die wir zugreifen möchten, lautet: http://graph.facebook.com/19292868552. Nachdem wir die Anfrage gemacht haben, müssen wir fügen Sie drei Hörer hinzu, bzw. Folgendes:
- Antwort - Dieser Listener wird ausgelöst, wenn die Anforderung beginnt, Daten zu empfangen. Hier setzen wir den Hauptteil der Antwort auf eine leere Zeichenfolge.
- Daten - Da Node.js asynchron ist, werden die Daten als Chunks empfangen. Diese Daten werden in die body-Variable eingefügt, um den body aufzubauen.
- Ende - Dieser Listener wird ausgelöst, wenn die oben angegebene "ACTION1" abgeschlossen ist. Die vom Facebook Graph API-Aufruf zurückgegebenen Daten geben Daten im JSON-Format zurück. Also konvertieren wir den String mit der JavaScript-Funktion in ein JSON-Array
JSON.parse
.
Sie sehen, dass ein Listener für die angeschlossen ist event_emitter
Objekt. Wir muss am Ende der "ACTION1" ausgelöst werden. Wir lösen den Listener explizit mit der Methode aus facebook_emitter.emit
.
"id": "19292868552", "name": "Facebook Platform", "picture": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "link": "https://www.facebook.com/platform", "likes": 2738595, "category": "Produkt / Dienstleistung", "Website": "http://developers.facebook.com", "Benutzername": "platform", "found": "Mai 2007", "company_overview": "Mit der Facebook-Plattform kann jeder soziale Apps auf Facebook und im Internet erstellen.", "mission": "Das Web offener und sozialer machen.", "Parken": "Straße": 0, "Los": 0, "Parkservice": 0,
Das oben Dargestellte repräsentiert die Antwort des Aufrufs der Facebook Graph API. Um die Anzahl von zu erhalten Likes: Nehmen Sie das Likes-Objekt des Datenobjekts, wandle es in einen String um und übergeben Sie es an emittieren
Funktion.
Nach dieser Aktion haben wir Ende
die Anfrage.
my_http.createServer (Funktion (Anfrage, Antwort) 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 (mein_Pfad, Antwort); ). listen (8080); setInterval (get_data, 1000);
Das Erstellen des Servers ähnelt dem vorherigen Tutorial - mit einer kleinen Änderung. Für jede URL (außer /Daten empfangen
wir Laden Sie die entsprechende statische Datei mit lade Datei
Funktion Wir haben früher definiert.
Das http: // localhost: 8080 / getdata
ist die URL für die AJAX-Anfrage. In jeder AJAX-Anfrage haben wir Hängen Sie einen Ereignis-Listener an facebook_emitter
. Es ist dem ähnlich addListener
aber der Zuhörer wird abgebrochen, nachdem der Listener ausgegeben wurde, um einen Speicherverlust zu vermeiden. Wenn Sie es einfach ausprobieren müssen ersetze das Einmal
mit addListener
. Wir nennen auch die Daten empfangen
Funktion einmal in 1 Sekunde durch die Funktion setInterval
.
Als Nächstes erstellen wir die HTML-Seite, auf der die Ausgabe angezeigt wird.
Die Codes:
Facebook Gefällt mir Angaben Anzahl der Likes: Wird geladen…
Codes Erklärung:
Der jQuery AJAX-Teil ist ziemlich selbsterklärend. Überprüfen Sie den Anruf der load_content
Funktion. Es sieht so aus als ob läuft eine Endlosschleife, und ja ist es. So ist die Anzahl von Likes wird selbst aktualisiert.
Jeder AJAX-Anruf wird um die durchschnittliche Zeit von 1 Sekunde verzögert da die Verzögerung bei der Auslösung eines solchen Anrufs 1 Sekunde vom Server entfernt ist. Die AJAX-Anfrage ist für diese 1 Sekunde unvollständig.
Also los geht's - eine Methode, um eine AJAX-Antwort vom Server zu verzögern, um die Nummer von Facebook zu erhalten Likes. Lassen Sie die Frage in unserem Kommentarbereich fallen, wenn Sie Zweifel oder Gedanken haben, danke!
Anmerkung des Herausgebers: Dieser Beitrag wird von geschrieben Geo Paul für Hongkiat.com. Geo ist ein unabhängiger Web- / iPhone-Entwickler, der gerne mit PHP, Codeigniter, WordPress, jQuery und Ajax arbeitet. Er hat 4 Jahre Erfahrung in PHP und 2 Jahre Erfahrung in der Entwicklung von IniPhone-Anwendungen.