Python

Cara Membuat Monitor Lalu Lintas Web dengan Python, Flask, SQLite, dan Pusher

Cara Membuat Monitor Lalu Lintas Web dengan Python, Flask, SQLite, dan Pusher
Jika Anda memiliki aplikasi web yang berjalan di internet, Anda perlu mengetahui dari mana pengunjung Anda berasal, sistem yang mereka gunakan, dan hal-hal lain semacam itu.

Meskipun Anda dapat menggunakan layanan seperti Google Analytics, Monster Insights, dll., lebih menyenangkan untuk membangun sistem pemantauan menggunakan Python, database SQL, dan Pusher untuk pembaruan data waktu nyata.

Dalam tutorial hari ini, kita akan membahas cara membuat alat seperti itu menggunakan Python, Flask, dan Pusher. Tutorial ini merupakan spin-off yang sangat disesuaikan dari tutorial yang diterbitkan di halaman resmi Pusher.

Persyaratan

Untuk build ini, Anda perlu mengetahui cara bekerja dengan bahasa pemrograman python, pengembangan web sederhana, dan API.

Menginstal persyaratan

Mulailah dengan menginstal Python di sistem Anda. Anda juga perlu menginstal Pusher dan Flask, httpagentparser.

Membuat database

Langkah pertama adalah membuat database tempat data disimpan. Untuk Python, sqlite3 hadir sebagai default, dan menggunakannya sederhana. Buat file bernama database.py dan masukkan kode di bawah ini:

impor sqlite3
dari Kesalahan impor sqlite3
def create_connection(database):
mencoba:
samb = sqlite3.Menghubung(
database, isolasi_level=Tidak ada, periksa_sama_utas=Salah)
samb.row_factory = lambda c, r: dict(
zip([col[0] untuk col di c.deskripsi], r))
sambungan kembali
kecuali Kesalahan sebagai e:
cetak (e)
def create_table(c, sql):
c.jalankan (sql)
def update_or_create_page(c, data):
sql = "PILIH * DARI halaman di mana nama=? dan sesi=?"
c.jalankan(sql, data[:-1])
hasil = c.mengambil ()
jika hasil == Tidak ada:
buat_halaman(c, data)
lain:
cetak (hasil)
update_pages(c, hasil['id'])
def create_pages(c, data):
cetak (data)
sql = "INSERT INTO pages(name,session,first_visited)
NILAI (?,?,?)"
c.jalankan (sql, data)
def update_pages(c, pageId):
cetak(ID halaman)
sql = "PERBARUI halaman
SET kunjungan = kunjungan+1
ID MANA = ?"
c.jalankan (sql, [pageId])
def create_session(c, data):
sql = "MASUKKAN KE sesi (ip, benua, negara, kota, os, browser, sesi, create_at)
NILAI (?,?,?,?,?,?,?,?)"
c.jalankan (sql, data)
def pilih_all_sessions(c):
sql = "PILIH * DARI sesi"
c.jalankan (sql)
baris = c.ambil semua()
kembali baris
def pilih_semua_halaman(c):
sql = "PILIH * DARI halaman"
c.jalankan (sql)
baris = c.ambil semua()
kembali baris
def select_all_user_visits(c, session_id):
sql = "PILIH * DARI halaman di mana sesi =?"
c.jalankan(sql, [session_id])
baris = c.ambil semua()
kembali baris
def utama():
basis data = "./pythonsqlite.db"
sql_create_pages = """
BUAT TABEL JIKA TIDAK ADA halaman (
id bilangan bulat KUNCI UTAMA,
nama varchar(225) BUKAN NULL,
sesi varchar(255) BUKAN NULL,
first_visited datetime BUKAN NULL,
mengunjungi bilangan bulat BUKAN NULL Default 1
);
"""
sql_create_session = """
BUAT TABEL JIKA TIDAK ADA sesi (
id bilangan bulat KUNCI UTAMA,
ip varchar(225) BUKAN NULL,
varchar benua (225) BUKAN NULL,
varchar negara (225) BUKAN NULL,
kota varchar (225) BUKAN NULL,
os varchar(225) BUKAN NULL,
browser varchar(225) BUKAN NULL,
sesi varchar(225) BUKAN NULL,
create_at datetime BUKAN NULL
);
"""
# buat koneksi database
samb = buat_koneksi(basis data)
jika samb bukan Tidak ada:
# buat tabel
create_table(sambungan, sql_create_pages)
create_table(sambungan, sql_create_session)
print("Koneksi sudah tersambung!")
lain:
print("Tidak dapat membuat koneksi")
jika __name__ == '__main__':
utama()

