1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import sqlite3, time, logging
from flask import Flask, request, render_template
from gevent import pywsgi
logging.basicConfig(
level=logging.DEBUG,
filename='log.txt',
filemode='a',
format='[%(asctime)s] %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logging.info("系统启动中...")
logging.info("程序版本:V1.0")
logging.info("编写日期:2023-06-26")
logging.info("编写者:LaoZhu")
# 数据库部分
try:
conn = sqlite3.connect('count.db')
c = conn.cursor()
c.execute(''' CREATE TABLE IF NOT EXISTS COUNT(
IP TEXT NOT NULL,
PATH TEXT NOT NULL,
DATE TEXT NOT NULL
);'''
)
except:
logging.error("数据库打开失败")
exit(0)
# WEB接口部分
app = Flask(__name__)
@app.route('/')
def html():
return "老猪的博客访问统计系统"
@app.route('/addCount', methods=["GET"])
def count():
#获取IP
ip = request.remote_addr
if(request.headers.get('X-Real-IP') != None):
ip = request.headers.get('X-Real-IP')
#获取路径
path = request.args.get("pathname")
if(path == ''):
path = None
#获取时间
date = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
#上传数据
try:
c.execute(
"INSERT INTO COUNT (IP, PATH, DATE) VALUES (?, ?, ?)",
[ip, path, date]
)
conn.commit()
logging.info(f"用户({ip})访问了 {path}")
return "数据上传成功"
except:
logging.warning(f"用户({ip})记录失败")
return "数据上传失败"
@app.route('/getCount', methods=["GET"])
def getCount():
#获取IP
ip = request.remote_addr
if(request.headers.get('X-Real-IP') != None):
ip = request.headers.get('X-Real-IP')
#获取路径
path = request.args.get("pathname")
if(path == ''):
path = None
#查找数据
try:
c.execute(
"SELECT COUNT(*) FROM (SELECT * FROM COUNT WHERE PATH = ? GROUP BY IP, STRFTIME('%Y-%m-%d', DATE))",
[path]
)
#按次数计数:SELECT COUNT(*) FROM COUNT WHERE PATH = ?
#按小时计数:SELECT COUNT(*) FROM (SELECT * FROM COUNT WHERE PATH = ? GROUP BY IP, STRFTIME('%Y-%m-%d %H', DATE))
#按每日计数:SELECT COUNT(*) FROM (SELECT * FROM COUNT WHERE PATH = ? GROUP BY IP, STRFTIME('%Y-%m-%d', DATE))
count = str(c.fetchone()[0])
logging.info(f"用户({ip})查询了 {path}")
return count
except:
logging.warning(f"用户({ip})查询失败")
return ""
logging.info('系统启动完成')
server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, log = None)
server.serve_forever()
|