Python

Ako zostaviť monitor webového prenosu pomocou jazykov Python, Flask, SQLite a Pusher

Ako zostaviť monitor webového prenosu pomocou jazykov Python, Flask, SQLite a Pusher
Ak máte na internete spustenú webovú aplikáciu, budete musieť vedieť, odkiaľ vaši návštevníci prichádzajú, systémy, ktoré používajú, a ďalšie podobné veci.

Môžete síce používať služby ako Google Analytics, Monster Insights atď., Je zábavnejšie vybudovať monitorovací systém pomocou Pythonu, databázy SQL a programu Pusher na aktualizáciu údajov v reálnom čase.

V dnešnom tutoriále si ukážeme, ako vytvoriť takýto nástroj pomocou Pythonu, Flask a Pusher. Tutoriál je vysoko prispôsobený vedľajší produkt z tutoriálu zverejneného na oficiálnej stránke Pushera.

Požiadavky

Pre toto zostavenie budete potrebovať vedieť, ako pracovať s programovacím jazykom python, jednoduchým vývojom webových aplikácií a API.

Inštalačné požiadavky

Začnite inštaláciou Pythonu do vášho systému. Budete si musieť nainštalovať aj program Pusher and Flask, httpagentparser.

Vytvorenie databázy

Prvým krokom je vytvorenie databázy, kde sú uložené údaje. Pre Python je sqlite3 predvolený a jeho použitie je jednoduché. Vytvorte súbor s názvom databáza.py a zadajte kód nižšie:

importovať sqlite3
z importu sqlite3 Chyba
def create_connection (databáza):
skúste:
conn = sqlite3.pripojiť (
database, isolation_level = None, check_same_thread = False)
prip.row_factory = lambda c, r: dict (
zip ([stĺpec [0] pre stĺpec v c.popis], r))
spiatočná spoj
okrem chyby ako e:
tlač (e)
def create_table (c, sql):
c.vykonať (sql)
def update_or_create_page (c, data):
sql = "VYBERTE * ZO STRÁNOK, kde name =? a relácia =?„
c.vykonať (sql, data [: - 1])
výsledok = c.fetchone ()
if result == None:
create_pages (c, data)
inak:
tlač (výsledok)
update_pages (c, výsledok ['id'])
def create_pages (c, data):
tlač (údaje)
sql = "INSERT INTO pages (name, session, first_visited)
HODNOTY (?,?,?) "
c.vykonať (sql, data)
def update_pages (c, pageId):
print (pageId)
sql = "AKTUALIZOVAŤ stránky
SET návštevy = návštevy + 1
KDE id = ?„
c.vykonať (sql, [pageId])
def create_session (c, data):
sql = "INSERT INTO sessions (ip, continent, country, city, os, browser, session, created_at)
HODNOTY (?,?,?,?,?,?,?,?) "
c.vykonať (sql, data)
def select_all_sessions (c):
sql = "SELECT * FROM sessions"
c.vykonať (sql)
riadky = c.fetchall ()
vrátiť riadky
def select_all_pages (c):
sql = "VYBERTE * ZO STRÁNOK"
c.vykonať (sql)
riadky = c.fetchall ()
vrátiť riadky
def select_all_user_visits (c, session_id):
sql = "VYBERTE * ZO STRÁNOK, kde relácia =?„
c.vykonať (sql, [session_id])
riadky = c.fetchall ()
vrátiť riadky
def main ():
databáza = "./ pythonsqlite.db "
sql_create_pages = "" "
VYTVORIŤ TABUĽKU, AK NEEXISTUJE stránky (
id integer PRIMARY KEY,
meno varchar (225) NIE NULL,
session varchar (255) NIE NULL,
first_visited datetime NOT NULL,
návštevy celé číslo NIE JE NULL Predvolené 1
);
„“ „
sql_create_session = "" "
VYTVORIŤ TABUĽKU, AK NEEXISTUJE relácie (
id integer PRIMARY KEY,
ip varchar (225) NIE JE NULL,
kontinent varchar (225) NIE NULL,
country varchar (225) NOT NULL,
mesto varchar (225) NIE NULL,
os varchar (225) NIE NULL,
prehliadač varchar (225) NIE NULL,
session varchar (225) NIE NULL,
created_at datetime NOT NULL
);
„“ „
# vytvoriť databázové pripojenie
conn = create_connection (databáza)
ak conn nie je None:
# vytvoriť tabuľky
create_table (conn, sql_create_pages)
create_table (conn, sql_create_session)
print ("Spojenie nadviazané!„)
inak:
tlač („Nepodarilo sa nadviazať spojenie“)
ak __name__ == '__main__':
hlavný()

Uložte súbor a spustením skriptu vytvorte databázu s príslušnými údajmi.

databáza python.py
„Spojenie nadviazané!“

Ďalej prejdite na posunovač a vytvorte si účet. Ďalej vytvorte aplikáciu a podľa sprievodcu ju nastavte. Po dokončení skopírujte kľúče aplikácie a uložte ich do slovníka python, ako je uvedené nižšie.

posunovač = posunovač (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
cluster = "us2")

Nakoniec vytvorte bankovú aplikáciu a vytvorte backend, ako je znázornené v nižšie uvedenom kóde:

z flask import Flask, render_template, request, session, jsonify
import urllib.žiadosť
z tlačného
od
importovať httpagentparser
import json
import os
import hashlib
z importu databázy create_connection, create_session, update_or_create_page, select_all_session, select_all_user_visits, select_all_pages
aplikácia = banka (__ meno__)
aplikácia.secret_key = os.náhodný (24)
# nakonfigurovať posúvací objekt
posunovač = posunovač (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
cluster = "us2")
databáza = "./ pythonsqlite.db "
conn = create_connection (databáza)
c = spoj.kurzor ()
userOS = Žiadne
userIP = Žiadne
userCity = Žiadne
userBrowser = Žiadne
userCountry = Žiadne
userContinent = Žiadne
sessionID = Žiadne
def main ():
globálne spojenie, c
def parseVisitor (údaje):
update_or_create_page (c, data)
posunovač.spúšťač (u'pageview ', u'new',
u'page ': data [0],
u'session ': sessionID,
u'ip ': userIP
)
posunovač.spúšťač (u'numbers ', u'update',
u'page ': data [0],
u'session ': sessionID,
u'ip ': userIP
)
@app.before_request
def getAnalyticsData ():
globálny userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.zistiť (požiadavka.hlavičky.get ('User-Agent'))
userOS = userInfo ['platforma'] ['meno']
userBrowser = userInfo ['browser'] ['name']
userIP = "196.207.130.148 "na požiadanie.remote_addr == '127.0.0.1 ďalšia požiadavka.remote_addr
api = "https: // www.iplokovať.io / api / vyhľadávanie / "+ userIP
skúste:
resp = urllib.žiadosť.urlopen (api)
výsledok = resp.čítať()
výsledok = json.zaťaženia (výsledok.dekódovať ("utf-8"))
userCountry = výsledok ["krajina"]
userContinent = výsledok ["kontinent"]
userCity = výsledok ["mesto"]
okrem:
print ("Nepodarilo sa nájsť:", userIP)
getSession ()
def getSession ():
globálne ID relácie
čas = dátum a čas.teraz ().nahradiť (mikrosekunda = 0)
ak „užívateľ“ nie je v relácii:
lines = (str (cas) + userIP).kódovať ('utf-8')
session ['user'] = hashlib.md5 (riadky).hexdigest ()
sessionID = relácia ['užívateľ']
posunovač.spúšťač (u'session ', u'new',
u'ip ': userIP,
u'kontinent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': userOS,
u'browser ': userBrowser,
u'session ': sessionID,
u'time ': str (čas),
)
data = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, čas]
create_session (c, data)
inak:
sessionID = relácia ['užívateľ']
@app.trasa („/“)
index def ():
data = ['home', sessionID, str (datetime.teraz ().nahradiť (mikrosekunda = 0))]
parseVisitor (údaje)
návrat f'Užívateľské údaje: data '
@app.route ('/ get-all-sessions')
def get_all_sessions ():
data = []
dbRows = select_all_session (c)
pre riadok v dbRows:
údaje.pridať (
'ip': riadok ['ip'],
'continent': riadok ['continent'],
„country“: riadok [„country“],
'city': riadok ['city'],
'os': riadok ['os'],
'browser': riadok ['browser'],
'session': riadok ['session'],
'time': riadok ['created_at']
)
vrátiť jsonify (údaje)
ak __name__ == '__main__':
hlavný()
aplikácia.spustiť (ladenie = pravda)

