Python

Kuinka rakentaa verkkoliikennevalvonta Pythonilla, pullolla, SQLite llä ja Pusherillä

Kuinka rakentaa verkkoliikennevalvonta Pythonilla, pullolla, SQLite llä ja Pusherillä
Jos sinulla on Internet-sovellus loppumassa Internetissä, sinun on tiedettävä, mistä kävijät tulevat, käyttämistään järjestelmistä ja muista vastaavista asioista.

Vaikka voit käyttää palveluja, kuten Google Analytics, Monster Insights, jne., on hauskempaa rakentaa valvontajärjestelmä käyttämällä Pythonia, SQL-tietokantaa ja Pusheria reaaliaikaisiin tietopäivityksiin.

Tämänpäiväisessä opetusohjelmassa käymme läpi, kuinka tällainen työkalu luodaan Pythonilla, Flaskilla ja Pusherilla. Opetusohjelma on erittäin räätälöity spin-off oppaasta, joka julkaistaan ​​Pusherin virallisella sivulla.

Vaatimukset

Tätä koontiversiota varten sinun on tiedettävä, miten työskennellä python-ohjelmointikielen, yksinkertaisen verkkokehityksen ja sovellusliittymien kanssa.

Asennusvaatimukset

Aloita asentamalla Python järjestelmään. Sinun on myös asennettava Pusher ja Flask, httpagentparser.

Tietokannan luominen

Ensimmäinen vaihe on luoda tietokanta, johon tiedot tallennetaan. Pythonille sqlite3 tulee oletusarvona, ja sen käyttö on yksinkertaista. Luo tiedosto nimeltä tietokanta.py ja kirjoita koodi alla:

tuo sqlite3
sqlite3-tuontivirhe
def create_connection (tietokanta):
yrittää:
conn = sqlite3.kytkeä(
tietokanta, isolation_level = Ei mitään, check_same_thread = Väärä)
Conn.rivi_tehdas = lambda c, r: dict (
zip ([col [0] col: lle c.kuvaus], r))
paluu yhteys
paitsi virhe kuten e:
tulosta (e)
def create_table (c, sql):
c.suorittaa (sql)
def update_or_create_page (c, data):
sql = "VALITSE * SIVUILTA, joissa nimi =? ja istunto =?"
c.suorittaa (sql, data [: - 1])
tulos = c.fetchone ()
jos tulos == Ei mitään:
create_pages (c, data)
muu:
tulosta (tulos)
päivityssivut (c, tulos ['id'])
def create_pages (c, data):
tulosta (data)
sql = "INSERT INTO sivut (nimi, istunto, ensin vieraillut)
ARVOT (?,?,?) "
c.suorittaa (sql, data)
def päivityssivut (c, pageId):
tulosta (pageId)
sql = "PÄIVITÄ sivut
SET-käynnit = vierailut + 1
Missä id = ?"
c.suorittaa (sql, [pageId])
def create_session (c, data):
sql = "INSERT INTO -istunnot (ip, maanosa, maa, kaupunki, os, selain, istunto, luotu_at)
ARVOT (?,?,?,?,?,?,?,?) "
c.suorittaa (sql, data)
def select_all_sessions (c):
sql = "SELECT * FROM istunnot"
c.suorittaa (sql)
rivit = c.fetchall ()
palata rivejä
def select_all_pages (c):
sql = "VALITSE * FROM sivuilta"
c.suorittaa (sql)
rivit = c.fetchall ()
palata rivejä
def select_all_user_visits (c, session_id):
sql = "VALITSE * SIVUILTA, joissa istunto =?"
c.suorittaa (sql, [session_id])
rivit = c.fetchall ()
palata rivejä
def main ():
tietokanta = "./ pythonsqlite.db "
sql_create_pages = "" "
Luo taulukko, ellei ole sivuja (
id kokonaisluku ALKUPERÄINEN AVAIN,
nimi varchar (225) EI NULL,
istunnon varchar (255) EI NULL,
first_visited datetime EI NULL,
käy kokonaislukuna EI NULL Oletus 1
);
"" "
sql_create_session = "" "
Luo taulukko, ellei istuntoja ole (
id kokonaisluku ALKUPERÄINEN AVAIN,
ip varchar (225) EI NULL,
mantereen varchar (225) EI NULL,
maan varchar (225) EI NULL,
kaupungin varchar (225) EI NULL,
os varchar (225) EI NULL,
selaimen varchar (225) EI NULL,
istunnon varchar (225) EI NULL,
created_at päivämäärä EI NULL
);
"" "
# luo tietokantayhteys
conn = luo yhteys (tietokanta)
jos yhteys ei ole Ei mitään:
# luoda taulukoita
create_table (conn, sql_create_pages)
create_table (yhteys, sql_create_session)
tulosta ("Yhteys muodostettu!")
muu:
tulosta ("Yhteyttä ei voitu muodostaa")
jos __nimi__ == '__main__':
main ()

