„Python“

Kaip sukurti interneto srauto monitorių naudojant „Python“, „Flask“, „SQLite“ ir „Pusher“

Kaip sukurti interneto srauto monitorių naudojant „Python“, „Flask“, „SQLite“ ir „Pusher“
Jei internete veikia jūsų žiniatinklio programa, turėsite žinoti, iš kur ateina jūsų lankytojai, jų naudojamos sistemos ir kiti panašūs dalykai.

Nors galite naudotis tokiomis paslaugomis kaip „Google Analytics“, „Monster Insights“ ir kt., smagiau kurti stebėjimo sistemą naudojant „Python“, SQL duomenų bazę ir „Pusher“, kad būtų galima atnaujinti duomenis realiuoju laiku.

Šiandienos pamokoje aptarsime, kaip sukurti tokį įrankį naudojant „Python“, „Flask“ ir „Pusher“. Pamoka yra labai pritaikytas papildymas, gautas iš pamokos, paskelbtos oficialiame „Pusher“ puslapyje.

Reikalavimai

Norėdami sukurti šį komponavimą, turėsite žinoti, kaip dirbti su „Python“ programavimo kalba, paprastą žiniatinklio kūrimą ir API.

Diegimo reikalavimai

Pradėkite įdiegdami „Python“ savo sistemoje. Taip pat turėsite įdiegti „Pusher“ ir „Flask“, „httpagentparser“.

Duomenų bazės kūrimas

Pirmiausia reikia sukurti duomenų bazę, kurioje saugomi duomenys. „Python“ atveju „sqlite3“ yra numatytasis nustatymas, todėl jį naudoti yra paprasta. Sukurkite failą, vadinamą duomenų baze.py ir įveskite žemiau esantį kodą:

importuoti sqlite3
iš sqlite3 importo klaida
def create_connection (duomenų bazė):
bandyti:
jungtis = sqlite3.Prisijungti(
duomenų bazė, isolation_level = Nėra, check_same_thread = False)
jung.row_factory = lambda c, r: dict (
užtrauktukas ([col [0] col col in c.aprašymas], r))
grįžti jung
išskyrus klaidą kaip e:
spausdinti (e)
def create_table (c, sql):
c.vykdyti (kvl)
def update_or_create_page (c, duomenys):
sql = "PASIRINKITE * IŠ puslapių, kur vardas =? ir sesija =?"
c.vykdyti (sql, duomenys [: - 1])
rezultatas = c.fetchone ()
jei rezultatas == Nėra:
create_pages (c, duomenys)
Kitas:
spausdinti (rezultatas)
„update_pages“ (c, rezultatas ['id'])
def create_pages (c, duomenys):
spausdinti (duomenys)
sql = "INSERT INTO pages (vardas, seansas, pirmiausia aplankyta)
VERTYBĖS (?,?,?) "
c.vykdyti (sql, duomenys)
def update_pages (c, pageId):
spausdinti (pageId)
sql = "ATNAUJINTI puslapius
SET apsilankymai = apsilankymai + 1
KUR id = ?"
c.vykdyti (sql, [pageId])
def create_session (c, duomenys):
sql = "INSERT INTO sesijos (ip, žemynas, šalis, miestas, OS, naršyklė, sesija, sukurtas_at)
VERTYBĖS (?,?,?,?,?,?,?,?) "
c.vykdyti (sql, duomenys)
def select_all_sessions (c):
sql = "SELECT * FROM seansai"
c.vykdyti (kvl)
eilučių = c.fetchall ()
grįžti eilučių
def select_all_pages (c):
sql = "PASIRINKITE * IŠ puslapių"
c.vykdyti (kvl)
eilučių = c.fetchall ()
grįžti eilučių
def select_all_user_visits (c, session_id):
sql = "PASIRINKITE * IŠ puslapių, kur seansas =?"
c.vykdyti (sql, [session_id])
eilučių = c.fetchall ()
grįžti eilučių
def pagrindinis ():
duomenų bazė = "./ pythonsqlite.db "
sql_create_pages = "" "
SUKURTI LENTEL IF, JEI NEBŪTŲ puslapių (
id sveikas skaičius PAGRINDINIS RAKTAS,
vardas varchar (225) NE NULL,
sesijos varcharas (255) NE NULL,
first_visited datetime NE NULL,
apsilanko sveikuoju skaičiumi NENUOL Numatytasis 1
);
"" "
sql_create_session = "" "
SUKURTI LENTEL IF, JEI NĖRA Seansų (
id sveikas skaičius PAGRINDINIS RAKTAS,
ip varchar (225) NE NULL,
žemyno varcharas (225) NE NULL,
šalies varcharas (225) NE NULL,
miesto varcharas (225) NE NULL,
os varchar (225) NE NULL,
naršyklės varchar (225) NOT NULL,
sesijos varcharas (225) NE NULL,
sukurtas_datos laikas NE NULL
);
"" "
# sukurti duomenų bazės ryšį
conn = sukurti_ ryšį (duomenų bazė)
jei jungtis nėra Nėra:
# sukurti lenteles
create_table (conn, sql_create_pages)
create_table (jungtis, sql_create_session)
spausdinti ("Ryšys užmegztas!")
Kitas:
spausdinti ("Nepavyko užmegzti ryšio")
jei __pavadinimas = = '__main__':
pagrindinis ()

