Python

Veebiliikluse seire loomine Pythoni, kolbi, SQLite'i ja tõukuriga

Veebiliikluse seire loomine Pythoni, kolbi, SQLite'i ja tõukuriga
Kui teil on Internetis veebirakendus otsa saamas, peate teadma, kust teie külastajad tulevad, milliseid süsteeme nad kasutavad ja muud sellist.

Kuigi saate kasutada selliseid teenuseid nagu Google Analytics, Monster Insights jne., lõbusam on reaalajas andmete värskendamiseks luua seiresüsteem, kasutades Pythoni, SQL-i andmebaasi ja Pusherit.

Tänases õpetuses käsitleme, kuidas sellist tööriista Pythoni, Flaski ja Pusheri abil luua. Õpetus on kõrgelt kohandatud spin-off juhendajast, mis on avaldatud Pusheri ametlikul lehel.

Nõuded

Selle ehitise jaoks peate teadma, kuidas töötada Pythoni programmeerimiskeelega, lihtsa veebiarenduse ja API-dega.

Paigaldamisnõuded

Alustage Pythoni installimisega oma süsteemi. Samuti peate installima Pusher ja Flask, httpagentparser.

Andmebaasi loomine

Esimene samm on luua andmebaas, kuhu andmed salvestatakse. Pythoni jaoks on sqlite3 vaikimisi ja selle kasutamine on lihtne. Looge fail nimega andmebaas.py ja sisestage kood allpool:

impordi sqlite3
failist sqlite3 importiviga
def create_connection (andmebaas):
proovige:
conn = sqlite3.ühendama (
andmebaas, isolation_level = Puudub, check_same_thread = Vale)
ühend.rea_tehas = lambda c, r: dict (
lukuga ([kol [0] kolonni jaoks.kirjeldus], r))
tagasikülg
välja arvatud viga e-na:
trükk (e)
def create_table (c, sql):
c.täitma (sql)
def update_or_create_page (c, andmed):
sql = "VALI * FROM lehtedelt, kus nimi =? ja seanss =?"
c.käivitada (sql, andmed [: - 1])
tulemus = c.fetchone ()
kui tulemus == Puudub:
create_pages (c, andmed)
muu:
print (tulemus)
update_pages (c, tulemus ['id'])
def create_pages (c, andmed):
print (andmed)
sql = "INSERT INTO pages (nimi, seanss, esimene_külastatud)
VÄÄRTUSED (?,?,?) "
c.käivitada (sql, andmed)
def update_pages (c, pageId):
print (pageId)
sql = "UUENDAGE lehti
SET-külastused = külastused + 1
KUS id = ?"
c.käivitada (sql, [pageId])
def create_session (c, andmed):
sql = "INSERT INTO seansid (ip, manner, riik, linn, os, brauser, seanss, loodud_at)
VÄÄRTUSED (?,?,?,?,?,?,?,?) "
c.käivitada (sql, andmed)
def select_all_session (c):
sql = "SELECT * FROM seansid"
c.täitma (sql)
read = c.fetchall ()
tagasiread
def select_all_pages (c):
sql = "SELECT * FROM pages"
c.täitma (sql)
read = c.fetchall ()
tagasiread
def select_all_user_visits (c, session_id):
sql = "SELECT * FROM lehtedelt, kus seanss =?"
c.käivita (sql, [session_id])
read = c.fetchall ()
tagasiread
def main ():
andmebaas = "./ pythonsqlite.db "
sql_create_pages = "" "
Loo tabel, kui lehti pole (
id täisarv PÕHIVÕTI,
nimi varchar (225) EI NULL,
seansi varchar (255) EI NULL,
esimene_külastatud kuupäev EI OLE NULL,
külastab täisarvu EI NULL Vaikimisi 1
);
"" "
sql_create_session = "" "
LOE TABEL, KUI SESSI EI OLE (
id täisarv PÕHIVÕTI,
ip varchar (225) EI NULL,
mandri varchar (225) EI NULL,
maavarsar (225) EI NULL,
linnavarchar (225) EI NULL,
os varchar (225) EI NULL,
brauseri varchar (225) NOT NULL,
seansi varchar (225) EI NULL,
loodud_kuupäev EI OLE NULL
);
"" "
# loo andmebaasiühendus
conn = luua_ühendus (andmebaas)
kui ühendus pole Puudub:
# luua tabeleid
create_table (conn, sql_create_pages)
create_table (conn, sql_create_session)
print ("Ühendus loodud!")
muu:
print ("Ühendust ei õnnestunud luua")
kui __nimi__ == '__main__':
peamine ()

