Питхон

Како направити монитор веб промета помоћу Питхона, Фласка, СКЛите-а и Пусхера

Како направити монитор веб промета помоћу Питхона, Фласка, СКЛите-а и Пусхера
Ако вам на Интернету ради веб апликација, мораћете да знате одакле долазе посетиоци, системи које користе и друге такве ствари.

Иако можете да користите услуге као што су Гоогле Аналитицс, Монстер Инсигхтс итд., Забавније је изградити систем за надзор помоћу Питхона, СКЛ базе података и Пусхера за ажурирање података у реалном времену.

У данашњем упутству ћемо размотрити како створити такав алат користећи Питхон, Фласк и Пусхер. Водич је високо прилагођени спин-офф из водича објављеног на службеној страници Пусхера.

Захтеви

За ову верзију мораћете да знате како да радите са програмским језиком питхон, једноставним веб развојем и АПИ-јем.

Инсталирање захтева

Започните инсталирањем Питхона на ваш систем. Такође ћете морати да инсталирате Пусхер и Фласк, хттпагентпарсер.

Креирање базе података

Први корак је стварање базе података у којој се подаци чувају. За Питхон, склите3 долази подразумевано и његово коришћење је једноставно. Направите датотеку која се зове база података.пи и унесите код испод:

импорт склите3
из склите3 Грешка при увозу
деф цреате_цоннецтион (база података):
покушати:
цонн = склите3.повезати (
база података, исолатион_левел = Ноне, цхецк_саме_тхреад = Фалсе)
цонн.ров_фацтори = ламбда ц, р: дицт (
зип ([цол [0] за цол у ц.опис], р))
ретурн цонн
осим Грешка као е:
испис (е)
деф цреате_табле (ц, скл):
ц.изврши (скл)
деф упдате_ор_цреате_паге (ц, подаци):
скл = "СЕЛЕЦТ * ФРОМ странице на којима је наме =? и сесија =?"
ц.изврши (скл, подаци [: - 1])
резултат = ц.фетцхоне ()
ако је резултат == нема:
цреате_пагес (ц, подаци)
иначе:
испис (резултат)
упдате_пагес (ц, резултат ['ид'])
деф цреате_пагес (ц, подаци):
испис (подаци)
скл = "ИНСЕРТ ИНТО странице (име, сесија, прва_посјећена)
ВРЕДНОСТИ (?,?,?) "
ц.изврши (скл, подаци)
деф упдате_пагес (ц, пагеИд):
испис (пагеИд)
скл = "АЖУРИРАЈ странице
СЕТ посете = посете + 1
ВХЕРЕ ид = ?"
ц.изврши (скл, [пагеИд])
деф цреате_сессион (ц, подаци):
скл = "ИНСЕРТ ИНТО сессион (ип, континент, држава, град, ос, прегледач, сесија, цреатед_ат)
ВРЕДНОСТИ (?,?,?,?,?,?,?,?) "
ц.изврши (скл, подаци)
деф селецт_алл_сессионс (ц):
скл = "СЕЛЕЦТ * ФРОМ сессион"
ц.изврши (скл)
редови = в.фетцхалл ()
повратни редови
деф селецт_алл_пагес (ц):
скл = "ИЗАБЕРИ * СА СТРАНИЦА"
ц.изврши (скл)
редови = в.фетцхалл ()
повратни редови
деф селецт_алл_усер_виситс (ц, сессион_ид):
скл = "СЕЛЕЦТ * ФРОМ странице на којима је сессион =?"
ц.извршити (скл, [сессион_ид])
редови = в.фетцхалл ()
повратни редови
деф маин ():
датабасе = "./ питхонсклите.дб "
скл_цреате_пагес = "" "
СТВАРИ ТАБЕЛУ АКО НЕ ПОСТОЈИ странице (
ид цео број ПРИМАРНИ КЉУЧ,
име варцхар (225) НИЈЕ НУЛЛ,
сесија варцхар (255) НИЈЕ НУЛЛ,
фирст_виситед датетиме НОТ НУЛЛ,
посета цео број НОТ НУЛЛ Подразумевано 1
);
"" "
скл_цреате_сессион = "" "
СТВАРИ ТАБЕЛУ АКО НЕ ПОСТОЈИ сесија (
ид цео број ПРИМАРНИ КЉУЧ,
ип варцхар (225) НИЈЕ НУЛЛ,
континент варцхар (225) НИЈЕ НУЛЛ,
земља варцхар (225) НИЈЕ НУЛЛ,
градски варцхар (225) НИЈЕ НУЛЛ,
ос варцхар (225) НИЈЕ НУЛЛ,
претраживач варцхар (225) НИЈЕ НУЛЛ,
сесија варцхар (225) НИЈЕ НУЛЛ,
цреатед_ат датетиме НИЈЕ НУЛЛ
);
"" "
# креира везу са базом података
цонн = цреате_цоннецтион (база података)
ако цонн није Ноне:
# креирајте табеле
цреате_табле (цонн, скл_цреате_пагес)
цреате_табле (цонн, скл_цреате_сессион)
принт ("Веза успостављена!")
иначе:
принт ("Није могуће успоставити везу")
ако је __наме__ == '__главно__':
главни()