Išsaugokite failą ir paleiskite scenarijų, kad sukurtumėte duomenų bazę su atitinkamais duomenimis.

pitono duomenų bazė.py
„Ryšys užmegztas!“

Tada pereikite prie stumdytojo ir sukurkite paskyrą. Tada sukurkite programą ir vykdykite vedlį, kad sukonfigūruotumėte programą. Baigę nukopijuokite programos raktus ir laikykite juos pitono žodyne, kaip parodyta žemiau.

stūmikas = stūmikas (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
paslaptis = "bab634d2398eb5fcb0f8",
klasteris = "us2")

Galiausiai sukurkite kolbos programą ir sukurkite antrinę programą, kaip parodyta žemiau esančiame kode:

iš kolbos importuoti kolbą, render_template, užklausą, sesiją, jsonify
importuoti urllib.prašymą
iš stūmiko importo
nuo datetime importuoti datetime
importuoti „httpagentparser“
importuoti Json
importuoti os
importuoti hashlib
iš duomenų bazės importuoti create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
app = kolba (__ vardas__)
programa.slaptas_raktas = os.urandomas (24)
# konfigūruoti stumiamąjį objektą
stūmikas = stūmikas (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
paslaptis = "bab634d2398eb5fcb0f8",
klasteris = "us2")
duomenų bazė = "./ pythonsqlite.db "
conn = sukurti_ ryšį (duomenų bazė)
c = jungtis.žymeklis ()
userOS = Nėra
userIP = Nėra
userCity = Nėra
userBrowser = Nėra
userCountry = Nėra
userContinent = Nėra
sessionID = Nėra
def pagrindinis ():
pasaulinis ryšys, apie
def parseVisitor (duomenys):
update_or_create_page (c, duomenys)
stūmikas.suaktyvinti (u'pageview ', u'new',
u'page ': duomenys [0],
u session ': sessionID,
u'ip ': vartotojoIP
)
stūmikas.suaktyvinti (u'numbers ', u'update',
u'page ': duomenys [0],
u session ': sessionID,
u'ip ': vartotojoIP
)
@app.prieš_request
def getAnalyticsData ():
globalus „userOS“, „userBrowser“, „userIP“, „userContinent“, „userCity“, „userCountry“, „sessionID“
userInfo = httpagentparser.aptikti (prašymas.antraštes.gauti („Vartotojo agentas“))
userOS = userInfo ['platforma'] ['vardas']
userBrowser = userInfo ['browser'] ['name']
vartotojoIP = "196.207.130.148 ", jei to prašoma.127.0.0.1 'kita užklausa.nuotolinis_adresas
api = "https: // www.iplocate.io / api / lookup / "+ vartotojoIP
bandyti:
resp = urllib.prašymą.urlopenas (api)
rezultatas = resp.skaityti ()
rezultatas = json.apkrovos (rezultatas.iššifruoti („utf-8“))
userCountry = rezultatas ["šalis"]
userContinent = rezultatas ["žemynas"]
userCity = rezultatas ["miestas"]
išskyrus:
spausdinti ("Nepavyko rasti:", userIP)
„getSession“ ()
def getSession ():
global sessionID
laikas = datos laikas.dabar ().pakeisti (mikrosekundė = 0)
jei „vartotojas“ nėra sesijoje:
eilutės = (str (laikas) + userIP).koduoti („utf-8“)
session ['user'] = hashlib.md5 (eilutės).hexdigest ()
sessionID = session ['vartotojas']
stūmikas.suaktyvinti (u'session ', u'new',
u'ip ': vartotojoIP,
u'continent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': vartotojoOS,
u'browser ': vartotojo naršyklė,
u session ': sessionID,
u'time ': str (laikas),
)
duomenys = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
create_session (c, duomenys)
Kitas:
sessionID = session ['vartotojas']
@app.maršrutas ('/')
def indeksas ():
duomenys = ['namai', sessionID, str (datos laikas.dabar ().pakeisti (mikrosekundė = 0)]]
parseVisitor (duomenys)
grąžinti „Vartotojo duomenys: duomenys“
@app.maršrutas („/ gauti visas sesijas“)
def get_all_sessions ():
duomenys = []
dbRows = select_all_session (c)
eilutei dbRows:
duomenis.pridėti (
„ip“: eilutė ['ip'],
'žemynas': eilutė ['žemynas'],
„šalis“: eilutė [„šalis“],
'miestas': eilutė ['miestas'],
„os“: eilutė ['os'],
'browser': eilutė ['browser'],
'session': eilutė ['session'],
'laikas': eilutė ['sukurtas_at']
)
grąžinti jsonify (duomenys)
jei __pavadinimas = = '__main__':
pagrindinis ()
programa.paleisti (derinti = tiesa)

