piton

Python, Flask, SQLite ve Pusher ile Web Trafik İzleyicisi Nasıl Oluşturulur

Python, Flask, SQLite ve Pusher ile Web Trafik İzleyicisi Nasıl Oluşturulur
İnternette çalışan bir web uygulamanız varsa, ziyaretçilerinizin nereden geldiğini, kullandıkları sistemleri ve benzeri şeyleri bilmeniz gerekir.

Google Analytics, Monster Insights, vb. gibi hizmetleri kullanabilmenize rağmen., gerçek zamanlı veri güncellemeleri için Python, SQL veritabanı ve Pusher kullanarak bir izleme sistemi oluşturmak daha eğlenceli.

Bugünkü eğitimde Python, Flask ve Pusher kullanarak böyle bir aracın nasıl oluşturulacağını gözden geçireceğiz. Eğitici, Pusher'ın resmi sayfasında yayınlanan bir eğitimden son derece özelleştirilmiş bir yan ürün.

Gereksinimler

Bu yapı için python programlama dili, basit web geliştirme ve API'ler ile nasıl çalışacağınızı bilmeniz gerekecek.

Yükleme gereksinimleri

Python'u sisteminize kurarak başlayın. Ayrıca Pusher ve Flask, httpagentparser'ı da kurmanız gerekecek.

veritabanı oluşturma

İlk adım, verilerin depolandığı bir veritabanı oluşturmaktır. Python için sqlite3 varsayılan olarak gelir ve onu kullanmak basittir. veritabanı adlı bir dosya oluşturun.py ve aşağıdaki kodu girin:

sqlite3'ü içe aktar
sqlite3'ten içe aktarma Hatası
def create_connection(veritabanı):
Deneyin:
bağlantı = sqlite3.bağlan(
veritabanı, izolasyon_level=Yok, check_same_thread=Yanlış)
bağlantı.satır_fabrika = lambda c, r: dict(
zip([col[0] for col in c.açıklama], r))
dönüş bağlantısı
e olarak Error hariç:
yazdır(e)
def create_table(c, sql):
c.yürütmek(sql)
def update_or_create_page(c, veri):
sql = "SEÇ * adın= olduğu sayfalardan? ve oturum=?"
c.yürüt(sql, veri[:-1])
sonuç = c.getirme()
eğer sonuç == Yok:
create_pages(c, veri)
Başka:
yazdır(sonuç)
update_pages(c, sonuç['id'])
def create_pages(c, data):
yazdır(veri)
sql = "Sayfalara GİRİN(isim,oturum,ilk_ziyaret edilen)
DEĞERLER (?,?,?)"
c.yürüt (sql, veri)
def update_pages(c, pageId):
yazdır(sayfa kimliği)
sql = "GÜNCELLEME sayfaları
SET ziyaretleri = ziyaretler+1
NEREDE kimliği = ?"
c.yürüt(sql, [pageId])
def create_session(c, veri):
sql = "INSERT INTO session(ip, kıta, ülke, şehir, işletim sistemi, tarayıcı, oturum, create_at)
DEĞERLER (?,?,?,?,?,?,?,?)"
c.yürüt (sql, veri)
def select_all_sessions(c):
sql = "Oturumlardan * SEÇİN"
c.yürütmek(sql)
satırlar = c.getir()
satırları döndür
def select_all_pages(c):
sql = "Sayfalardan * SEÇİN"
c.yürütmek(sql)
satırlar = c.getir()
satırları döndür
def select_all_user_visits(c, session_id):
sql = "Seçim * oturumun olduğu sayfalardan =?"
c.yürüt(sql, [session_id])
satırlar = c.getir()
satırları döndür
tanım ana():
veritabanı = "./pythonsqlite.db"
sql_create_pages = """
MEVCUT DEĞİLSE TABLO OLUŞTUR sayfaları (
id tamsayı BİRİNCİL ANAHTAR,
isim varchar(225) NULL DEĞİL,
oturum varchar(255) NULL DEĞİL,
first_visited tarihsaat NULL DEĞİL,
ziyaret tamsayı NOT NULL Varsayılan 1
);
"""
sql_create_session = """
MEVCUT DEĞİLSE TABLO OLUŞTUR oturum (
id tamsayı BİRİNCİL ANAHTAR,
ip varchar(225) NULL DEĞİL,
kıta varchar(225) NULL DEĞİL,
ülke varchar(225) NULL DEĞİL,
şehir varchar(225) NULL DEĞİL,
os varchar(225) NULL DEĞİL,
tarayıcı varchar(225) NULL DEĞİL,
oturum varchar(225) NULL DEĞİL,
create_at datetime NULL DEĞİL
);
"""
# bir veritabanı bağlantısı oluşturun
conn = create_connection(veritabanı)
bağlantı Yok değilse:
# tablolar oluştur
create_table(bağlantı, sql_create_pages)
create_table(bağlantı, sql_create_session)
print("Bağlantı kuruldu!")
Başka:
print("Bağlantı kurulamadı")
if __name__ == '__main__':
ana()

