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] : 将两个用户进行对比。具体用法详见代码调用。

Code

here

posted @ 2025-11-04 16:21  aaaaaaqqqqqq  阅读(38)  评论(0)    收藏  举报