这是一个前后端分离的项目,前端使用Vue3,后端使用Python fastapi,数据库使用SQL lite。
利用牛客举办现场赛时,本系统可以自动分配气球派发任务给现场工作人员。
后端会实时爬取牛客网比赛的提交信息,根据设置的参赛名单,将过题的提交信息存储在数据库中。
前端登录账户后,可以接气球派发任务
,并且手滑可撤回;3分钟没有完成派发任务,任务会被系统自动收回,供其它工作人员领取。
启动后端(服务端)后,访问http://localhost:5173/
,即可访问前端页面。
现场赛时,端口映射出去,即可被手机访问。
直接在Release页面下载服务端
- 创建Python虚拟环境(可选,但推荐)
- 激活环境后,安装依赖:
pip install fastapi sqlalchemy pytest aiosqlite python-jose uvicorn python-multipart pyinstaller
- 确保电脑有node.js环境
- 进入本项目,运行
打包.bat
- release目录下就是构建的服务端
- 运行
数据库初始化.exe
,设置好管理员账户的用户名和密码 - 运行
main.exe
,启动服务端
也可以自定义配置,下面的完整的配置示例:
[server]
debug_mode = false
bind_host = 0.0.0.0
bind_port = 5173
[jwt]
secret_key = xxxxxxxxxxxxxxxxxxxxxxxx
algorithm = HS256
access_token_expire_minutes = 1440
大致流程:初始化数据库->填配置->添加参赛人员->创建工作人员账户->启动系统->封榜后停止系统
- 不修改配置的情况下,访问
http://localhost:5173/
,即可访问前端页面 - 登录后进入
管理员面板
,填写系统配置
-
比赛ID:对于比赛链接
https://ac.nowcoder.com/acm/contest/10000
,后面的10000
就是比赛ID。 -
比赛开始时间:比赛开始时间,格式为
YYYY-MM-DD HH:MM:SS
,例如2025-01-01 00:00:00
-
比赛结束时间:比赛结束时间,格式为
YYYY-MM-DD HH:MM:SS
,一般是填写封榜的时间,因为封榜后不发气球。 -
看榜时间间隔:爬取牛客网提交信息的时间间隔,单位为秒,例如
300
表示5分钟 -
任务超时时间:接一个任务后,如果超时这个时间会被系统强制收回供其他人接,单位为分钟,例如
5
表示5分钟 -
Cookies:
登录牛客竞赛后,打开F12后刷新页面
找到名称为比赛ID的项目,请求URL应该是
https://ac.nowcoder.com/acm/contest/xxxxx
的形式复制请求标头中的Cookies,确保复制完整不漏
注意:Cookies有时效性,每次重新登录账号或者隔了几天都要重新获取
-
- 点击
提交
,使服务器应用配置 - 在
参赛人员管理
中,添加参赛人员。可在Excel表格中编辑名单,复制粘贴到浏览器就是制表符分隔的数据。一定要注意格式,列不要搞错了! 导出的名单可直接粘贴到Excel表格中。 - 在
账户管理
中,为工作人员创建账户 - 比赛开始后,点击
系统配置
的启动系统
,爬虫就会开始运行并且自动爬取。 - 封榜后,等待3分钟,确保封榜前的提交信息已经爬取完毕,然后点击
系统配置
的停止系统
如果要做其它现场赛,把nowcoder_balloon_system.db
文件删除然后重新初始化数据库即可
本程序遵循 GPL-3.0-only许可证。
本程序仅供学习研究使用,严禁用于商业用途!
注意:由于GPL协议的强约束性,如果您将本项目的代码用于您的商业项目,会导致您商业项目的所有代码被迫全部以相同协议开源
本项目许可证的具体内容详见项目根目录下的LICENSE文件
您也可访问GNU的网站获取更多有关GPL许可证以及自由软件运动的相关信息
在github的issues页面发布您发现的BUG以及您的宝贵建议
如果您要联系我或询问问题,请发送邮件到我的邮箱:[email protected]