Jak zobrazit / aktualizovat Facebook líbí pomocí Node.js
Tím, že pracuje se vzorovými kódy z předchozího příspěvku, můžete mít pocit, jaký je skutečný přínos používání Node.js. V dnešním příspěvku hodíme praktický skript, který jasně demonstruje použití Node.js v programování založeném na událostech.
Vytvoříme jednoduchý skript, který bude obsahovat počet "Facebooků" konkrétní stránky na Facebooku. A navíc, budeme házet v další funkci, která bude aktualizovat počet "Facebook líbí" každé 2 sekundy.
Výstup bude jednoduchý a prostý, pravděpodobně vypadá něco takového: "Počet líbí: 2630405" a je jen na vás, zda ho budete používat pomocí CSS.!
Dát vám nápad
Než začneme používat Node.js, pojďme si chvilku myslet na to, co bychom normálně dělali s běžnými programovacími jazyky na straně serveru (jako je PHP). Pokud přemýšlíte, aby se AJAX volání najít číslo rád za každé 2 sekundy - máte pravdu - ale to může být potenciálně zvýšit režii serveru.
Můžeme uvažovat přístup graph.facebook.com který by byl časově náročná I / O operace. Zvažte 5 uživatelů, kteří přistupují na stejnou stránku (která má počet rád). Počet přístupů graph.facebook.com za 2 sekundy se stane 10, protože každý bude aktualizovat své číslo rád jednou za 2 sekundy bude provedeno jako samostatné vlákno.
To není nutné s implementací serveru Node.js. Pouze je vyžadován jeden přístup k serveru Facebook a čas získat a vydat výsledek (počet. \ t rád) lze výrazně snížit.
Jak to však budeme realizovat? To je to, co zjistíme v následujících částech.
Začínáme
Než začneme, měli byste mají nainstalovaný Node.js a běží na web hostingovém účtu podporovaném prostředím v8. Podívejte se na témata „Začínáme s Node.js“ a „Instalace Node.js“ v našem předchozím článku, Příručka pro začátečníky k Node.js, pokud nemáte.
Na serveru jsme přístup graph.facebook.com
v intervalu 2 sekund a aktualizovat číslo rád. Řekněme to jako "AKCE1"Připravíme si stránku tak, aby se každé 2 sekundy aktualizovala přes AJAX.".
Zvažte mnoho uživatelů, kteří přistupují na stejnou stránku. Pro požadavek uživatele AJAX je na serveru připojen posluchač události pro dokončení akce "ACTION1". Po dokončení akce "ACTION1" budou posluchači událostí spuštěni.
Podívejme se na kód na straně serveru.
Kódy:
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", funkce (data) tělo + = data;); response.addListener ("end", funkce ( ) var data = JSON.parse (tělo); facebook_emitter.emit ("data", String (data.likes));););););); request.end (); my_http.createServer (funkce (požadavek, odpověď) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", funkce (data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, odpověď) ;). poslech (8080); setInterval (get_data, 1000); sys.puts ("Server běží na 8080");
Vysvětlení kódů:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter ();
Vytváříme HTTP klient pro přístup k rozhraní Facebook Graph API facebook_client
. Potřebujeme také EventEmitter ()
funkce, která se spouští po dokončení akce „ACTION1“.
To bude zřejmé z níže popsaného kódu.
function get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("response", function (response) var body = ""; response.addListener ("data", funkce (data) tělo + = data;); response.addListener ("end", funkce ( ) var data = JSON.parse (tělo); facebook_emitter.emit ("data", String (data.likes));););););); request.end ();
Funkce get_data
načítá data z volání služby Facebook API. Nejdřív vytvořit požadavek GET za použití žádost
následující syntaxe:
Client.request ('GET', 'get_url', "host": "host_url");
Číslo “19292868552” je Facebook ID stránky, ke které potřebujeme přístup k jejím údajům. Poslední stránka, ke které se snažíme získat přístup, je tedy: http://graph.facebook.com/19292868552. Po podání žádosti musíme přidejte tři posluchače, resp.
- Odezva - Tento posluchač se spustí, když požadavek začne přijímat data. Zde nastavíme tělo odpovědi na prázdný řetězec.
- Data - Jelikož je Node.js asynchronní, jsou data přijímána jako bloky. Tato data se přidávají do tělesné proměnné, aby se vytvořilo tělo.
- Konec - Tento posluchač se spustí, když je dokončena výše uvedená akce "ACTION1". Data vrácená voláním volání Facebook Graph API vrací data ve formátu JSON. Převedeme tedy řetězec na pole JSON pomocí funkce JavaScript
JSON.parse
.
Můžete vidět, že posluchač je připojen k event_emitter
objekt. My je třeba jej spustit na konci akce „ACTION1“. Spouątěcí posluchač explicitně spouątěme metodu facebook_emitter.emit
.
"id": "19292868552", "name": "Facebook Platform", "obrázek": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "likes": 2738595, "kategorie": "Produkt / služba", "webová stránka": "http://developers.facebook.com", "uživatelské jméno": "platforma", "založena": "květen 2007", "company_overview": "Platforma Facebook umožňuje komukoli vytvářet sociální aplikace na Facebooku a na webu.", "mise": "Aby byl web otevřenější a sociální.", "parking": "street": 0, "lot": 0, "komorník": 0,
Výše uvedené představuje odezvu volání rozhraní Facebook Graph API. Aby bylo možné získat počet rád: vzít objekt rádu datového objektu, převést na řetězec a předejte to vysílat
funkce.
Po této akci jsme konec
požadavek.
my_http.createServer (funkce (požadavek, odpověď) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", function (funkce) data) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response); ). poslech (8080); setInterval (get_data, 1000);
Vytvoření serveru je podobné předchozímu tutoriálu - s malou změnou. Pro každou adresu URL (kromě / getdata
) my načíst odpovídající statický soubor pomocí load_file
funkce jsme definovali dříve.
http: // localhost: 8080 / getdata
je adresa URL žádosti AJAX. V každém požadavku AJAX jsme připojit posluchače událostí k facebook_emitter
. Je to podobné addListener
ale posluchač je zabit poté, co je posluchač vydán, aby se zabránilo úniku paměti. Pokud potřebujete zkontrolovat to jen nahradit jednou
s addListener
. Zavoláme také get_data
funkci jednou za 1 sekundu setInterval
.
Dále vytvoříme HTML stránku, na které se zobrazí výstup.
Kódy:
Facebook Líbí se Počet líbí: Načítání…
Vysvětlení kódů:
Součást jQuery AJAX je velmi srozumitelná. Podívejte se na volání load_content
funkce. Vypadá to tak je spuštěna nekonečná smyčka, a ano, je. Takhle je počet rád se aktualizuje.
Každé volání AJAX zpoždění o 1 sekundu protože zpoždění spouštění každého takového volání bude 1 sekunda od serveru. Žádost AJAX bude po dobu 1 sekundy v neúplném formuláři.
Takže tam jdete - metoda zpoždění odezvy AJAX ze serveru, aby se číslo Facebook rád. Drop otázka v naší sekci komentář, pokud máte nějaké pochybnosti nebo myšlenky, díky!
Poznámka editora: Tento příspěvek je napsán Geo Paul pro Hongkiat.com. Geo je nezávislý vývojář webu / iPhone, který má rád práci s PHP, Codeigniter, WordPress, jQuery a Ajax. Má 4 roky zkušeností v PHP a 2 roky zkušeností v oblasti vývoje aplikací iniPhone.