Спремите датотеку и покрените скрипту да бисте креирали базу података са релевантним подацима.

питхон база података.пи
"Веза успостављена!”

Затим идите на потискивач и отворите рачун. Затим створите апликацију и следите чаробњака за подешавање апликације. Када завршите, копирајте кључеве апликације и похраните их у питхон речник као што је приказано доле.

потискивач = Потискивач (
апп_ид = "1079412",
кеи = "е5д266а24ф3502д2б814",
сецрет = "баб634д2398еб5фцб0ф8",
цлустер = "ус2")

На крају, креирајте апликацију за фласк и направите позадину као што је приказано у доњем коду:

фром боца импорт Фласк, рендер_темплате, рекуест, сессион, јсонифи
импорт урллиб.захтев
од потискивача увоз Потискивач
од датетиме увоз датетиме
импорт хттпагентпарсер
импорт јсон
импорт ос
импорт хасхлиб
из увоза базе података цреате_цоннецтион, цреате_сессион, упдате_ор_цреате_паге, селецт_алл_сессионс, селецт_алл_усер_виситс, селецт_алл_пагес
апп = чутура (__ име__)
апликација.сецрет_кеи = ос.урандом (24)
# конфигуриши потисни објекат
потискивач = Потискивач (
апп_ид = "1079412",
кеи = "е5д266а24ф3502д2б814",
сецрет = "баб634д2398еб5фцб0ф8",
цлустер = "ус2")
датабасе = "./ питхонсклите.дб "
цонн = цреате_цоннецтион (база података)
ц = повез.курсор ()
усерОС = Ниједан
усерИП = Нема
усерЦити = Нема
усерБровсер = Нема
усерЦоунтри = Нема
усерЦонтинент = Нема
сессионИД = Нема
деф маин ():
глобална веза, в
деф парсеВиситор (подаци):
упдате_ор_цреате_паге (ц, подаци)
потискивач.окидач (у'пагевиев ', у'нев',
у'паге ': подаци [0],
у'сессион ': сессионИД,
у'ип ': усерИП
)
потискивач.окидач (у'нумберс ', у'упдате',
у'паге ': подаци [0],
у'сессион ': сессионИД,
у'ип ': усерИП
)
@апликација.бефоре_рекуест
деф гетАналитицсДата ():
глобал усерОС, усерБровсер, усерИП, усерЦонтинент, усерЦити, усерЦоунтри, сессионИД
усерИнфо = хттпагентпарсер.открити (захтев.заглавља.гет ('Кориснички агент'))
усерОС = усерИнфо ['платформа'] ['име']
усерБровсер = усерИнфо ['бровсер'] ['наме']
усерИП = "196.207.130.148 "по захтеву.ремоте_аддр == '127.0.0.1 'елсе захтев.ремоте_аддр
апи = "хттпс: // ввв.иплоцате.ио / апи / лоокуп / "+ усерИП
покушати:
респ = урллиб.захтев.урлопен (апи)
резултат = одг.читати()
резултат = јсон.оптерећења (резултат.декодирај ("утф-8"))
усерЦоунтри = резултат ["држава"]
усерЦонтинент = резултат ["континент"]
усерЦити = резултат ["град"]
осим:
принт ("Није могуће пронаћи:", усерИП)
гетСессион ()
деф гетСессион ():
глобални сессионИД
време = датум и време.Сада().замена (микросекунда = 0)
ако „корисник“ није у сесији:
линије = (стр (време) + усерИП).енцоде ('утф-8')
сессион ['усер'] = хасхлиб.мд5 (линије).хекдигест ()
сессионИД = сессион ['усер']
потискивач.окидач (у'сессион ', у'нев',
у'ип ': усерИП,
у'цонтинент ': усерЦонтинент,
у'цоунтри ': усерЦоунтри,
у'цити ': усерЦити,
у'ос ': усерОС,
у'бровсер ': усерБровсер,
у'сессион ': сессионИД,
у'тиме ': стр (време),
)
подаци = [усерИП, усерЦонтинент, усерЦоунтри,
усерЦити, усерОС, усерБровсер, сессионИД, тиме]
цреате_сессион (ц, подаци)
иначе:
сессионИД = сессион ['усер']
@апликација.рута('/')
деф индек ():
дата = ['хоме', сессионИД, стр (датетиме.Сада().заменити (микросекунда = 0))]
парсеВиситор (подаци)
врати ф'Кориснички подаци: подаци '
@апликација.роуте ('/ гет-алл-сессион')
деф гет_алл_сессионс ():
подаци = []
дбРовс = селецт_алл_сессионс (ц)
за ред у дбРовс:
подаци.додати(
'ип': ред ['ип'],
'континент': ред ['континент'],
'земља': ред ['земља'],
'град': ред ['град'],
'ос': ред ['ос'],
'бровсер': ров ['бровсер'],
'сессион': ров ['сессион'],
'тиме': ров ['цреатед_ат']
)
ретурн јсонифи (подаци)
ако је __наме__ == '__главно__':
главни()
апликација.покрените (отклањање грешака = Тачно)