Dosyayı kaydedin ve ilgili verilerle veritabanı oluşturmak için komut dosyasını çalıştırın.

piton veritabanı.p
"Bağlantı kuruldu!”

Ardından, iticiye gidin ve bir hesap oluşturun. Ardından, bir uygulama oluşturun ve uygulamayı kurmak için sihirbazı izleyin. Tamamlandığında, uygulama anahtarlarını kopyalayın ve aşağıda gösterildiği gibi bir python sözlüğünde saklayın.

itici = İtici(
app_id = "1079412",
anahtar = "e5d266a24f3502d2b814",
sır = "bab634d2398eb5fcb0f8",
küme = "us2")

Son olarak, bir şişe uygulaması oluşturun ve aşağıdaki kodda gösterildiği gibi arka ucu oluşturun:

şişeden içe aktarma Flask, render_template, istek, oturum, jsonify
urllib'i içe aktar.istek
itici ithalat iticiden
tarih saatinden içe aktarma tarih saatinden
httpagentparser'ı içe aktar
json'u içe aktar
işletim sistemini içe aktar
hashlib'i içe aktar
veritabanından import_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages
uygulama = Şişe(__name__)
uygulama.secret_key = işletim sistemi.urandom(24)
# itici nesneyi yapılandır
itici = İtici(
app_id = "1079412",
anahtar = "e5d266a24f3502d2b814",
sır = "bab634d2398eb5fcb0f8",
küme = "us2")
veritabanı = "./pythonsqlite.db"
conn = create_connection(veritabanı)
c = bağlantı.imleç()
kullanıcıOS = Yok
kullanıcıIP = Yok
userCity = Yok
userBrowser = Yok
userCountry = Yok
userContinent = Yok
oturum kimliği = Yok
tanım ana():
küresel bağlantı, c
def parseVisitor(veri):
update_or_create_page(c, veri)
itici.tetikleyici(u'sayfa görüntüleme', u'yeni',
u'page': data[0],
u'session': oturum kimliği,
u'ip': kullanıcıIP'si
)
itici.tetikleyici(u'sayılar', u'güncelleme',
u'page': data[0],
u'session': oturum kimliği,
u'ip': kullanıcıIP'si
)
@app.once_request
def getAnalyticsData():
global userOS, userBrowser, userIP, userContinent, userCity, userCountry, sessionID
userInfo = httpagentparser.tespit (istek.başlıklar.get('Kullanıcı-Aracı'))
userOS = userInfo['platform']['ad']
userBrowser = userInfo['tarayıcı']['ad']
kullanıcıIP = "196.207.130.148" istenirse.remote_addr == '127.0.0.1' başka istek.remote_addr
API = "https://www.yerleştirmek.io/api/lookup/" + kullanıcıIP
Deneyin:
cevap = urllib.istek.urlopen(api)
sonuç = cevap.oku()
sonuç = json.yükler(sonuç.kodunu çöz ("utf-8"))
userCountry = sonuç["ülke"]
userContinent = sonuç["kıta"]
userCity = sonuç["şehir"]
dışında:
print("Bulunamadı: ", userIP)
getSession()
def getSession():
küresel oturum kimliği
saat = tarihsaat.şimdi().değiştir(mikrosaniye=0)
'kullanıcı' oturumda değilse:
satırlar = (str(time)+userIP).kodlamak('utf-8')
oturum['kullanıcı'] = hashlib.md5(satırlar).altılı özet()
sessionID = oturum['kullanıcı']
itici.trigger(u'session', u'new',
u'ip': kullanıcıIP'si,
u'continent': userContinent,
u'country': userCountry,
u'city': userCity,
u'os': userOS,
u'browser': userBrowser,
u'session': oturum kimliği,
u'time': str(zaman),
)
data = [userIP, userContinent, userCountry,
userCity, userOS, userBrowser, sessionID, zaman]
create_session(c, veri)
Başka:
sessionID = oturum['kullanıcı']
@app.rota('/')
tanım indeksi():
data = ['home', sessionID, str(datetime).şimdi().değiştir(mikrosaniye=0))]
ayrıştırmaVisitor(veri)
f'Kullanıcı verilerini döndür: data'
@app.route('/get-all-sessions')
def get_all_sessions():
veri = []
dbRows = select_all_sessions(c)
dbRows'daki satır için:
veri.ekle(
'ip': satır['ip'],
'kıta': satır['kıta'],
'ülke': satır['ülke'],
'şehir': satır['şehir'],
'os': satır['os'],
'tarayıcı': satır['tarayıcı'],
'oturum': satır['oturum'],
'zaman': satır['created_at']
)
jsonify(veri) döndür
if __name__ == '__main__':
ana()
uygulama.çalıştır(hata ayıklama=Doğru)

