MikuMonitoring: 一个简陋的比赛信息获取器
让 LLM 帮忙写的大部分代码。
也算是把 UOJ 系统的前端结构摸清了。
License
没有任何协议限制。你可以随意对此软件进行修改和分发,以及用于任何用途。
Features
--Version 1.0--
目前仅适用于 oj.daimayuan.top 。理论上可以快速适配到所有没有自定义密码加密规则的 UOJ 系 Online Judge。
- 通过账户和明文密码进行登录。
- 获取指定 ID 且登录账号拥有查看排名权限的多个比赛的排名信息。
- arena 功能:对比两名指定用户名的平均分等信息,计算 battle 胜率!
- (todo) export 功能:获取的比赛成绩导出为 Excel/CSV 。
- (todo) statistics 功能:查看自己的比赛情况统计,助你找到自己的心理弱点并制定更优秀的比赛策略。
- (todo) customRanking 功能:自定义用户列表和排序方法,关注你该关注的对手。
Relies
为了你的数据安全,请仅在本地使用 python3 运行代码。
运行前请检查你的环境变量和依赖库,如果缺少对应的库请使用 pip install 进行安装。
requests, pandas, re, json, hashlib, hmac, typing, bs4
Login
请按照提示输入用户名和密码。
密码使用 hmac-md5 加盐处理,salt 固定,理论上只在本地进行明文处理。
您需要在 login 页面的源代码获取本机的 salt 并在代码中进行更改。
作者承诺绝不以任何方式收集您的用户名与密码。您可以检查源代码来确保个人数据的安全性。
密码会在命令行中以明文方式显示,请确保没有其他人能够获取您的屏幕。
密码仅在运行时在内存中短暂存储,软件不会以任何方式在本地存储您的密码。
DaimayuanRankingScraper
用于爬取比赛数据。
scrape_contest(self, contest_id: int) -> List[Dict] : 爬取指定比赛ID的排行榜。
print_sample_data(self, rankings: List[Dict], count: int) : 对于一个排行榜数据输出指定数量的样本数据以便调试。
get_raw_data(self) -> List[Dict] : 保存原始数据列表。你可以通过修改代码访问这个列表来对数据做你想要的操作。
Arena
arena(rawData: List[Dict], userid1: str, userid2: str) -> Dict[str, Any] : 将两个用户进行对比。具体用法详见代码调用。

浙公网安备 33010602011771号