Baigę paleiskite programą naudodami komandų kolbos paleidimą ir eikite į 127.0.0.1: 5000 / Tai turėtų užregistruoti vartotoją, konkretaus IP adreso sesijos informaciją, įskaitant agentą (naršyklę), šalį ir pan.

Norėdami peržiūrėti visą užregistruotą sesiją, eikite į 127 skyrių.0.0.1: 5000 / gauti visas sesijas.

[

„naršyklė“: „Chrome“,
„miestas“: „Niujorkas“,
„žemynas“: „Šiaurės Amerika“,
"šalis": "Jungtinės Valstijos",
„ip“: „192.148.18.103 ",
"os": "Linux",
„session“: „9a5d6a84d93ad62a599293acb2e751a1“,
„laikas“: „2021-01-13 02:52:32“
,

„naršyklė“: „Mozilla“,
„miestas“: „Oregonas“,
„žemynas“: „Šiaurės Amerika“,
"šalis": "Jungtinės Valstijos",
„ip“: „66.115.149.229 ",
"os": "Windows",
„session“: „64d205c98c839e1d346c733ffd41b27f“,
„laikas“: „2021-01-13 02:54:12“
,

„naršyklė“: „Chrome“,
„miestas“: „Ogden“,
„žemynas“: „Šiaurės Amerika“,
"šalis": "Jungtinės Valstijos",
„ip“: „172.231.59.124 ",
"os": "Windows",
„session“: „3fd564c16a32b5139a8dd0578e36aded“,
„laikas“: „2021-01-13 02:54:37“
,

„naršyklė“: „Chrome“,
„miestas“: „Niujorkas“,
„žemynas“: „Šiaurės Amerika“,
"šalis": "Jungtinės Valstijos",
„ip“: „72.229.28.185 ",
"os": "Windows",
„session“: „27ad92271023888427da216de10a7cae“,
„laikas“: „2021-01-13 02:55:07“
,

„naršyklė“: „Chrome“,
„miestas“: „Nairobis“,
„žemynas“: „Afrika“,
„šalis“: „Kenija“,
„ip“: „196.207.130.148 ",
"os": "Linux",
„session“: „c92cdab9eefa2fe121d49264986e7345“,
„laikas“: „2021-01-13 02:56:43“
,

„naršyklė“: „Chrome“,
„miestas“: „Nairobis“,
„žemynas“: „Afrika“,
„šalis“: „Kenija“,
„ip“: „196.207.130.148 ",
"os": "Windows",
„session“: „31ee28ec6a655e0fa13be4dba8c13861“,
„laikas“: „2021-01-13 03:11:49“

]

Vykdydami programą, galite atsitiktinai pakeisti savo IP adresą ir naršykles, kad surinktumėte pakankamai informacijos savo duomenų bazei. Naudodami surinktus duomenis, galite naudoti duomenų įrankius, pvz., ELK kaminą, kad jį vizualizuotumėte ir pamatytumėte, kurios vietos ir naršyklės lankosi programoje daugiau.

Toliau pateikiamas aukščiau pateiktos programos surinktų duomenų vizualizavimo pavyzdys.

Išvada

Šioje pamokoje mes naudojome „Python“, „SQLite“ ir „Pusher“, kad rinktume informaciją apie svetainėje besilankančius vartotojus, o tada duomenis panaudojome vizualizacijoms kurti.

Kad viskas būtų paprasta, apribojau programos išvestį tik konsolėje ir JSON, kad tilptų tie, kurie nedirbo su „Flask jinja“ šablonais.

Ši paprasta programa gali būti išplėsta į visavertį interneto analizės įrankį. Apsvarstykite toliau pateiktus išteklius, kad gautumėte papildomų žinių:

Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...
Kaip pakeisti kairįjį ir dešinįjį pelės mygtukus „Windows 10“ kompiuteryje
Gana įprasta, kad visi kompiuterio pelės įrenginiai yra ergonomiškai sukurti dešiniarankiams. Tačiau yra pelių prietaisų, specialiai sukurtų kairiaran...
Mėgdžiokite pelės paspaudimus, užveskite pelės žymeklį naudodami pelę „Clickless Mouse“ sistemoje „Windows 10“
Pelės ar klaviatūros naudojimas netinkamoje laikysenoje, kai naudojama per daug, gali sukelti daug sveikatos problemų, įskaitant įtampą, riešo kanalo ...