Python

Kā izveidot tīmekļa trafika monitoru ar Python, Flask, SQLite un Pusher

Kā izveidot tīmekļa trafika monitoru ar Python, Flask, SQLite un Pusher
Ja jums internetā darbojas tīmekļa lietojumprogramma, jums būs jāzina, no kurienes nāk jūsu apmeklētāji, viņu izmantotās sistēmas un citas šādas lietas.

Lai gan jūs varat izmantot tādus pakalpojumus kā Google Analytics, Monster Insights utt., jautrāk ir izveidot uzraudzības sistēmu, izmantojot Python, SQL datu bāzi un Pusher reāllaika datu atjaunināšanai.

Šodienas apmācībā mēs aplūkosim, kā izveidot šādu rīku, izmantojot Python, Flask un Pusher. Apmācība ir ļoti pielāgota spin-off no apmācības, kas publicēta Pusher oficiālajā lapā.

Prasības

Lai izveidotu šo versiju, jums būs jāzina, kā strādāt ar pitona programmēšanas valodu, vienkāršu tīmekļa izstrādi un API.

Instalēšanas prasības

Sāciet, instalējot Python savā sistēmā. Jums būs jāinstalē arī Pusher un Flask, httpagentparser.

Datu bāzes izveide

Vispirms ir jāizveido datu bāze, kurā dati tiek glabāti. Programmai Python sqlite3 ir noklusējuma iestatījums, un tā izmantošana ir vienkārša. Izveidojiet failu ar nosaukumu datu bāze.py un ievadiet kodu zemāk:

importēt sqlite3
no sqlite3 importa kļūda
def create_connection (datu bāze):
mēģiniet:
savienojums = sqlite3.savienot (
datu bāze, izolācijas_līmenis = Nav, pārbaudīt_sama_vītne = Nepatiesa)
savien.rindas rūpnīca = lambda c, r: dict (
rāvējslēdzējs ([kol [0] kolai c.apraksts], r))
atgriešanās savien
izņemot kļūdu kā e:
drukāt (e)
def create_table (c, sql):
c.izpildīt (sql)
def update_or_create_page (c, dati):
sql = "SELECT * NO lapām, kur nosaukums =? un sesija =?"
c.izpildīt (sql, dati [: - 1])
rezultāts = c.fetchone ()
ja rezultāts == Nav:
izveidot_lapas (c, dati)
cits:
izdrukāt (rezultāts)
update_pages (c, rezultāts ['id'])
def create_pages (c, dati):
drukāt (dati)
sql = "INSERT INTO pages (vārds, sesija, pirmais_apmeklētais)
VĒRTĪBAS (?,?,?) "
c.izpildīt (sql, data)
def update_pages (c, pageId):
izdrukāt (pageId)
sql = "ATJAUNINĀT lapas
SET apmeklējumi = apmeklējumi + 1
KUR id = ?"
c.izpildīt (sql, [pageId])
def create_session (c, dati):
sql = "INSERT INTO sesijas (ip, kontinents, valsts, pilsēta, OS, pārlūks, sesija, izveidots_at)
VĒRTĪBAS (?,?,?,?,?,?,?,?) "
c.izpildīt (sql, data)
def select_all_sessions (c):
sql = "SELECT * FROM sesijas"
c.izpildīt (sql)
rindas = c.atnest ()
atgriezties rindās
def select_all_pages (c):
sql = "SELECT * FROM pages"
c.izpildīt (sql)
rindas = c.atnest ()
atgriezties rindās
def select_all_user_visits (c, session_id):
sql = "SELECT * NO lapām, kur sesija =?"
c.izpildīt (sql, [session_id])
rindas = c.atnest ()
atgriezties rindās
def main ():
datu bāze = "./ pythonsqlite.db "
sql_create_pages = "" "
VEIDOT TABULU, JA NEPASTĀV lappuses (
id vesels skaitlis PAMATSLAVA,
nosaukums varchar (225) NAV NULL,
sesijas varchar (255) NAV NULL,
first_visited datetime NOT NULL,
apmeklē veselu skaitli NAV NULL Noklusējums 1
);
"" "
sql_create_session = "" "
IZVEIDOT TABULU, JA SESIJU NEBŪTU (
id vesels skaitlis PAMATSLAVA,
ip varchar (225) NAV NULL,
kontinenta varchar (225) NAV NULL,
valsts varchar (225) NAV NULL,
pilsētas varchar (225) NAV NULL,
os varchar (225) NAV NULL,
pārlūka varchar (225) NAV NULL,
sesijas varchar (225) NOT NULL,
created_at datetime NOT NULL
);
"" "
# izveidot datu bāzes savienojumu
conn = izveidot savienojumu (datu bāze)
ja savienojums nav Neviens:
# izveidot tabulas
create_table (savienojums, sql_create_pages)
create_table (savienojums, sql_create_session)
drukāt ("Savienojums izveidots!")
cits:
drukāt ("Nevarēja izveidot savienojumu")
ja __nosaukums == '__main__':
galvenais ()

