Як відображати / оновлювати Facebook Likes за допомогою Node.js
Розробляючи зразки кодів з попереднього повідомлення, ви могли б відчути, що таке реальна користь від використання Node.js. У сьогоднішньому посланні ми переносимо практичний сценарій, який наочно демонструє використання Node.js у програмуванні на основі подій.
Ми будемо створювати простий скрипт, який виводить кількість "улюблених у Facebook" певної сторінки Facebook. Крім того, ми додамо додаткову функцію, яка оновлюватиме кількість "улюблених" у Facebook кожні 2 секунди.
Висновок буде простим і простим, ймовірно виглядає приблизно так: "Кількість вподобань: 2630405", і ви самі повинні його стиль, використовуючи CSS, давайте почнемо потім!
Щоб дати вам ідею
Перш ніж зануритися у використання Node.js, давайте подумаємо, що ми зазвичай робимо з звичайними серверними мовами програмування (наприклад, PHP). Якщо ви думаєте зробити виклик AJAX, щоб знайти кількість любить кожні 2 секунди - ви правильні - але це може потенційно збільшити накладні витрати сервера.
Ми можемо розглянути доступ graph.facebook.com яка була б a тривалу операцію введення-виведення. Розгляньте 5 користувачів, які звертаються до однієї сторінки (яка виводить кількість любить). Кількість доступу до graph.facebook.com через 2 секунди стане 10, тому що кожен буде оновлювати свій номер любить раз на 2 секунди і це буде виконано як окремий потік.
Це не обов'язково при реалізації сервера Node.js. Тільки потрібен один доступ до сервера Facebook і час для отримання і виведення результату (кількість любить) можна значно скоротити.
Але як ми будемо реалізовувати це? Саме це ми дізнаємося в наступних розділах.
Починаємо
Перш ніж почати, потрібно встановлено та запущено Node.js на обліковому записі веб-хостингу з підтримкою середовища v8. Перегляньте теми "Початок роботи з Node.js" та "Встановлення Node.js" у нашій попередній статті, Посібник для початківців Node.js, якщо у вас немає.
На сервері ми доступ graph.facebook.com
з інтервалом 2 секунди і оновити кількість любить. Назвемо це як "ACTION1". Ми підготуємо сторінку так, щоб вона оновлювалася через AJAX кожні 2 секунди.
Розгляньте багато користувачів, які звертаються до однієї сторінки. Для кожного користувача AJAX-запит приєднується до сервера на сервері для завершення "ACTION1". Тому, коли завершується "ACTION1", прослуховувачі подій будуть спрацьовувати.
Давайте подивимося на код сервера.
Коди:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter (); функція get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("відповідь", функція (відповідь) var body = ""; response.addListener ("дані", функція (дані) body + = data;); response.addListener ("кінець", функція ( ) var data = JSON.parse (тіло); facebook_emitter.emit ("дані", 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) response.writeHeader (200, "Content-Type": "text / plain"); response.write (data); response.end ();); else load_file (my_path, response) слухати (8080); setInterval (get_data, 1000); sys.puts ("Сервер, запущений на 8080");
Коди Пояснення:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter ();
Ми створюємо HTTP-клієнт для доступу до API графіка Facebook Graph facebook_client
. Нам також потрібні EventEmitter ()
функція, яка запускається, коли завершиться "ACTION1".
Це буде зрозуміло в коді, описаному нижче.
функція get_data () var request = facebook_client.request ("GET", "/ 19292868552", "host": "graph.facebook.com"); request.addListener ("відповідь", функція (відповідь) var body = ""; response.addListener ("дані", функція (дані) body + = data;); response.addListener ("кінець", функція ( ) var data = JSON.parse (тіло); facebook_emitter.emit ("дані", String (data.likes)););); request.end ();
Функція get_data
вибирає дані з виклику API Facebook. Ми спочатку створити запит GET за допомогою запит
метод наступного синтаксису:
Client.request ('GET', 'get_url', "host": "host_url");
Кількість “19292868552” - це ідентифікатор сторінки на Facebook, який нам потрібен, щоб отримати доступ до його деталей. Таким чином, остання сторінка, яку ми намагаємося отримати, стає: http://graph.facebook.com/19292868552. Після виконання запиту нам потрібно додайте до нього трьох слухачів, відповідно:
- Відповідь - Цей слухач спрацьовує, коли запит починає отримувати дані. Тут ми встановлюємо тіло відповіді на порожній рядок.
- Дані - Оскільки Node.js є асинхронною, дані надходять у вигляді фрагментів. Ці дані додаються до змінної тіла для створення тіла.
- Кінець - Цей слухач спрацьовує, коли завершено вказаний вище "ACTION1". Дані, які повертаються викликом API для графіка Facebook, повертають дані у форматі JSON. Тому ми перетворюємо рядок у масив JSON, використовуючи функцію JavaScript
JSON.parse
.
Ви можете бачити, що слухач приєднаний до event_emitter
об'єкт. Ми потрібно викликати його в кінці "ACTION1". Ми запускаємо слухач явно методом facebook_emitter.emit
.
"id": "19292868552", "name": "Платформа Facebook", "picture": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "посилання": "https://www.facebook.com/platform", "likes": 2738595, "категорія": "Продукт / послуга", "веб-сайт": "http://developers.facebook.com", "ім'я користувача": "платформа", "заснована": "Травень 2007", "company_overview": "Платформа Facebook дозволяє кожному створювати соціальні програми на Facebook і в Інтернеті.", "Місія": "Щоб зробити Інтернет більш відкритим і соціальним", "парковка": "вулиця": 0, "лот": 0, "валет": 0,
Вище наведений вигляд відповідає виклику API графіка Facebook. Для того, щоб отримати кількість любить: візьмемо об'єкт подібних об'єктів даних, перетворити його в рядок і передати його виділяють
функції.
Після цієї дії ми кінець
запит.
my_http.createServer (функція (запит, відповідь) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("дані", функція ( data) response.writeHeader (200, "Content-Type": "text / plain"); answer.write (data); response.end ();); else load_file (my_path, response); слухати (8080); setInterval (get_data, 1000);
Створення сервера схоже на попередній підручник - з невеликою зміною. Для кожного URL (окрім / getdata
) ми завантажте відповідний статичний файл за допомогою load_file
функції ми визначили раніше.
The http: // localhost: 8080 / getdata
URL-адреса для запиту AJAX. У кожному AJAX запиті ми приєднайте слухача подій facebook_emitter
. Він схожий на addListener
але слухач вбивається після того, як слухач виданий, щоб уникнути витоку пам'яті. Якщо вам потрібно просто перевірити це замінити один раз
с addListener
. Ми також називаємо get_data
функцію один раз в 1 секунду setInterval
.
Далі ми створюємо HTML-сторінку, на якій виводиться вивід.
Коди:
Facebook любить Кількість вподобань: Завантаження…
Коди Пояснення:
Частина JQuery AJAX досить зрозуміла. Перевірте виклик load_content
функції. Це виглядає так працює нескінченний цикл, та так. Ось як і кількість любить отримує оновлення.
Кожен виклик AJAX буде відкладено в середньому на 1 секунду як затримка в запуску кожного такого виклику буде 1 секунда від сервера. Запит AJAX буде у неповній формі протягом 1 секунди.
Так що ви йдете - метод затримки відповіді AJAX від сервера, щоб отримати кількість Facebook любить. Якщо у вас є якісь сумніви або думки, ви можете поставити запитання в нашому розділі коментарів!
Примітка редактора: Цей пост написано Гео Павло для Hongkiat.com. Geo є незалежним розробником Web / iPhone, який любить працювати з PHP, Codeigniter, WordPress, jQuery і Ajax. Він має 4-річний досвід роботи в PHP та 2 роки досвіду розробки додатків iniPhone.