Simpan file dan jalankan skrip untuk membuat database dengan data yang relevan.

database python.py
“Koneksi terjalin!”

Selanjutnya, buka pusher dan buat akun. Selanjutnya, buat aplikasi dan ikuti wizard untuk mengatur aplikasi. Setelah selesai, salin kunci aplikasi dan simpan dalam kamus python seperti yang ditunjukkan di bawah ini.

pendorong = pendorong(
app_id = "1079412",
kunci = "e5d266a24f3502d2b814",
rahasia = "bab634d2398eb5fcb0f8",
kluster = "us2")

Terakhir, buat aplikasi flask dan bangun backend seperti yang ditunjukkan pada kode di bawah ini:

dari labu impor Flask, render_template, permintaan, sesi, jsonify
urllib impor.permintaan
dari pusher impor Pusher
dari datetime impor datetime
impor httpagentparser
impor json
impor os
impor hashlib
dari database impor create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
aplikasi = Labu(__nama__)
aplikasi.secret_key = os.urandom(24)
# konfigurasikan objek pendorong
pendorong = pendorong(
app_id = "1079412",
kunci = "e5d266a24f3502d2b814",
rahasia = "bab634d2398eb5fcb0f8",
kluster = "us2")
basis data = "./pythonsqlite.db"
samb = buat_koneksi(basis data)
c = samb.kursor()
penggunaOS = Tidak ada
userIP = Tidak ada
userCity = Tidak ada
userBrowser = Tidak ada
negara pengguna = Tidak ada
userContinent = Tidak ada
sessionID = Tidak ada
def utama():
sambungan global, c
def parseVisitor(data):
update_or_create_page(c, data)
pendorong.pemicu(u'tampilan halaman', u'baru',
u'halaman': data[0],
u'session': sessionID,
u'ip': userIP
)
pendorong.trigger(u'numbers', u'update',
u'halaman': data[0],
u'session': sessionID,
u'ip': userIP
)
@aplikasi.sebelum_permintaan
def getAnalyticsData():
global userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.mendeteksi (permintaan.header.dapatkan('Agen-Pengguna'))
userOS = userInfo['platform']['nama']
userBrowser = userInfo['browser']['name']
IP pengguna = "196.207.130.148" jika diminta.remote_addr == '127.0.0.1' lagi permintaan.remote_addr
api = "https://www.meniru.io/api/lookup/" + IP pengguna
mencoba:
resp = urlib.permintaan.urlopen(api)
hasil = jawaban.Baca()
hasil = json.beban (hasil.dekode("utf-8"))
userCountry = hasil["negara"]
userContinent = hasil["benua"]
userCity = hasil["kota"]
kecuali:
print("Tidak dapat menemukan: ", IP pengguna)
dapatkanSesi()
def getSession():
ID sesi global
waktu = tanggal waktu.sekarang().ganti (mikrodetik = 0)
jika 'pengguna' tidak dalam sesi:
baris = (str(waktu)+IP pengguna).enkode('utf-8')
sesi['pengguna'] = hashlib.md5(baris).hexdigest()
sessionID = sesi['pengguna']
pendorong.pemicu(u'sesi', u'baru',
u'ip': userIP,
u'continent': penggunaBenua,
u'negara': penggunaNegara,
u'city': userCity,
u'os': userOS,
u'browser': userBrowser,
u'session': sessionID,
u'waktu': str(waktu),
)
data = [IP pengguna, Benua pengguna, Negara pengguna,
userCity, userOS, userBrowser, sessionID, waktu]
buat_sesi(c, data)
lain:
sessionID = sesi['pengguna']
@aplikasi.rute('/')
indeks def():
data = ['home', sessionID, str(datetime.sekarang().ganti (mikrodetik = 0))]
parseVisitor(data)
kembalikan f'Data pengguna: data'
@aplikasi.rute('/dapatkan-semua-sesi')
def get_all_sessions():
data = []
dbRows = pilih_semua_sesi(c)
untuk baris di dbRows:
data.menambahkan(
'ip': baris['ip'],
'benua': baris['benua'],
'negara': baris['negara'],
'kota': baris['kota'],
'os': baris['os'],
'browser': baris['browser'],
'sesi': baris['sesi'],
'waktu': baris['dibuat_at']
)
kembalikan jsonify(data)
jika __name__ == '__main__':
utama()
aplikasi.jalankan(debug=Benar)