Saglabājiet failu un palaidiet skriptu, lai izveidotu datu bāzi ar attiecīgajiem datiem.

pitona datu bāze.py
“Savienojums ir izveidots!”

Pēc tam dodieties pie stūmēja un izveidojiet kontu. Pēc tam izveidojiet lietojumprogrammu un izpildiet vedni, lai iestatītu lietotni. Kad tas ir pabeigts, nokopējiet lietotnes atslēgas un saglabājiet tās pitona vārdnīcā, kā parādīts zemāk.

stūmējs = stūmējs (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
kopa = "us2")

Visbeidzot, izveidojiet kolbas lietojumprogrammu un izveidojiet aizmuguri, kā parādīts zemāk esošajā kodā:

no kolbas importēt kolbu, render_template, pieprasījumu, sesiju, jsonify
importēt urllib.pieprasījumu
no stūmēja importa
no datetime importa datetime
importēt httpagentparser
importa json
importēt os
importa hashlib
no datu bāzes importēšanas create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
app = kolba (__ vārds__)
lietotne.secret_key = os.urandom (24)
# konfigurēt stūmēja objektu
stūmējs = stūmējs (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
kopa = "us2")
datu bāze = "./ pythonsqlite.db "
conn = izveidot savienojumu (datu bāze)
c = savienojums.kursors ()
userOS = Nav
userIP = Nav
userCity = Nav
userBrowser = Nav
userCountry = Nav
userContinent = Nav
sessionID = Nav
def main ():
globālais savienojums, c
def parseVisitor (dati):
update_or_create_page (c, dati)
stūmējs.aktivizētājs (u'pageview ', u'new',
u'page ': dati [0],
u'session ': sessionID,
u'ip ': lietotājaIP
)
stūmējs.trigeris (u'numbers ', u'update',
u'page ': dati [0],
u'session ': sessionID,
u'ip ': lietotājaIP
)
@app.before_request
def getAnalyticsData ():
globālais userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.atklāt (pieprasījums.galvenes.get ('Lietotāja aģents'))
userOS = userInfo ['platforma'] ['nosaukums']
userBrowser = userInfo ['pārlūks'] ['vārds']
userIP = "196.207.130.148 "pēc pieprasījuma.remote_addr == '127.0.0.1 'cits pieprasījums.remote_addr
api = "https: // www.iplocate.io / api / lookup / "+ userIP
mēģiniet:
resp = urllib.pieprasījumu.urlopēns (api)
rezultāts = resp.lasīt ()
rezultāts = json.slodzes (rezultāts.atšifrēt ("utf-8"))
userCountry = rezultāts ["valsts"]
userContinent = rezultāts ["kontinents"]
userCity = rezultāts ["pilsēta"]
izņemot:
drukāt ("Nevarēja atrast:", userIP)
getSession ()
def getSession ():
globālais sessionID
laiks = datuma laiks.tagad ().aizstāt (mikrosekunde = 0)
ja 'lietotājs' nav sesijā:
līnijas = (str (laiks) + userIP).kodēt ('utf-8')
session ['user'] = hashlib.md5 (līnijas).hexdigest ()
sessionID = session ['lietotājs']
stūmējs.aktivizētājs (u'session ', u'new',
u'ip ': lietotājaIP,
u'continent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': userOS,
u'browser ': userBrowser,
u'session ': sessionID,
u'time ': str (laiks),
)
dati = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
izveidot_sesiju (c, dati)
cits:
sessionID = session ['lietotājs']
@app.maršruts ('/')
def indekss ():
dati = ['mājas', sessionID, str (datuma laiks.tagad ().aizstāt (mikrosekunde = 0))]
parseVisitor (dati)
atgriezt f'Lietotāja dati: dati '
@app.maršruts ('/ get-all-session')
def get_all_sessions ():
dati = []
dbRows = select_all_session (c)
rindai dbRows:
dati.pievienot (
'ip': rinda ['ip'],
'continent': rinda ['continent'],
'valsts': rinda ['valsts'],
'pilsēta': rinda ['pilsēta'],
'os': rinda ['os'],
'pārlūks': rinda ['pārlūks'],
'session': rinda ['session'],
'laiks': rinda ['izveidots_at']
)
atgriezt jsonify (dati)
ja __nosaukums == '__main__':
galvenais ()
lietotne.palaist (atkļūdošana = True)

