Piton

Hogyan készítsünk webes forgalomfigyelőt Python, Lombik, SQLite és Pusher használatával

Hogyan készítsünk webes forgalomfigyelőt Python, Lombik, SQLite és Pusher használatával
Ha van egy webalkalmazása, amely az interneten fut, akkor tudnia kell, honnan érkeznek látogatói, az általuk használt rendszerek és egyéb hasonló dolgok.

Bár használhat olyan szolgáltatásokat, mint a Google Analytics, a Monster Insights stb., sokkal szórakoztatóbb, ha valós idejű adatfrissítésekhez Python, SQL adatbázis és Pusher segítségével építünk ki egy felügyeleti rendszert.

A mai oktatóanyagban áttekintjük, hogyan hozhatunk létre ilyen eszközt a Python, a Flask és a Pusher használatával. Az oktatóprogram a Pusher hivatalos oldalán közzétett oktatóanyag rendkívül testreszabott kiegészítője.

Követelmények

Ehhez a buildhez tudnia kell, hogyan kell működni a python programozási nyelvvel, az egyszerű webfejlesztéssel és az API-kkal.

Telepítési követelmények

Kezdje a Python telepítésével a rendszerére. Telepítenie kell a Pusher és a Flask, httpagentparser alkalmazást is.

Az adatbázis létrehozása

Az első lépés egy adatbázis létrehozása, ahol az adatokat tárolják. A Python esetében az sqlite3 alapértelmezettként érkezik, és használata egyszerű. Hozzon létre egy adatbázist.py és írja be az alábbi kódot:

import sqlite3
from sqlite3 import hiba
def create_connection (adatbázis):
próbáld ki:
conn = sqlite3.csatlakozni (
adatbázis, isolation_level = Nincs, check_same_thread = Hamis)
konn.sor_gyár = lambda c, r: dict (
zip ([col [0] col esetén c.leírás], r))
visszakapcsolás
kivéve a hibát e-ként:
nyomtatás (e)
def create_table (c, sql):
c.végrehajtani (sql)
def update_or_create_page (c, adatok):
sql = "SELECT * FROM oldalakról, ahol a név =? és munkamenet =?"
c.végrehajtás (sql, data [: - 1])
eredmény = c.fetchone ()
ha eredmény == Nincs:
create_pages (c, adatok)
más:
nyomtatás (eredmény)
update_pages (c, eredmény ['id'])
def create_pages (c, adatok):
nyomtatás (adatok)
sql = "INSERT INTO pages (név, munkamenet, első_látogatott)
ÉRTÉKEK (?,?,?) "
c.végrehajtani (sql, data)
def update_pages (c, pageId):
nyomtatás (pageId)
sql = "Oldalak frissítése
SET látogatások = látogatások + 1
WHERE id = ?"
c.végrehajtás (sql, [pageId])
def create_session (c, adatok):
sql = "INSERT INTO munkamenetek (ip, kontinens, ország, város, os, böngésző, munkamenet, created_at)
ÉRTÉKEK (?,?,?,?,?,?,?,?) "
c.végrehajtani (sql, data)
def select_all_sessions (c):
sql = "SELECT * FROM munkamenetek"
c.végrehajtani (sql)
sorok = c.fetchall ()
visszatérő sorok
def select_all_pages (c):
sql = "SELECT * FROM pages"
c.végrehajtani (sql)
sorok = c.fetchall ()
visszatérő sorok
def select_all_user_visits (c, session_id):
sql = "SELECT * FROM oldalakból, ahol session =?"
c.végrehajtás (sql, [session_id])
sorok = c.fetchall ()
visszatérő sorok
def main ():
adatbázis = "./ pythonsqlite.db "
sql_create_pages = "" "
Táblázat létrehozása, ha nem létezik oldal (
id egész szám ELSŐKULCS,
név varchar (225) NEM NULL,
session varchar (255) NEM NULL,
first_visited datetime NEM NULL,
meglátogatja az egész számot NINL Alapértelmezett 1
);
"" "
sql_create_session = "" "
Táblázat létrehozása, ha nem létezik munkamenet (
id egész szám ELSŐKULCS,
ip varchar (225) NEM NULL,
kontinens varchar (225) NEM NULL,
country varchar (225) NEM NULL,
városi varchar (225) NEM NULL,
os varchar (225) NEM NULL,
böngésző varchar (225) NEM NULL,
session varchar (225) NEM NULL,
created_at datetime NEM NULL
);
"" "
# adatbázis-kapcsolat létrehozása
conn = create_connection (adatbázis)
ha a conn nem Nincs:
# táblák létrehozása
create_table (conn, sql_create_pages)
create_table (conn, sql_create_session)
print ("A kapcsolat létrejött!")
más:
print ("Nem sikerült kapcsolatot létesíteni")
ha __name__ == '__main__':
fő()