По завршетку покрените апликацију помоћу команде покрените тиквицу и идите на 127.0.0.1: 5000 / Ово би требало да евидентира корисника, информације о сесији одређене ИП адресе, укључујући агента (прегледач), државу и слично.

Да бисте видели све евидентиране сесије, идите на 127.0.0.1: 5000 / гет-алл-сессион.

[

"бровсер": "Цхроме",
"цити": "Њујорк",
"континент": "Северна Америка",
"цоунтри": "Сједињене Државе",
"ип": "192.148.18.103 ",
"ос": "Линук",
"сессион": "9а5д6а84д93ад62а599293ацб2е751а1",
"тиме": "2021-01-13 02:52:32"
,

"бровсер": "Мозилла",
"цити": "Орегон",
"континент": "Северна Америка",
"цоунтри": "Сједињене Државе",
"ип": "66.115.149.229 ",
"ос": "Виндовс",
"сессион": "64д205ц98ц839е1д346ц733ффд41б27ф",
"тиме": "2021-01-13 02:54:12"
,

"бровсер": "Цхроме",
"цити": "Огден",
"континент": "Северна Америка",
"цоунтри": "Сједињене Државе",
"ип": "172.231.59.124 ",
"ос": "Виндовс",
"сессион": "3фд564ц16а32б5139а8дд0578е36адед",
"тиме": "2021-01-13 02:54:37"
,

"бровсер": "Цхроме",
"цити": "Њујорк",
"континент": "Северна Америка",
"цоунтри": "Сједињене Државе",
"ип": "72.229.28.185 ",
"ос": "Виндовс",
"сессион": "27ад92271023888427да216де10а7цае",
"тиме": "2021-01-13 02:55:07"
,

"бровсер": "Цхроме",
"цити": "Најроби",
"континент": "Африка",
"цоунтри": "Кенија",
"ип": "196.207.130.148 ",
"ос": "Линук",
"сессион": "ц92цдаб9еефа2фе121д49264986е7345",
"тиме": "2021-01-13 02:56:43"
,

"бровсер": "Цхроме",
"цити": "Најроби",
"континент": "Африка",
"цоунтри": "Кенија",
"ип": "196.207.130.148 ",
"ос": "Виндовс",
"сессион": "31ее28ец6а655е0фа13бе4дба8ц13861",
"тиме": "2021-01-13 03:11:49"

]

Док је апликација покренута, можете насумично да промените своју ИП адресу и прегледаче да бисте прикупили довољно података за своју базу података. Користећи прикупљене податке, можете да користите алате за податке као што је ЕЛК стек да бисте их визуализовали и видели које локације и прегледачи више посећују апликацију.

Следи пример визуелизације прикупљених података из горње апликације.

Закључак

У овом упутству користили смо Питхон, СКЛите и Пусхер за прикупљање информација о корисницима који посећују веб локацију, а затим смо их користили за креирање визуелизација.

Да све буде једноставније, ограничио сам излаз апликације на конзолу и ЈСОН како би се прилагодио онима који нису радили са Фласк јиња темплатинг.

Ова једноставна апликација отворена је за проширење у пуноправни алат за веб аналитику. За додатно знање размотрите доленаведене ресурсе:

Како појачати ФПС у Линуку?
ФПС је скраћеница за Фрејмова у секунди. Задатак ФПС-а је да мери брзину кадрова у репродукцијама видео записа или играчким перформансама. Једноставни...
Најпопуларније лабораторијске игре Оцулус Апп
Ако сте власник Оцулус слушалица, онда морате бити упознати са бочним учитавањем. Бочно учитавање је поступак инсталирања не-продавничког садржаја на ...
10 најбољих игара за играње на Убунту-у
Виндовс платформа је била једна од доминантних платформи за играње игара због огромног процента игара које се данас развијају да би подржале Виндовс. ...