Kad tas ir pabeigts, palaidiet lietotni, izmantojot komandu kolbas palaist, un dodieties uz 127.0.0.1: 5000 / Tam jāreģistrē lietotājs, sesijas informācija par konkrēto IP adresi, ieskaitot aģentu (pārlūku), valsti un tamlīdzīgi.

Lai skatītu visu reģistrēto sesiju, dodieties uz 127. lpp.0.0.1: 5000 / saņemt visu sesiju.

[

"pārlūks": "Chrome",
"pilsēta": "Ņujorka",
"kontinents": "Ziemeļamerika",
"valsts": "Amerikas Savienotās Valstis",
"ip": "192.148. lpp.18.103 ",
"os": "Linux",
"session": "9a5d6a84d93ad62a599293acb2e751a1",
"laiks": "2021-01-13 02:52:32"
,

"pārlūks": "Mozilla",
"pilsēta": "Oregona",
"kontinents": "Ziemeļamerika",
"valsts": "Amerikas Savienotās Valstis",
"ip": "66.115.149. lpp.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"laiks": "2021-01-13 02:54:12"
,

"pārlūks": "Chrome",
"pilsēta": "Ogden",
"kontinents": "Ziemeļamerika",
"valsts": "Amerikas Savienotās Valstis",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"laiks": "2021-01-13 02:54:37"
,

"pārlūks": "Chrome",
"pilsēta": "Ņujorka",
"kontinents": "Ziemeļamerika",
"valsts": "Amerikas Savienotās Valstis",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"laiks": "2021-01-13 02:55:07"
,

"pārlūks": "Chrome",
"pilsēta": "Nairobi",
"kontinents": "Āfrika",
"valsts": "Kenija",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"laiks": "2021-01-13 02:56:43"
,

"pārlūks": "Chrome",
"pilsēta": "Nairobi",
"kontinents": "Āfrika",
"valsts": "Kenija",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"laiks": "2021-01-13 03:11:49"

]

Darbojoties lietotnei, varat nejauši mainīt savu IP adresi un pārlūkprogrammas, lai savāktu pietiekami daudz informācijas savai datu bāzei. Izmantojot apkopotos datus, varat izmantot datu rīkus, piemēram, ELK steku, lai to vizualizētu un redzētu, kuras atrašanās vietas un pārlūkprogrammas apmeklē vairāk lietojumprogrammas.

Šis ir iepriekš apkopotās datu vizualizācijas piemērs.

Secinājums

Šajā apmācībā mēs izmantojām Python, SQLite un Pusher, lai apkopotu informāciju par lietotājiem, kuri apmeklē vietni, un pēc tam izmantojām datus, lai izveidotu vizualizācijas.

Lai viss būtu vienkārši, es ierobežoju lietotnes izvadi ar konsoli un JSON, lai pielāgotos tiem, kuri nav strādājuši ar kolbas Jinja veidnēm.

Šo vienkāršo lietotni var paplašināt par pilnvērtīgu tīmekļa analīzes rīku. Apsveriet tālāk minētos resursus, lai iegūtu papildu zināšanas:

Vidējā peles poga nedarbojas sistēmā Windows 10
The peles vidējā poga palīdz jums ritināt garas tīmekļa lapas un ekrānus ar lielu datu daudzumu. Ja tas apstājas, jūs galu galā izmantosiet tastatūru,...
Kā nomainīt peles kreiso un labo pogu operētājsistēmā Windows 10
Tas ir diezgan normāli, ka visas datora peles ierīces ir ergonomiski izstrādātas lietotājiem ar labo roku. Bet ir pieejamas peles ierīces, kas ir īpaš...
Atdariniet peles klikšķus, virzot kursoru, izmantojot operētājsistēmā Windows 10 bezklikšķu peli
Peles vai tastatūras lietošana nepareizā pozā, ja to lieto pārmērīgi daudz, var izraisīt daudz veselības problēmu, tostarp spriedzi, karpālā kanāla si...