Mentse a fájlt, és futtassa a szkriptet az adatbázis létrehozásához a releváns adatokkal.

python adatbázis.py
„A kapcsolat létrejött!”

Ezután menjen a tolóhöz és hozzon létre egy fiókot. Ezután hozzon létre egy alkalmazást, és kövesse a varázslót az alkalmazás beállításához. Miután elkészült, másolja az alkalmazáskulcsokat, és tárolja őket egy python szótárban az alábbiak szerint.

toló = toló (
app_id = "1079412",
kulcs = "e5d266a24f3502d2b814",
titkos = "bab634d2398eb5fcb0f8",
cluster = "us2")

Végül hozzon létre egy lombik alkalmazást, és készítse el a háttérképet az alábbi kód szerint:

a lombikból importál Lombik, render_template, request, session, jsonify
import urllib.kérés
tolóról import Pusher
a datetime importálásból datetime
importálja a httpagentparser terméket
import json
import os
import hashlib
adatbázisból importálás létrehozása, kapcsolat létrehozása, munkamenet, frissítés vagy létrehozás, kiválasztás minden munkamenet, kijelölés_felhasználó_látogatások, kijelölés_oldalak
app = Lombik (__ név__)
kb.titkos_kulcs = os.urandom (24)
# állítsa be a tolóobjektumot
toló = toló (
app_id = "1079412",
kulcs = "e5d266a24f3502d2b814",
titkos = "bab634d2398eb5fcb0f8",
cluster = "us2")
adatbázis = "./ pythonsqlite.db "
conn = create_connection (adatbázis)
c = konn.kurzor()
userOS = Nincs
userIP = Nincs
userCity = Nincs
userBrowser = Nincs
userCountry = Nincs
userContinent = Nincs
sessionID = Nincs
def main ():
globális kapcsolat, c
def parseVisitor (adatok):
update_or_create_page (c, adatok)
toló.trigger (u'pageview ', u'new',
u'page ': adatok [0],
u'session ': sessionID,
u'ip ': userIP
)
toló.trigger (u'numbers ', u'update',
u'page ': adatok [0],
u'session ': sessionID,
u'ip ': userIP
)
@app.before_request
def getAnalyticsData ():
globális userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.észlelni (kérés.fejlécek.get ('User-Agent'))
userOS = userInfo ['platform'] ['név']
userBrowser = userInfo ['böngésző'] ['név']
userIP = "196.207.130.148 "kérésre.remote_addr == '127.0.0.1 'másik kérés.remote_addr
api = "https: // www.iplocate.io / api / lookup / "+ userIP
próbáld ki:
ill = urllib.kérés.urlopen (api)
eredmény = ill.olvas()
eredmény = json.terhelések (eredmény.dekódolás ("utf-8"))
userCountry = eredmény ["ország"]
userContinent = eredmény ["kontinens"]
userCity = eredmény ["város"]
kivéve:
print ("Nem található:", userIP)
getSession ()
def getSession ():
globális sessionID
idő = dátumidő.Most().cserélje (mikroszekundum = 0)
ha a „felhasználó” nincs munkamenetben:
vonalak = (str (idő) + userIP).kódolás ('utf-8')
session ['user'] = hashlib.md5 (vonalak).hexdigest ()
sessionID = session ['felhasználó']
toló.trigger (u 'session', u'new ',
u'ip ': userIP,
u'continent ': userContinent,
u'country ': userCountry,
u'city ': userCity,
u'os ': userOS,
u'browser ': userBrowser,
u'session ': sessionID,
u'time ': str (idő),
)
adatok = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, time]
create_session (c, adatok)
más:
sessionID = session ['felhasználó']
@app.útvonal('/')
def index ():
adatok = ['home', sessionID, str (dátumidő.Most().cserélje (mikroszekundum = 0)]]
parseVisitor (adatok)
return f'Felhasználói adatok: data '
@app.útvonal ('/ get-all-session')
def get_all_sessions ():
adatok = []
dbRows = select_all_session (c)
a dbRows sorhoz:
adat.mellékel(
'ip': sor ['ip'],
'kontinens': sor ['kontinens'],
'ország': sor ['ország'],
'város': sor ['város'],
'os': sor ['os'],
'böngésző': sor ['böngésző'],
'session': sor ['session'],
'time': sor ['created_at']
)
return jsonify (adatok)
ha __name__ == '__main__':
fő()
kb.futtatás (debug = True)