Tamamlandığında, flask run komutunu kullanarak uygulamayı çalıştırın ve 127'ye gidin.0.0.1:5000/ Bu, kullanıcıyı, Ajan (tarayıcı), Ülke ve benzeri dahil olmak üzere belirli IP adresinin oturum bilgilerini kaydetmelidir.

Kaydedilen tüm oturumları görüntülemek için 127'ye gidin.0.0.1:5000/hepsini al oturumları.

[

"tarayıcı":"Chrome",
"şehir":"New York",
"kıta":"Kuzey Amerika",
"ülke":"Amerika Birleşik Devletleri",
"ip":"192.148.18.103",
"os":"Linux",
"oturum":"9a5d6a84d93ad62a599293acb2e751a1",
"zaman":"2021-01-13 02:52:32"
,

"tarayıcı":"Mozilla",
"şehir":"Oregon",
"kıta":"Kuzey Amerika",
"ülke":"Amerika Birleşik Devletleri",
"ip":"66.115.149.229",
"os":"Windows",
"oturum":"64d205c98c839e1d346c733ffd41b27f",
"zaman":"2021-01-13 02:54:12"
,

"tarayıcı":"Chrome",
"şehir":"Ogden",
"kıta":"Kuzey Amerika",
"ülke":"Amerika Birleşik Devletleri",
"ip":"172.231.59.124",
"os":"Windows",
"oturum":"3fd564c16a32b5139a8dd0578e36aded",
"zaman":"2021-01-13 02:54:37"
,

"tarayıcı":"Chrome",
"şehir":"New York",
"kıta":"Kuzey Amerika",
"ülke":"Amerika Birleşik Devletleri",
"ip":"72.229.28.185",
"os":"Windows",
"oturum":"27ad92271023888427da216de10a7cae",
"zaman":"2021-01-13 02:55:07"
,

"tarayıcı":"Chrome",
"şehir":"Nairobi",
"kıta":"Afrika",
"ülke":"Kenya",
"ip":"196.207.130.148",
"os":"Linux",
"oturum":"c92cdab9eefa2fe121d49264986e7345",
"zaman":"2021-01-13 02:56:43"
,

"tarayıcı":"Chrome",
"şehir":"Nairobi",
"kıta":"Afrika",
"ülke":"Kenya",
"ip":"196.207.130.148",
"os":"Windows",
"oturum":"31ee28ec6a655e0fa13be4dba8c13861",
"zaman":"2021-01-13 03:11:49"

]

Uygulama çalışırken, veritabanınız için yeterli bilgi toplamak için IP adresinizi ve tarayıcılarınızı rastgele değiştirebilirsiniz. Toplanan verileri kullanarak, görselleştirmek ve uygulamayı hangi konumların ve tarayıcıların daha fazla ziyaret ettiğini görmek için ELK yığını gibi veri araçlarını kullanabilirsiniz.

Aşağıdaki, yukarıdaki uygulamadan toplanan verilerin örnek bir görselleştirmesidir.

Sonuç

Bu eğitimde, web sitesini ziyaret eden kullanıcılar hakkında bilgi toplamak için Python, SQLite ve Pusher'ı kullandık ve ardından verileri görselleştirmeler oluşturmak için kullandık.

İşleri basit tutmak için, Flask jinja şablonuyla çalışmayanları barındırmak için uygulama çıktısını konsol ve JSON ile sınırladım.

Bu basit uygulama, tam teşekküllü bir web analizi aracına genişlemeye açıktır. Ek bilgi için aşağıdaki kaynakları göz önünde bulundurun:

Linux için En İyi Komut Satırı Oyunları
Komut satırı, Linux kullanırken yalnızca en büyük müttefikiniz değil, aynı zamanda eğlence kaynağı da olabilir, çünkü onu özel bir grafik kartı gerekt...
Linux için En İyi Gamepad Eşleme Uygulamaları
Tipik bir klavye ve fare giriş sistemi yerine bir gamepad ile Linux'ta oyun oynamayı seviyorsanız, sizin için bazı faydalı uygulamalar var. Çoğu PC oy...
Linux Oyuncuları için Faydalı Araçlar
Linux'ta oyun oynamayı seviyorsanız, oyun deneyimini geliştirmek için Wine, Lutris ve OBS Studio gibi uygulamaları ve yardımcı programları kullanmış o...