原 自建服务替代gitbook插件pageview-count中的https://hitcounter.pythonanywhere.com/count页面计数器服务
Tags: 原创gitbookpageview-count页面计数器
简介
配置gitbook项目,显示浏览记数,结果报错:
Access to XMLHttpRequest at 'https://hitcounter.pythonanywhere.com/count?url=http%253A%252F%252F192.16.7.162%253A51122%252Fscript_docs%252FDB2_dbhealthcheck.html%253Fq%253D' from origin 'http://192.16.7.162:51122' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
原因是 网站跨域请求禁止了,所以,我们可以使用Flask框架来实现一个简单的页面访问计数器功能,步骤如下:
步骤:
- 创建一个Flask应用: 使用Flask框架编写一个Python脚本,用于处理请求并返回页面访问次数。
- 存储页面访问次数: 可以使用内存中的字典或者数据库来根据请求的URL存储和增加访问次数。
- 部署Flask应用: 完成后,你可以将这个Flask应用部署到本地服务器或云服务器上。
数据存储在内存
安装python依赖包:
1 | pip3 install flask flask-cors |
新增app.py
程序:
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 | from flask import Flask, request, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app) # 允许所有跨域请求 # 存储页面访问次数的字典 page_views = {} @app.route('/count', methods=['GET']) def count(): # 获取请求的URL target_url = request.args.get('url') if not target_url: return jsonify("缺少URL参数"), 400 # 增加页面访问次数 if target_url in page_views: page_views[target_url] += 1 else: page_views[target_url] = 1 # 返回当前访问次数 return jsonify(page_views[target_url]) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) |
如何使用
将该脚本保存为
app.py
。运行该脚本来启动Flask服务:
python3 app.py
。在你的GitBook脚本中,将请求的URL更改为你服务器的IP或域名。
这样,每次用户访问GitBook页面时,都会向Flask服务器发送请求,并返回相应的页面访问次数。
测试代码
1 | curl http://192.16.7.162:5000/count?url=htttps://www.dbaup.com |
可以返回阅读记数。
1 2 3 4 5 6 7 8 9 10 11 | [root@alldb ~]# curl http://192.16.7.162:5000/count?url=htttps://www.baidu.com 1 [root@alldb ~]# curl http://192.16.7.162:5000/count?url=htttps://www.baidu.com 2 [root@alldb ~]# curl http://192.16.7.162:5000/count?url=htttps://www.dbaup.com 1 [root@alldb ~]# curl http://192.16.7.162:5000/count?url=htttps://www.dbaup.com 2 [root@alldb ~]# curl http://192.16.7.162:5000/count?url=htttps://www.dbaup.com 3 [root@alldb ~]# |
数据存储在磁盘文件中
为了使页面访问次数能够持久化,当Flask程序重启时不会丢失计数数据,可以将数据存储到磁盘文件中,例如使用JSON文件来存储页面访问次数。这样,程序每次启动时都会从文件加载数据,并在每次请求后更新文件。
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 | import json from flask import Flask, request, jsonify from flask_cors import CORS import os app = Flask(__name__) CORS(app) # 持久化文件路径 DATA_FILE = 'page_views.json' # 加载页面访问次数 def load_data(): if os.path.exists(DATA_FILE): with open(DATA_FILE, 'r') as f: return json.load(f) return {} # 保存页面访问次数 def save_data(data): with open(DATA_FILE, 'w') as f: json.dump(data, f) # 加载现有的访问次数 page_views = load_data() @app.route('/count', methods=['GET']) def count(): # 获取请求的URL target_url = request.args.get('url') if not target_url: return jsonify("缺少URL参数"), 400 # 增加页面访问次数 if target_url in page_views: page_views[target_url] += 1 else: page_views[target_url] = 1 # 将数据保存到文件 save_data(page_views) # 返回当前访问次数 return jsonify(page_views[target_url]) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) |