Головна » Кодування » Як відображати / оновлювати Facebook Likes за допомогою Node.js

    Як відображати / оновлювати 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. Після виконання запиту нам потрібно додайте до нього трьох слухачів, відповідно:

    1. Відповідь - Цей слухач спрацьовує, коли запит починає отримувати дані. Тут ми встановлюємо тіло відповіді на порожній рядок.
    2. Дані - Оскільки Node.js є асинхронною, дані надходять у вигляді фрагментів. Ці дані додаються до змінної тіла для створення тіла.
    3. Кінець - Цей слухач спрацьовує, коли завершено вказаний вище "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.