from flask import Flask, render_template, request, session, jsonify import urllib.request from pusher import Pusher from datetime import datetime import httpagentparser import json import os import hashlib from dbsetup import create_connection, create_session, update_or_create_page, select_all_sessions, select_all_user_visits, select_all_pages app = Flask(__name__) app.secret_key = os.urandom(24) # configure pusher object pusher = Pusher( app_id='PUSHER_APP_ID', key='PUSHER_APP_KEY', secret='PUSHER_APP_SECRET', cluster='PUSHER_APP_CLUSTER', ssl=True) database = "./pythonsqlite.db" conn = create_connection(database) c = conn.cursor() userOS = None userIP = None userCity = None userBrowser = None userCountry = None userContinent = None sessionID = None def main(): global conn, c def parseVisitor(data): update_or_create_page(c,data) pusher.trigger(u'pageview', u'new', { u'page': data[0], u'session': sessionID, u'ip': userIP }) pusher.trigger(u'numbers', u'update', { u'page': data[0], u'session': sessionID, u'ip': userIP }) @app.before_request def getAnalyticsData(): global userOS, userBrowser, userIP, userContinent, userCity, userCountry,sessionID userInfo = httpagentparser.detect(request.headers.get('User-Agent')) userOS = userInfo['platform']['name'] userBrowser = userInfo['browser']['name'] userIP = "72.229.28.185" if request.remote_addr == '127.0.0.1' else request.remote_addr api = "https://www.iplocate.io/api/lookup/" + userIP try: resp = urllib.request.urlopen(api) result = resp.read() result = json.loads(result.decode("utf-8")) userCountry = result["country"] userContinent = result["continent"] userCity = result["city"] except: print("Could not find: ", userIP) getSession() def getSession(): global sessionID time = datetime.now().replace(microsecond=0) if 'user' not in session: lines = (str(time)+userIP).encode('utf-8') session['user'] = hashlib.md5(lines).hexdigest() sessionID = session['user'] pusher.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(time), }) data = [userIP, userContinent, userCountry, userCity, userOS, userBrowser, sessionID, time] create_session(c,data) else: sessionID = session['user'] @app.route('/') def index(): data = ['home', sessionID, str(datetime.now().replace(microsecond=0))] parseVisitor(data) return render_template('index.html') @app.route('/about') def about(): data = ['about',sessionID, str(datetime.now().replace(microsecond=0))] parseVisitor(data) return render_template('about.html') @app.route('/dashboard') def dashboard(): return render_template('dashboard.html') @app.route('/dashboard/<session_id>', methods=['GET']) def sessionPages(session_id): result = select_all_user_visits(c,session_id) return render_template("dashboard-single.html",data=result) @app.route('/get-all-sessions') def get_all_sessions(): data = [] dbRows = select_all_sessions(c) for row in dbRows: data.append({ 'ip' : row['ip'], 'continent' : row['continent'], 'country' : row['country'], 'city' : row['city'], 'os' : row['os'], 'browser' : row['browser'], 'session' : row['session'], 'time' : row['created_at'] }) return jsonify(data) if __name__ == '__main__': main() app.run(debug=True)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.