Tallenna tiedosto ja suorita komentosarja, jotta voit luoda tietokannan tarvittavilla tiedoilla.

python-tietokanta.py
"Yhteys luotu!”

Seuraavaksi siirry työntäjään ja luo tili. Luo sitten sovellus ja asenna sovellus noudattamalla ohjattua toimintoa. Kun olet valmis, kopioi sovellusavaimet ja tallenna ne python-sanakirjaan alla olevan kuvan mukaisesti.

työntäjä = työntäjä (
app_id = "1079412",
avain = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
klusteri = "us2")

Luo lopuksi pullosovellus ja rakenna taustakuva alla olevan koodin mukaisesti:

pullosta tuo pullo, render_template, request, session, jsonify
tuo urllib.pyyntö
työntäjän tuonnista
päivämäärän tuonnista päivämäärä
tuo httpagentparser
tuo json
tuonti os
tuonti hashlib
tuonnista tietokannasta create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
app = pullo (__ nimi__)
sovellus.salainen_avain = os.urandom (24)
# konfiguroi työntöobjekti
työntäjä = työntäjä (
app_id = "1079412",
key = "e5d266a24f3502d2b814",
secret = "bab634d2398eb5fcb0f8",
klusteri = "us2")
tietokanta = "./ pythonsqlite.db "
conn = luo yhteys (tietokanta)
c = liitäntä.kohdistin ()
userOS = Ei mitään
userIP = Ei mitään
userCity = Ei mitään
userBrowser = Ei mitään
userCountry = Ei mitään
userContinent = Ei mitään
sessionID = Ei mitään
def main ():
maailmanlaajuinen yhteys, c
def parseVisitor (data):
update_or_create_page (c, data)
työntäjä.laukaista (u'pageview ', u'new',
u'page ': data [0],
u'session ': sessionID,
u'ip ': käyttäjänIP
)
työntäjä.laukaista (u'numbers ', u'update',
u'page ': data [0],
u'session ': sessionID,
u'ip ': käyttäjänIP
)
@sovellus.before_request
def getAnalyticsData ():
globaali userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.havaita (pyyntö.otsikot.get ('User-Agent'))
userOS = userInfo ['alusta'] ['nimi']
userBrowser = userInfo ['selain'] ['nimi']
userIP = "196.207.130.148 ", jos sitä pyydetään.remote_addr == '127.0.0.1 'muuta pyyntöä.remote_addr
api = "https: // www.iplocate.io / api / lookup / "+ userIP
yrittää:
resp = urllib.pyyntö.urlopeeni (api)
tulos = vastaavasti.lukea()
tulos = json.kuormat (tulos.purkaa ("utf-8"))
userCountry = tulos ["maa"]
userContinent = tulos ["manner"]
userCity = tulos ["kaupunki"]
paitsi:
tulosta ("Ei löydy:", userIP)
getSession ()
def getSession ():
globaali sessionID
aika = päivämäärä.nyt().korvaa (mikrosekunnin = 0)
jos 'käyttäjä' ei ole istunnossa:
rivit = (str (aika) + userIP).koodata ('utf-8')
session ['user'] = hashlib.md5 (rivit).hexdigest ()
sessionID = session ['käyttäjä']
työntäjä.laukaista (u'session ', u'new',
u'ip ': käyttäjänIP,
u'continent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': userOS,
u'browser ': käyttäjän selain,
u'session ': sessionID,
u'time ': str (aika),
)
data = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
create_session (c, data)
muu:
sessionID = session ['käyttäjä']
@sovellus.reitti('/')
def-indeksi ():
data = ['koti', sessionID, str (päivämäärä.nyt().korvaa (mikrosekunnin = 0))]
parseVisitor (data)
return f'Käyttäjän tiedot: data '
@sovellus.reitti ('/ hanki kaikki istunnot')
def get_all_sessions ():
data = []
dbRows = select_all_sessions (c)
riville dbRows:
tiedot.liitä (
'ip': rivi ['ip'],
'manner': rivi ['maanosa'],
'maa': rivi ['maa'],
'kaupunki': rivi ['kaupunki'],
'os': rivi ['os'],
'browser': rivi ['browser'],
'session': rivi ['session'],
'aika': rivi ['luotu_at']
)
return jsonify (data)
jos __nimi__ == '__main__':
main ()
sovellus.suorittaa (debug = True)

