Како приказати / ажурирати Фацебоок Ликес користећи Ноде.јс
Разрадом примера кодова из претходног поста, можда сте добили осећај шта је стварна корист од коришћења Ноде.јс. У данашњем посту убацујемо практични скрипт који јасно демонстрира употребу Ноде.јс у програмирању заснованом на догађајима.
Направићемо једноставну скрипту која ће приказати број "Фацебоок лајкова" на одређеној Фацебоок страници. Поврх тога, бацићемо и додатну функцију која ће ажурирати број "Фацебоок лајкова" сваке 2 секунде.
Излаз ће бити једноставан и једноставан, вероватно изгледа овако: "Број Ликес: 2630405" и на вама је да га стилизујете помоћу ЦСС-а, почнимо онда!
Да вам да идеју
Пре него што се упустимо у коришћење Ноде.јс, узмимо тренутак да размислимо шта бисмо обично радили са уобичајеним језицима за програмирање на страни сервера (као што је ПХП). Ако размишљате да направите АЈАКС позив да пронађете број свиђа сваке 2 секунде - у праву сте - али ово може потенцијално повећати оптерећење сервера.
Можемо размотрити приступ грапх.фацебоок.цом што би био дуготрајна У / И операција. Размотрите 5 корисника који приступају истој страници (која даје број свиђа). Број приступа грапх.фацебоок.цом за 2 секунде ће бити 10, јер ће сви ажурирати свој број свиђа једном у 2 секунде и то ће се извршити као засебна нит.
То није неопходно са имплементацијом Ноде.јс сервера. Само потребан је један приступ Фацебоок серверу анд тхе време да се добије и изведе резултат (број свиђа) може се знатно смањити.
Међутим, како ћемо то спровести? То ћемо сазнати у доњим одељцима.
Почетак
Пре него што почнемо, треба имате инсталиран и покренут Ноде.јс на в8 окружењу подржаном од окружења в8. Погледајте теме "Почетак рада са Ноде.јс" и "Инсталирање Ноде.јс" у претходном чланку, Водич за почетнике за Ноде.јс ако нисте.
У серверу ми приступ грапх.фацебоок.цом
у интервалу од 2 секунде и ажурирајте број свиђа. Назовимо то као "АЦТИОН1Припремит ћемо страницу тако да се она ажурира путем АЈАКС-а сваке 2 секунде.
Размотрите многе кориснике који приступају истој страници. За сваки АЈАКС захтев сваког корисника, слушалац догађаја је прикључен на сервер за завршетак "АЦТИОН1". Тако да кад год се заврши "АЦТИОН1", слушатељи догађаја ће бити активирани.
Погледајмо код серверске стране.
Кодови:
вар фацебоок_цлиент = ми_хттп.цреатеЦлиент (80, "грапх.фацебоок.цом"); вар фацебоок_емиттер = нови догађаји.ЕвентЕмиттер (); функција гет_дата () вар рекуест = фацебоок_цлиент.рекуест ("ГЕТ", "/ 19292868552", "хост": "грапх.фацебоок.цом"); рекуест.аддЛистенер ("одговор", функција (одговор) вар боди = ""; респонсе.аддЛистенер ("подаци", функција (подаци) боди + = дата;); респонсе.аддЛистенер ("крај", функција ( ) вар дата = ЈСОН.парсе (боди); фацебоок_емиттер.емит ("дата", Стринг (дата.ликес)););); рекуест.енд (); ми_хттп.цреатеСервер (функција (захтев, одговор) вар ми_патх = урл.парсе (рекуест.урл) .патхнаме, ако (ми_патх === "/ гетдата") вар листенер = фацебоок_емиттер.онце ("дата", функција (дата) респонсе.вритеХеадер (200, "Цонтент-Типе": "тект / плаин"); респонсе.врите (дата); респонсе.енд ();); елсе лоад_филе (ми_патх, респонсе) ;). слушать (8080); сетИнтервал (гет_дата, 1000); сис.путс ("Сервер Руннинг он 8080");
Кодови Објашњење:
вар фацебоок_цлиент = ми_хттп.цреатеЦлиент (80, "грапх.фацебоок.цом"); вар фацебоок_емиттер = нови догађаји.ЕвентЕмиттер ();
Ми стварамо а ХТТП клијент да приступите Фацебоок Грапх АПИ-ју фацебоок_цлиент
. Такође нам је потребно ЕвентЕмиттер ()
која ће се активирати када се заврши "АЦТИОН1".
Ово ће бити јасно у доле описаном коду.
функција гет_дата () вар рекуест = фацебоок_цлиент.рекуест ("ГЕТ", "/ 19292868552", "хост": "грапх.фацебоок.цом"); рекуест.аддЛистенер ("одговор", функција (одговор) вар боди = ""; респонсе.аддЛистенер ("подаци", функција (подаци) боди + = дата;); респонсе.аддЛистенер ("крај", функција ( ) вар дата = ЈСОН.парсе (боди); фацебоок_емиттер.емит ("дата", Стринг (дата.ликес)););); рекуест.енд ();
Фунцтион гет_дата
преузима податке из Фацебоок АПИ позива. Ми прво креирајте ГЕТ захтев помоћу захтев
метода следеће синтаксе:
Цлиент.рекуест ('ГЕТ', 'гет_урл', "хост": "хост_урл");
Број “19292868552” је Фацебоок ИД странице коју требамо да приступимо његовим детаљима. Дакле, последња страница коју покушавамо да добијемо је: хттп://грапх.фацебоок.цом/19292868552. После подношења захтева морамо додајте му три слушатеља, респективно:
- Респонсе - Овај слушалац се активира када захтев почне да прима податке. Овде постављамо тело одговора на празан низ.
- Дата - Како је Ноде.јс асинхрони, подаци се примају као делови. Ови подаци се додају у тело променљиве да би се изградило тело.
- Крај - Овај слушалац се активира када се заврши горенаведена "АЦТИОН1". Подаци враћени позивом АПИ-ја за Гоогле Граф враћају податке у ЈСОН формату. Тако конвертујемо стринг у ЈСОН низ користећи ЈаваСцрипт функцију
ЈСОН.парсе
.
Можете видети да је слушалац прикључен за евент_емиттер
објекат. Ми треба да га активирате на крају "АЦТИОН1". Покрећемо слушалицу експлицитно методом фацебоок_емиттер.емит
.
"ид": "19292868552", "наме": "Фацебоок платформа", "слика": "хттп://профиле.ак.фбцдн.нет/хпрофиле-ак-асх2/211033_19292868552_7506301_с.јпг", "линк": "хттпс://ввв.фацебоок.цом/платформ", "ликес": 2738595, "цатегори": "Продуцт / Сервице", "вебсите": "хттп://девелоперс.фацебоок.цом", "усернаме": "платформа", "основана": "Мај 2007", "цомпани_овервиев": "Фацебоок платформа омогућава свакоме да гради друштвене апликације на Фацебооку и вебу.", "мисија": "Да би веб учинио отворенијим и друштвеним.", "паркинг": "стреет": 0, "лот": 0, "валет": 0,
Горе наведено представља одговор на позив АПИ-ја за Грапх Грапх. Да би добио број свиђа: узети објекат воли објекта података, претворите га у стринг и прослиједите га емитовати
функције.
После ове акције ми крај
Захтев.
ми_хттп.цреатеСервер (функција (захтев, одговор) вар ми_патх = урл.парсе (рекуест.урл) .патхнаме, ако (ми_патх === "/ гетдата") вар листенер = фацебоок_емиттер.онце ("дата", фунцтион ( дата) респонсе.вритеХеадер (200, "Цонтент-Типе": "тект / плаин"); респонсе.врите (дата); респонсе.енд ();); елсе лоад_филе (ми_патх, респонсе); ). листен (8080); сетИнтервал (гет_дата, 1000);
Креирање сервера је слично претходном упутству - уз малу промену. За сваки УРЛ (осим / гетдата
) ми учитајте одговарајућу статичку датотеку користећи лоад_филе
функције дефинисали смо раније.
Тхе хттп: // лоцалхост: 8080 / гетдата
је УРЛ за АЈАКС захтев. У сваком АЈАКС захтеву ми приложите слушалицу догађаја фацебоок_емиттер
. Слично је и са аддЛистенер
али слушалац је убијен након што је слушач емитован да би се избегло цурење меморије. Ако требате само провјерити заменити једном
са аддЛистенер
. Такође зовемо гет_дата
Функција функционише једном у 1 секунди сетИнтервал
.
Затим креирамо ХТМЛ страницу на којој се приказује излаз.
Кодови:
Фацебоок Ликес Број омиљених: Учитавање…
Кодови Објашњење:
ЈКуери АЈАКС део је прилично разумљив. Провјерите позив лоад_цонтент
функције. Изгледа тако покреће бесконачну петљу, и да јесте. Тако број свиђа се ажурира.
Сваки АЈАКС позив ће се одложити за просечно време од 1 секунде пошто ће кашњење у окидању сваког таквог позива бити 1 секунда од сервера. АЈАКС захтев ће бити у некомплетном облику за ту 1 секунду.
Дакле, ту је - метода одлагања АЈАКС одговора са сервера да би се добио број Фацебоока свиђа. Ако имате било какве недоумице или мисли, оставите питање у нашој секцији за коментаре!
Напомена уредника: Овај пост је написао / ла Гео Паул фор Хонгкиат.цом. Гео је независни Веб / иПхоне девелопер који ужива у раду са ПХП, Цодеигнитер, ВордПресс, јКуери и Ајак. Има 4 године искуства у ПХП-у и 2 године искуства у развоју иИПхоне апликација.