Salvestage fail ja käivitage skript, et luua asjakohaste andmetega andmebaas.

pythoni andmebaas.py
“Ühendus on loodud!”

Järgmisena minge tõukurile ja looge konto. Seejärel looge rakendus ja järgige rakenduse häälestamiseks viisardit. Kui olete lõpetanud, kopeerige rakenduse võtmed ja salvestage need pythoni sõnastikku, nagu allpool näidatud.

tõukur = tõukur (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
saladus = "bab634d2398eb5fcb0f8",
klaster = "us2")

Lõpuks looge kolbirakendus ja ehitage taustaprogramm, nagu on näidatud allolevas koodis:

kolbist importimine Kolb, render_template, request, session, jsonify
importige urllib.taotlus
tõukurilt impordi tõukur
alates datetime impordi datetime
importige httpagentparser
import json
impordi os
impordi hashlib
andmebaasist importimine create_connection, create_session, update_or_create_page, select_all_session, select_all_user_visits, select_all_pages
rakendus = Kolb (__ nimi__)
rakendus.salajane võti = os.urandom (24)
# konfigureerige tõukurobjekt
tõukur = tõukur (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
saladus = "bab634d2398eb5fcb0f8",
klaster = "us2")
andmebaas = "./ pythonsqlite.db "
conn = luua_ühendus (andmebaas)
c = ühend.kursor ()
userOS = Puudub
userIP = Puudub
userCity = Puudub
userBrowser = Puudub
userCountry = Puudub
userContinent = Puudub
sessionID = Puudub
def main ():
globaalne ühendus, c
def parseVisitor (andmed):
update_or_create_page (c, andmed)
tõukur.päästik (u'pageview ', u'new',
u'page ': andmed [0],
u seanss ': sessionID,
u'ip ': kasutajaIP
)
tõukur.päästik (u'numbrid, u'uuenda ',
u'page ': andmed [0],
u seanss ': sessionID,
u'ip ': kasutajaIP
)
@app.before_request
def getAnalyticsData ():
globaalne userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.tuvastama (taotlus.päised.get ('Kasutajaagent'))
userOS = userInfo ['platvorm'] ['nimi']
userBrowser = userInfo ['brauser'] ['nimi']
kasutajaIP = "196.207.130.Soovi korral 148 ".remote_addr == '127.0.0.1 'veel taotlus.remote_addr
api = "https: // www.iplocate.io / api / lookup / "+ kasutajaIP
proovige:
resp = urllib.taotlus.urlopeen (api)
tulemus = resp.loe ()
tulemus = json.koormused (tulemus.dekodeerida ("utf-8"))
userCountry = tulemus ["riik"]
userContinent = tulemus ["manner"]
userCity = tulemus ["linn"]
välja arvatud:
print ("Ei leitud:", userIP)
getSession ()
def getSession ():
globaalne sessionID
aeg = kuupäev.nüüd ().asenda (mikrosekund = 0)
kui 'kasutaja' ei ole seansil:
read = (str (aeg) + userIP).kodeerida ('utf-8')
session ['user'] = hashlib.md5 (read).hexdigest ()
sessionID = session ['kasutaja']
tõukur.päästik (u seanss ', u' uus ',
u'ip ': kasutajaIP,
u'continent ': kasutajaContinent,
u'riik ': kasutaja riik,
u'city ': userCity,
u'os ': kasutajaOS,
u'browser ': kasutaja sirvija,
u seanss ': sessionID,
u'time: str (aeg),
)
andmed = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
create_session (c, andmed)
muu:
sessionID = session ['kasutaja']
@app.tee('/')
def indeks ():
andmed = ['kodu', sessionID, str (kuupäeva aeg.nüüd ().asenda (mikrosekund = 0)]]
parseVisitor (andmed)
tagastage f'Kasutaja andmed: data '
@app.marsruut ('/ saada kõik seansid')
def get_all_session ():
andmed = []
dbRows = select_all_session (c)
rea jaoks dbRows:
andmed.lisa (
'ip': rida ['ip'],
'manner': rida ['manner'],
'riik': rida ['riik'],
'linn': rida ['linn'],
'os': rida ['os'],
'brauser': rida ['brauser'],
'session': rida ['session'],
'aeg': rida ['loodud_at']
)
tagastage jsonify (andmed)
kui __nimi__ == '__main__':
peamine ()
rakendus.käivita (silumine = tõene)

