Python

Sådan oprettes en webtrafikovervågning med Python, Flask, SQLite og Pusher

Sådan oprettes en webtrafikovervågning med Python, Flask, SQLite og Pusher
Hvis du har en webapplikation, der kører derude på internettet, skal du vide, hvor dine besøgende kommer fra, de systemer, de bruger og andre sådanne ting.

Selvom du kan bruge tjenester som Google Analytics, Monster Insights osv., det er sjovere at opbygge et overvågningssystem ved hjælp af Python, SQL-database og Pusher til opdateringer i realtid af data.

I dagens vejledning gennemgår vi, hvordan man opretter et sådant værktøj ved hjælp af Python, Flask og Pusher. Selvstudiet er en meget tilpasset spin-off fra en tutorial offentliggjort på Pusher's officielle side.

Krav

Til denne build skal du vide, hvordan du arbejder med python-programmeringssprog, enkel webudvikling og API'er.

Installationskrav

Start med at installere Python på dit system. Du bliver også nødt til at installere Pusher and Flask, httpagentparser.

Oprettelse af databasen

Det første trin er at oprette en database, hvor dataene er gemt. For Python kommer sqlite3 som standard, og det er enkelt at bruge det. Opret en fil kaldet database.py og indtast koden nedenfor:

importere sqlite3
fra sqlite3 importfejl
def create_connection (database):
prøve:
conn = sqlite3.Opret forbindelse(
database, isolation_level = Ingen, check_same_thread = Falsk)
tilslutning.række_fabrik = lambda c, r: dict (
zip ([col [0] for col in c.beskrivelse], r))
returforbindelse
undtagen Fejl som e:
print (e)
def create_table (c, sql):
c.udføre (sql)
def update_or_create_page (c, data):
sql = "VÆLG * FRA sider hvor navn =? og session =?"
c.udfør (sql, data [: - 1])
resultat = c.fetchone ()
hvis resultat == Ingen:
create_pages (c, data)
andet:
print (resultat)
update_pages (c, resultat ['id'])
def create_pages (c, data):
udskriv (data)
sql = "INDSÆT I sider (navn, session, først_besøgt)
VÆRDIER (?,?,?) "
c.udfør (sql, data)
def update_pages (c, pageId):
udskriv (pageId)
sql = "OPDATER sider
SET besøg = besøg + 1
HVOR id = ?"
c.udfør (sql, [pageId])
def create_session (c, data):
sql = "INSERT INTO sessions (ip, kontinent, land, by, os, browser, session, created_at)
VÆRDIER (?,?,?,?,?,?,?,?) "
c.udfør (sql, data)
def select_all_sessions (c):
sql = "VÆLG * FRA sessioner"
c.udføre (sql)
rækker = c.fetchall ()
returnere rækker
def select_all_pages (c):
sql = "VÆLG * FRA sider"
c.udføre (sql)
rækker = c.fetchall ()
returnere rækker
def select_all_user_visits (c, session_id):
sql = "VÆLG * FRA sider, hvor session =?"
c.udfør (sql, [session_id])
rækker = c.fetchall ()
returnere rækker
def hoved ():
database = "./ pythonsqlite.db "
sql_create_pages = "" "
Opret TABEL, HVIS IKKE eksisterer sider (
id heltal PRIMÆR NØGLE,
navn varchar (225) IKKE NULL,
session varchar (255) IKKE NULL,
første_besøgte datetid IKKE NULL,
besøger heltal IKKE NULL Standard 1
);
"" "
sql_create_session = "" "
Opret TABEL, HVIS IKKE FINDER sessioner (
id heltal PRIMÆR NØGLE,
ip varchar (225) IKKE NULL,
continent varchar (225) IKKE NULL,
land varchar (225) IKKE NULL,
city ​​varchar (225) IKKE NULL,
os varchar (225) IKKE NULL,
browser varchar (225) IKKE NULL,
session varchar (225) IKKE NULL,
created_at datetime NOT NULL
);
"" "
# Opret en databaseforbindelse
conn = create_connection (database)
hvis forbindelse ikke er Ingen:
# Opret tabeller
create_table (conn, sql_create_pages)
create_table (conn, sql_create_session)
print ("Forbindelse oprettet!")
andet:
udskriv ("Kunne ikke oprette forbindelse")
hvis __name__ == '__main__':
hoved ()

Gem filen, og kør scriptet for at oprette databasen med de relevante data.

python-database.py
“Forbindelsen blev oprettet!”

Gå derefter over til skubbe og opret en konto. Opret derefter en applikation og følg guiden for at konfigurere appen. Når du er færdig, skal du kopiere appnøglerne og gemme dem i en pythonordbog som vist nedenfor.

skubber = skubber (
app_id = "1079412",
nøgle = "e5d266a24f3502d2b814",
hemmelighed = "bab634d2398eb5fcb0f8",
cluster = "us2")

Til sidst skal du oprette en kolbeapplikation og oprette backend som vist i koden nedenfor:

fra kolbeimport Kolbe, render_template, anmodning, session, jsonify
import urllib.anmodning
fra skubbeimport
fra datetime import datetime
importer httpagentparser
import json
importer os
importer hashlib
fra databaseimport create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
app = kolbe (__ navn__)
app.secret_key = os.urandom (24)
# konfigurer pusher-objekt
skubber = skubber (
app_id = "1079412",
nøgle = "e5d266a24f3502d2b814",
hemmelighed = "bab634d2398eb5fcb0f8",
cluster = "us2")
database = "./ pythonsqlite.db "
conn = create_connection (database)
c = tilslutning.cursoren()
userOS = Ingen
userIP = Ingen
userCity = Ingen
userBrowser = Ingen
userCountry = Ingen
userContinent = Ingen
sessionID = Ingen
def hoved ():
global forbindelse, c
def parseVisitor (data):
update_or_create_page (c, data)
skubber.trigger (u'pageview ', u'new',
u'side ': data [0],
u'session ': sessionID,
u'ip ': brugerIP
)
skubber.trigger (u'numbers ', u'update',
u'side ': data [0],
u'session ': sessionID,
u'ip ': brugerIP
)
@app.før_anmodning
def getAnalyticsData ():
global userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.opdage (anmodning.overskrifter.get ('User-Agent'))
userOS = userInfo ['platform'] ['name']
userBrowser = userInfo ['browser'] ['name']
userIP = "196.207.130.148 "hvis anmodning.remote_addr == '127.0.0.1 'anden anmodning.remote_addr
api = "https: // www.placere.io / api / opslag / "+ brugerIP
prøve:
resp = urllib.anmodning.urlopen (api)
resultat = resp.Læs()
resultat = json.belastninger (resultat.afkode ("utf-8"))
userCountry = resultat ["land"]
userContinent = resultat ["kontinent"]
userCity = resultat ["by"]
undtagen:
print ("Kunne ikke finde:", userIP)
getSession ()
def getSession ():
global sessionID
tid = datetime.nu().udskift (mikrosekund = 0)
hvis 'bruger' ikke er i session:
linjer = (str (tid) + brugerIP).kode ('utf-8')
session ['bruger'] = hashlib.md5 (linjer).hexdigest ()
sessionID = session ['bruger']
skubber.trigger (usession ', u'new',
u'ip ': brugerIP,
u'continent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': brugerOS,
u'browser ': userBrowser,
u'session ': sessionID,
u'time ': str (tid),
)
data = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
create_session (c, data)
andet:
sessionID = session ['bruger']
@app.rute('/')
def indeks ():
data = ['home', sessionID, str (datetime.nu().udskift (mikrosekund = 0))]
parseVisitor (data)
returner f'Brugerdata: data '
@app.rute ('/ get-all-sessions')
def get_all_sessions ():
data = []
dbRows = select_all_sessions (c)
til række i dbRows:
data.Tilføj(
'ip': række ['ip'],
'kontinent': række ['kontinent'],
'land': række ['land'],
'by': række ['by'],
'os': række ['os'],
'browser': række ['browser'],
'session': række ['session'],
'tid': række ['created_at']
)
returner jsonify (data)
hvis __name__ == '__main__':
hoved ()
app.kør (debug = True)

Når du er færdig, skal du køre appen ved hjælp af kommandokolben og køre til 127.0.0.1: 5000 / Dette skal logge brugeren, sessionsoplysningerne for den specifikke IP-adresse inklusive agent (browser), land og lignende.

Gå til 127 for at se hele den loggede session.0.0.1: 5000 / get-all-sessioner.

[

"browser": "Chrome",
"city": "New York",
"kontinent": "Nordamerika",
"country": "United States",
"ip": "192.148.18.103 ",
"os": "Linux",
"session": "9a5d6a84d93ad62a599293acb2e751a1",
"tid": "2021-01-13 02:52:32"
,

"browser": "Mozilla",
"by": "Oregon",
"kontinent": "Nordamerika",
"country": "United States",
"ip": "66.115.149.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"tid": "2021-01-13 02:54:12"
,

"browser": "Chrome",
"by": "Ogden",
"kontinent": "Nordamerika",
"country": "United States",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"tid": "2021-01-13 02:54:37"
,

"browser": "Chrome",
"by": "New York",
"kontinent": "Nordamerika",
"country": "United States",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"tid": "2021-01-13 02:55:07"
,

"browser": "Chrome",
"by": "Nairobi",
"kontinent": "Afrika",
"land": "Kenya",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"tid": "2021-01-13 02:56:43"
,

"browser": "Chrome",
"by": "Nairobi",
"kontinent": "Afrika",
"land": "Kenya",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"tid": "2021-01-13 03:11:49"

]

Når appen kører, kan du tilfældigt ændre din IP-adresse og browsere for at indsamle nok information til din database. Ved hjælp af de indsamlede data kan du bruge dataværktøjer som ELK stack til at visualisere det og se, hvilke placeringer og browsere der besøger applikationen mere.

Følgende er et eksempel på visualisering af indsamlede data fra appen ovenfor.

Konklusion

I denne vejledning brugte vi Python, SQLite og Pusher til at indsamle oplysninger om brugere, der besøger webstedet, og brugte derefter dataene til at skabe visualiseringer.

For at holde tingene enkle begrænsede jeg appoutputtet til konsol og JSON til at rumme dem, der ikke har arbejdet med Flask jinja-skabeloner.

Denne enkle app er åben for udvidelse til et fuldt udbygget webanalyseværktøj. Overvej nedenstående ressourcer for yderligere viden:

Top 10 spil at spille på Ubuntu
Windows-platform har været en af ​​de dominerende platforme til spil på grund af den enorme procentdel af spil, der udvikler sig i dag til indbygget a...
5 bedste arkadespil til Linux
I dag er computere seriøse maskiner, der bruges til spil. Hvis du ikke kan få den nye høje score, ved du hvad jeg mener. I dette indlæg vil du kende n...
Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...