Setelah selesai, jalankan aplikasi menggunakan perintah flask run dan arahkan ke 127.0.0.1:5000/ Ini harus mencatat pengguna, informasi sesi dari alamat IP tertentu termasuk Agen (browser), Negara, dan semacamnya.

Untuk melihat semua sesi yang dicatat, buka 127.0.0.1:5000/dapatkan semua sesi.

[

"peramban":"Chrome",
"kota":"New York",
"benua":"Amerika Utara",
"negara":"Amerika Serikat",
"ip":"192.148.18.103",
"os":"Linux",
"sesi":"9a5d6a84d93ad62a599293acb2e751a1",
"waktu":"2013-01-13 02:52:32"
,

"peramban":"Mozilla",
"kota":"Oregon",
"benua":"Amerika Utara",
"negara":"Amerika Serikat",
"ip":"66.115.149.229",
"os":"jendela",
"sesi":"64d205c98c839e1d346c733ffd41b27f",
"waktu":"2013-01-13 02:54:12"
,

"peramban":"Chrome",
"kota":"Ogden",
"benua":"Amerika Utara",
"negara":"Amerika Serikat",
"ip":"172.231.59.124",
"os":"jendela",
"sesi":"3fd564c16a32b5139a8dd0578e36aded",
"waktu":"2013-01-13 02:54:37"
,

"peramban":"Chrome",
"kota":"New York",
"benua":"Amerika Utara",
"negara":"Amerika Serikat",
"ip":"72.229.28.185",
"os":"jendela",
"sesi":"27ad92271023888427da216de10a7cae",
"waktu":"2013-01-13 02:55:07"
,

"peramban":"Chrome",
"kota":"Nairobi",
"benua":"Afrika",
"negara":"Kenya",
"ip":"196.207.130.148",
"os":"Linux",
"sesi":"c92cdab9eefa2fe121d49264986e7345",
"waktu":"2013-01-13 02:56:43"
,

"peramban":"Chrome",
"kota":"Nairobi",
"benua":"Afrika",
"negara":"Kenya",
"ip":"196.207.130.148",
"os":"jendela",
"sesi":"31ee28ec6a655e0fa13be4dba8c13861",
"waktu":"2013-01-13 03:11:49"

]

Dengan aplikasi yang berjalan, Anda dapat secara acak mengubah alamat IP dan browser Anda untuk mengumpulkan informasi yang cukup untuk database Anda. Dengan menggunakan data yang dikumpulkan, Anda dapat menggunakan alat data seperti tumpukan ELK untuk memvisualisasikannya dan melihat lokasi dan browser mana yang lebih sering mengunjungi aplikasi.

Berikut ini adalah contoh visualisasi data yang dikumpulkan dari aplikasi di atas.

Kesimpulan

Dalam tutorial ini, kami menggunakan Python, SQLite, dan Pusher untuk mengumpulkan informasi tentang pengguna yang mengunjungi situs web dan kemudian menggunakan data tersebut untuk membuat visualisasi.

Untuk mempermudah, saya membatasi output aplikasi ke konsol dan JSON untuk mengakomodasi mereka yang belum bekerja dengan templating Flask jinja.

Aplikasi sederhana ini terbuka untuk ekspansi menjadi alat analisis web yang lengkap. Pertimbangkan sumber daya di bawah ini untuk pengetahuan tambahan:

Instal Game Strategi OpenRA terbaru di Ubuntu Linux
OpenRA adalah mesin game Strategi Waktu Nyata Libre/Gratis yang membuat ulang game Westwood awal seperti Command & Conquer klasik: Red Alert. Mod yang...
Instal Dolphin Emulator terbaru untuk Gamecube & Wii di Linux
Dolphin Emulator memungkinkan Anda memainkan game Gamecube & Wii pilihan Anda di Komputer Pribadi (PC) Linux. Menjadi emulator game sumber terbuka da...
Cara Menggunakan Cheat Engine GameConqueror di Linux
Artikel ini mencakup panduan tentang menggunakan mesin cheat GameConqueror di Linux. Banyak pengguna yang bermain game di Windows sering menggunakan a...