Kun olet valmis, suorita sovellus komentokomennolla ja siirry kohtaan 127.0.0.1: 5000 / Tämän pitäisi kirjata käyttäjä, tietyn IP-osoitteen istuntotiedot, mukaan lukien agentti (selain), maa ja vastaavat.

Jos haluat tarkastella kaikkia kirjautuneita istuntoja, siirry kohtaan 127.0.0.1: 5000 / hanki kaikki-istunnot.

[

"selain": "Chrome",
"kaupunki": "New York",
"manner": "Pohjois-Amerikka",
"maa": "Yhdysvallat",
"ip": "192.148.18.103 ",
"os": "Linux",
"session": "9a5d6a84d93ad62a599293acb2e751a1",
"aika": "2021-01-13 02:52:32"
,

"selain": "Mozilla",
"kaupunki": "Oregon",
"manner": "Pohjois-Amerikka",
"maa": "Yhdysvallat",
"ip": "66.115.149.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"aika": "2021-01-13 02:54:12"
,

"selain": "Chrome",
"kaupunki": "Ogden",
"manner": "Pohjois-Amerikka",
"maa": "Yhdysvallat",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"aika": "2021-01-13 02:54:37"
,

"selain": "Chrome",
"kaupunki": "New York",
"manner": "Pohjois-Amerikka",
"maa": "Yhdysvallat",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"aika": "2021-01-13 02:55:07"
,

"selain": "Chrome",
"kaupunki": "Nairobi",
"manner": "Afrikka",
"maa": "Kenia",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"aika": "2021-01-13 02:56:43"
,

"selain": "Chrome",
"kaupunki": "Nairobi",
"manner": "Afrikka",
"maa": "Kenia",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"aika": "2021-01-13 03:11:49"

]

Kun sovellus on käynnissä, voit muuttaa satunnaisesti IP-osoitettasi ja selaimesi kerätäksesi tarpeeksi tietoa tietokantaan. Kerättyjen tietojen avulla voit visualisoida datatyökaluja, kuten ELK-pino, nähdäksesi, mitkä sijainnit ja selaimet vierailevat sovelluksessa enemmän.

Seuraava on esimerkki yllä olevasta sovelluksesta kerättyjen tietojen visualisoinnista.

Johtopäätös

Tässä opetusohjelmassa käytimme Pythonia, SQLitea ja Pusheria keräämään tietoja verkkosivustolla vierailevista käyttäjistä ja käytimme sitten tietoja visualisointien luomiseen.

Jotta asiat pysyisivät yksinkertaisina, rajoitin sovelluksen lähdön konsoliin ja JSON: iin, jotta mahtuisi ne, jotka eivät ole työskennelleet pullo jinja -mallien kanssa.

Tämä yksinkertainen sovellus on avoin laajennettavaksi täysimittaiseksi verkkoanalyysityökaluksi. Harkitse alla olevia resursseja saadaksesi lisätietoja:

Asenna uusin Dolphin Emulator for Gamecube & Wii Linuxiin
Dolphin-emulaattorin avulla voit pelata valitsemiasi Gamecube & Wii -pelejä Linux-henkilökohtaisilla tietokoneilla (PC). Koska Dolphin Emulator on va...
Kuinka käyttää GameConqueror-huijausmoottoria Linuxissa
Artikkelissa on opas GameConqueror-huijausmoottorin käytöstä Linuxissa. Monet Windows-pelejä pelaavat käyttäjät käyttävät "Cheat Engine" -sovellusta m...
Parhaat pelikonsoliemulaattorit Linuxille
Tässä artikkelissa luetellaan suositut pelikonsolin emulointiohjelmistot, jotka ovat saatavana Linuxille. Emulointi on ohjelmistojen yhteensopivuusker...