Po dokončení spustite aplikáciu pomocou príkazového riadku a prejdite na 127.0.0.1: 5000 / Toto by malo prihlásiť používateľa, informácie o relácii konkrétnej adresy IP vrátane agenta (prehľadávača), krajiny a podobne.

Ak chcete zobraziť celú prihlásenú reláciu, choďte na 127.0.0.1: 5 000 / všetky relácie.

[

"browser": "Chrome",
"city": "New York",
"continent": "North America",
"country": "USA",
"ip": "192.148.18.103 ",
"os": "Linux",
"session": "9a5d6a84d93ad62a599293acb2e751a1",
"time": "2021-01-13 02:52:32"
,

"browser": "Mozilla",
"city": "Oregon",
"continent": "North America",
"country": "USA",
"ip": "66.115.149.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"time": "2021-01-13 02:54:12"
,

"browser": "Chrome",
"city": "Ogden",
"continent": "North America",
"country": "USA",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"time": "2021-01-13 02:54:37"
,

"browser": "Chrome",
"city": "New York",
"continent": "North America",
"country": "USA",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"time": "2021-01-13 02:55:07"
,

"browser": "Chrome",
"city": "Nairobi",
"continent": "Africa",
"country": "Keňa",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"time": "2021-01-13 02:56:43"
,

"browser": "Chrome",
"city": "Nairobi",
"continent": "Africa",
"country": "Keňa",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"time": "2021-01-13 03:11:49"

]

Pri spustenej aplikácii môžete náhodne zmeniť svoju adresu IP a prehľadávače, aby ste zhromaždili dostatok informácií pre svoju databázu. Pomocou zhromaždených údajov môžete na vizualizáciu použiť dátové nástroje, ako je napríklad zásobník ELK, a zistiť, ktoré umiestnenia a prehliadače aplikáciu navštevujú viac.

Nasleduje ukážka vizualizácie zhromaždených údajov z aplikácie vyššie.

Záver

V tomto tutoriáli sme pomocou Pythonu, SQLite a Pusher zhromaždili informácie o používateľoch navštevujúcich webovú stránku a potom sme údaje použili na vytvorenie vizualizácií.

Kvôli zjednodušeniu som výstup aplikácie obmedzil na konzolu a JSON, aby som vyhovel tým, ktorí nepracovali s šablónou Flaja jinja.

Táto jednoduchá aplikácia je otvorená na rozšírenie do plnohodnotného nástroja na webovú analýzu. Pre ďalšie znalosti zvážte zdroje uvedené nižšie:

Hry HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
Mnoho vývojárov a vydavateľov hier prichádza s remastrom starých hier v rozlíšení HD, aby predĺžili životnosť franšízy. Prosím fanúšikov, ktorí požadu...
Hry Ako používať AutoKey na automatizáciu hier pre Linux
Ako používať AutoKey na automatizáciu hier pre Linux
AutoKey je obslužný program na automatizáciu stolných počítačov pre systémy Linux a X11, programovaný v programoch Python 3, GTK a Qt. Pomocou jeho fu...
Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...