Kui see on lõpule jõudnud, käivitage rakendus käsukolbi käivitamise abil ja navigeerige 127-ni.0.0.1: 5000 / See peaks logima kasutaja, konkreetse IP-aadressi seansiteabe, sealhulgas Agent (brauser), Riik ja muu sellise.

Kogu sisselogitud seansi vaatamiseks minge 127.0.0.1: 5000 / saada kõiki seansse.

[

"brauser": "Chrome",
"linn": "New York",
"manner": "Põhja-Ameerika",
"riik": "Ameerika Ühendriigid",
"ip": "192.148.18.103 ",
"os": "Linux",
"seanss": "9a5d6a84d93ad62a599293acb2e751a1",
"aeg": "2021-01-13 02:52:32"
,

"brauser": "Mozilla",
"linn": "Oregon",
"manner": "Põhja-Ameerika",
"riik": "Ameerika Ühendriigid",
"ip": "66.115.149.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"aeg": "2021-01-13 02:54:12"
,

"brauser": "Chrome",
"linn": "Ogden",
"manner": "Põhja-Ameerika",
"riik": "Ameerika Ühendriigid",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"aeg": "2021-01-13 02:54:37"
,

"brauser": "Chrome",
"linn": "New York",
"manner": "Põhja-Ameerika",
"riik": "Ameerika Ühendriigid",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"aeg": "2021-01-13 02:55:07"
,

"brauser": "Chrome",
"linn": "Nairobi",
"manner": "Aafrika",
"riik": "Kenya",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"aeg": "2021-01-13 02:56:43"
,

"brauser": "Chrome",
"linn": "Nairobi",
"manner": "Aafrika",
"riik": "Kenya",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"aeg": "2021-01-13 03:11:49"

]

Kui rakendus töötab, saate juhuslikult oma IP-aadressi ja brausereid muuta, et teie andmebaasi jaoks piisavalt teavet koguda. Kogutud andmete abil saate selle visualiseerimiseks kasutada selliseid tööriistu nagu ELK stack, et näha, millised asukohad ja brauserid rakendust rohkem külastavad.

Allpool on toodud ülaltoodud rakenduse kogutud andmete visualiseerimise näide.

Järeldus

Selles õppetükis kasutasime Pythoni, SQLite'i ja Pusherit veebisaidi külastajate kohta teabe kogumiseks ja seejärel kasutasime andmeid visualiseerimiste loomiseks.

Asjade lihtsuse huvides piirdusin rakenduse väljund konsooli ja JSON-iga, et mahutada need, kes pole töötanud Flask jinja mallidega.

Seda lihtsat rakendust saab laiendada täieõiguslikuks veebianalüütika tööriistaks. Lisateabe saamiseks kaaluge allolevaid ressursse:

SuperTuxKart Linuxile
SuperTuxKart on suurepärane pealkiri, mis on loodud selleks, et tuua teie Linuxi süsteemis tasuta Mario Karti kogemus. See on päris keeruline ja lõbus...
Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...
0 A.D. Õpetus
Paljudest strateegiamängudest on 0 A.D. suudab silma paista põhjaliku tiitli ja väga sügava taktikalise mänguna, hoolimata sellest, et see on avatud l...