Miután elkészült, futtassa az alkalmazást a lombik futtatásával, és keresse meg a 127-et.0.0.1: 5000 / Ennek naplóznia kell a felhasználót, az adott IP-cím munkamenet-adatait, beleértve az Agent (böngésző), az Ország stb.

Az összes naplózott munkamenet megtekintéséhez lépjen a 127. oldalra.0.0.1: 5000 / get-all-session.

[

"böngésző": "Chrome",
"város": "New York",
"kontinens": "Észak-Amerika",
"ország": "Egyesült Államok",
"ip": "192.148.18.103 ",
"os": "Linux",
"session": "9a5d6a84d93ad62a599293acb2e751a1",
"idő": "2021-01-13 02:52:32"
,

"böngésző": "Mozilla",
"város": "Oregon",
"kontinens": "Észak-Amerika",
"ország": "Egyesült Államok",
"ip": "66.115.149.229 ",
"os": "Windows",
"session": "64d205c98c839e1d346c733ffd41b27f",
"idő": "2021-01-13 02:54:12"
,

"böngésző": "Chrome",
"város": "Ogden",
"kontinens": "Észak-Amerika",
"ország": "Egyesült Államok",
"ip": "172.231.59.124 ",
"os": "Windows",
"session": "3fd564c16a32b5139a8dd0578e36aded",
"idő": "2021-01-13 02:54:37"
,

"böngésző": "Chrome",
"város": "New York",
"kontinens": "Észak-Amerika",
"ország": "Egyesült Államok",
"ip": "72.229.28.185 ",
"os": "Windows",
"session": "27ad92271023888427da216de10a7cae",
"idő": "2021-01-13 02:55:07"
,

"böngésző": "Chrome",
"város": "Nairobi",
"kontinens": "Afrika",
"ország": "Kenya",
"ip": "196.207.130.148 ",
"os": "Linux",
"session": "c92cdab9eefa2fe121d49264986e7345",
"idő": "2021-01-13 02:56:43"
,

"böngésző": "Chrome",
"város": "Nairobi",
"kontinens": "Afrika",
"ország": "Kenya",
"ip": "196.207.130.148 ",
"os": "Windows",
"session": "31ee28ec6a655e0fa13be4dba8c13861",
"idő": "2021-01-13 03:11:49"

]

A futó alkalmazással véletlenszerűen megváltoztathatja IP-címét és böngészőit, hogy elegendő információt gyűjtsön az adatbázisához. Az összegyűjtött adatok felhasználásával olyan adateszközöket használhat, mint például az ELK stack, hogy megjelenítse azokat, és megnézhesse, mely helyek és böngészők látogatják tovább az alkalmazást.

Az alábbiakban bemutatjuk a fenti alkalmazásból gyűjtött adatok példáját.

Következtetés

Ebben az oktatóanyagban a Python, az SQLite és a Pusher segítségével gyűjtöttünk információkat a webhelyet látogató felhasználókról, majd az adatokat vizualizációk létrehozására használtuk fel.

A dolgok egyszerűsége érdekében az alkalmazás kimenetét a konzolra és a JSON-ra szűkítettem, hogy befogadhassam azokat, akik nem dolgoztak a lombik jinja sablonokkal.

Ez az egyszerű alkalmazás kibővíthető egy teljes értékű webanalitikai eszközzé. Vegye figyelembe az alábbi forrásokat további ismeretekért:

5 legjobb arcade játék Linuxhoz
Manapság a számítógépek komoly gépek, amelyeket játékra használnak. Ha nem sikerül megszerezni az új magas pontszámot, akkor tudni fogja, mire gondolo...
Csata a Wesnothért 1.13.6 Megjelent a fejlesztés
Csata a Wesnothért 1.13.A múlt hónapban megjelent 6 a hatodik fejlesztési kiadás az 1-ben.13.x sorozat, és számos fejlesztést hajt végre, nevezetesen ...
A League of Legends telepítése az Ubuntu 14-re.04
Ha rajongsz a League of Legendsért, akkor ez egy lehetőség arra, hogy teszteld a League of Legends játékot. Ne feledje, hogy a LOL a PlayOnLinux rends...