Как отобразить / обновить «Facebook Likes» с помощью Node.js
Разрабатывая примеры кодов из предыдущего поста, вы можете почувствовать, какова реальная выгода от использования Node.js. В сегодняшнем посте мы добавим практический скрипт, который наглядно демонстрирует использование Node.js в программировании на основе событий..
Мы создадим простой скрипт, который выводит количество «лайков в Facebook» конкретной страницы в Facebook. И вдобавок ко всему, мы добавим дополнительную функцию, которая будет обновлять количество «лайков в Facebook» каждые 2 секунды..
Вывод будет простым и понятным, вероятно, будет выглядеть примерно так: «Количество лайков: 2630405», и вы сами можете стилизовать его с помощью CSS, тогда давайте начнем!
Дать вам идею
Прежде чем мы углубимся в использование Node.js, давайте немного подумаем над тем, что мы обычно делаем с обычными языками программирования на стороне сервера (такими как PHP). Если вы думаете сделать звонок AJAX, чтобы найти номер нравится каждые 2 секунды - вы правы - но это может потенциально увеличивает нагрузку на сервер.
Мы можем рассмотреть доступа graph.facebook.com который был бы трудоемкая операция ввода / вывода. Рассмотрим 5 пользователей, обращающихся к одной и той же странице (которая выводит количество нравится). Номер доступа к graph.facebook.com через 2 секунды станет 10, потому что каждый будет обновлять свой номер нравится один раз в 2 секунды, и это будет выполнен как отдельный поток.
В реализации сервера Node.js это не обязательно. Только требуется один доступ к серверу Facebook и время, чтобы получить и вывести результат (количество нравится) может быть значительно уменьшен.
Тем не менее, как мы собираемся реализовать это? Это то, что мы собираемся выяснить в разделах ниже.
Начиная
Прежде чем мы начнем, ваш должен Node.js установлен и работает на поддерживаемой средой v8 учетной записи веб-хостинга. Изучите темы «Начало работы с Node.js» и «Установка Node.js» в нашей предыдущей статье, Руководство для начинающих по Node.js, если вы еще этого не сделали..
На сервере мы доступ graph.facebook.com
с интервалом в 2 секунды а также обновить количество нравится. Давайте назовем это какДЕЙСТВИЙ1Msgstr "Мы подготовим страницу так, чтобы она обновлялась через AJAX каждые 2 секунды..
Рассмотрим много пользователей, получающих доступ к той же странице. Для каждого AJAX-запроса пользователя на сервере подключается прослушиватель событий для завершения «ACTION1». Таким образом, всякий раз, когда «ACTION1» завершается, слушатели события будут вызваны.
Давайте посмотрим на код на стороне сервера.
Коды:
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 (функция (запрос, ответ) var my_path = url.parse (request.url) .pathname; if (my_path === "/ getdata") var listener = facebook_emitter.once ("data", функция (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 («Сервер работает на 8080»);
Коды Пояснение:
var facebook_client = my_http.createClient (80, "graph.facebook.com"); var facebook_emitter = new events.EventEmitter ();
Мы создаем HTTP-клиент получить доступ к Facebook Graph API facebook_client
. Нам также нужно EventEmitter ()
функция, которая сработает, когда "ACTION1" завершится.
Это будет ясно в коде, описанном ниже.
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 ();
функция получить данные
извлекает данные из вызова API Facebook. Мы первые создать запрос GET с использованием запрос
метод следующего синтаксиса:
Client.request ( 'GET', 'get_url', "хозяин": "host_url");
Число “19292868552” это идентификатор Facebook страницы, которая нам нужна для доступа к ее данным. Таким образом, последняя страница, к которой мы пытаемся получить доступ, становится: http://graph.facebook.com/19292868552. После оформления запроса нам нужно добавить три слушателя к нему, соответственно следующее:
- отклик - Этот прослушиватель запускается, когда запрос начинает получать данные. Здесь мы устанавливаем тело ответа на пустую строку.
- Данные - Поскольку Node.js является асинхронным, данные принимаются в виде фрагментов. Эти данные добавляются в переменную body для построения тела.
- Конец - Этот прослушиватель запускается, когда «ACTION1», указанный выше, завершен. Данные, возвращаемые вызовом API Graph Facebook, возвращают данные в формате JSON. Таким образом, мы конвертируем строку в массив JSON, используя функцию JavaScript
JSON.parse
.
Вы можете видеть, что слушатель прикреплен к event_emitter
объект. Мы нужно вызвать его в конце «ДЕЙСТВИЯ1». Мы запускаем слушателя явно с помощью метода facebook_emitter.emit
.
"id": "19292868552", "name": "Facebook Platform", "picture": "http://profile.ak.fbcdn.net/hprofile-ak-ash2/211033_19292868552_7506301_s.jpg", "link": "https://www.facebook.com/platform", "лайки": 2738595, "категория": "Продукт / услуга", "сайт": "http://developers.facebook.com", "имя пользователя": «платформа», «основано»: «май 2007», «company_overview»: «платформа Facebook позволяет любому создавать социальные приложения на Facebook и в Интернете», «миссия»: «сделать сеть более открытой и социальной.», "parking": "street": 0, "lot": 0, "valet": 0,
Выше представлен ответ на вызов API Graph Facebook. Для того, чтобы получить количество нравится: взять объект лайков объекта данных, преобразовать его в строку а также передать это испускают
функция.
После этого действия мы конец
запрос.
my_http.createServer (функция (запрос, ответ) 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);
Создание сервера аналогично предыдущему уроку - с небольшими изменениями. Для каждого URL (кроме /получить данные
) мы загрузить соответствующий статический файл, используя load_file
функция мы определили ранее.
HTTP: // локальный: 8080 / GetData
URL для запроса AJAX В каждом AJAX-запросе мы присоединить слушателя события к facebook_emitter
. Это похоже на добавления слушателя
но слушатель убит после того, как слушатель выпущен, чтобы избежать утечки памяти. Если вам нужно проверить это просто заменить один раз
с добавления слушателя
. Мы также называем получить данные
функция один раз в 1 секунду функцией setInterval
.
Далее мы создаем HTML-страницу, на которой отображается вывод.
Коды:
Facebook любит Количество лайков: Loading ...
Коды Пояснение:
Часть jQuery AJAX довольно понятна. Проверьте вызов load_content
функция. Похоже это работает бесконечный цикл, и да, это так. Вот как количество нравится обновляется сам.
Каждый звонок AJAX будет задерживаться на среднее время в 1 секунду так как задержка запуска каждого такого вызова будет 1 секунда с сервера. Запрос AJAX будет в неполной форме в течение этой 1 секунды.
Итак, вы идете - метод задержки ответа AJAX с сервера, чтобы получить номер Facebook нравится. Оставьте вопрос в нашем разделе комментариев, если у вас есть какие-либо сомнения или мысли, спасибо!
Примечание редактора: Этот пост написан Гео Пол для Hongkiat.com. Geo - независимый веб-разработчик / iPhone, который любит работать с PHP, Codeigniter, WordPress, jQuery и Ajax. Имеет 4-летний опыт работы с PHP и 2-летний опыт разработки приложений для iPhone..