编辑
2025-11-28
XCPC
00
请注意,本文编写于 51 天前,最后修改于 43 天前,其中某些信息可能已经过时。

目录

下载
在 icpc-award-tracker-tool 目录下创建文件.env
启动,生成奖项
执行get-photo脚本,获取比赛数据和用户数据头像。
在 resolver 目录里面执行滚榜
滚榜时的中文乱码问题
联系方式

先去官网下载源码,https://tools.icpc.global/

滚榜的部分只需要 resolver 就行了,记得下载稳定版。

如果你在使用该项目时出现错误,请务必和我一样的 resolver 和 domjudge 版本,我的 domjudge 使用的是 8.3.1,参考 http://blog.zymusic.top/post/36 里的docker-compose。

注意

此项目只针对 domjudge 使用,其他 oj 滚榜不可使用。

请在 domjudge 部署后将配置这里的 Data source 切换为 external,因为据说不切换会有很多锅?(因为数据库里面有自己的自增的整数主键 id 值,然而我们在导入用户信息的 id 却是手动设置的(而且一般都是字符串),如果我们想使用自己设置的 id,应该是对应 external id (我猜测的,如果 id 不对,那这个项目肯定就会出问题了)) ![image.png](https://blog.zymusic.top/static/img/993e7f5d3eb4eae994a0c9a5c8dd54cb.image.webp

image.png

下载

sh
git clone https://gitee.com/ai-ziming/icpc-award-tracker-tool.git cd icpc-award-tracker-tool sudo apt install npm -y npm install

在 icpc-award-tracker-tool 目录下创建文件.env

由于数据来源是直接查询数据库的,所以需要配置 mysql 连接信息。

DB_HOST=192.168.88.134 # 数据库地址 DB_PORT=13306 # 数据库端口 DB_USER=root # 数据库用户 DB_PASSWORD=123456 # 数据库密码 DB_NAME=domjudge # 数据库名称 PORT=3000 # 应用程序端口

这里的配置一定要提前修改好,如果你不知道账号密码端口,请查看你部署 domjudge 时的配置信息文件。

注意:由于此项目会查询 domjudge 的数据库,请不要在比赛期间频繁使用这个项目,防止对比赛的数据库造成压力,应该等比赛结束之后再来访问,因为我们的目的只是设置奖项。

如果你的项目部署在公网服务器上,请开放对应的端口(这里的 13306 给你的源 ip,或者对所有源开放(不推荐)),如果你不开放,即使数据库配置信息正确也连接不上。

启动,生成奖项

然后就可以启动了

sh
npm run dev

访问 http://localhost:3000

image.png

上面可以筛选指定的学校和分类

image.png

目前我筛选了华中农业大学的队伍,然后为华中农业大学所有队伍生成 1-3-5 的奖项,奖项的描述可以自己设定,注意逗号和冒号使用英文符号而不是中文符号。

image.png

如果你想过滤掉打星队伍,在分类里面筛选一下即可。

同时,可以为所勾选的指定队伍列表设置自定义奖项。

image.png

点击为选中队伍创建奖项,即可生成。 image.png

可以在这里预览所生成的所有奖项,防止出错。

image.png

然后点击导出下载即可,得到的是 json 格式数据,请不要随意格式化或者修改数据格式,不要随意换行,因为 resolver 读取某个信息的时候是逐行读取的。

image.png

这里有用的信息其实就三个,type 为 awards,告诉 resolver 说这是一个奖项,id 是奖项的 id,从一个大数据开始不断往后面加 11 即可,citation 是你自己设置的奖项描述

执行get-photo脚本,获取比赛数据和用户数据头像。

sh
chmod +x get-photo.sh sudo apt install jq -y ./get-photo.sh 192.168.88.134 2bNx8Wn9OA5horS8_5-Wju test

这个脚本需要三个参数,第一个是 domjudge 的 ip 地址或者域名,第二个是 admin 用户的密码,第三个是比赛id。 比赛 id 是这里的 external ID

然后你就获得了比赛的信息,位于 my-contest 目录,包括队伍和学校的头像。

如果结果错误,下载不到数据,可能是 jq 版本不同导致的(我的版本是 1-6) image.png

然后需要修改这里的 event-feed.json,把刚才导出奖项的 json 格式数据加到这个 event-feed 里面。

按 ctrl+f 搜索,删除一些不需要的奖项(因为 domjudge 会默认给我们生成一些奖项,比如一血,冠军之类的,他生成的默认奖项我们只保留一血奖就行,其他奖项统统删除,然后再把我们项目刚才生成的 json 数据直接复制到 event-feed 里面即可) image.png

注意这里是一对大括号对应一行数据,不要删错了。

这里我只保留了原来的一血。 image.png

然后把刚才生成的 json 数据直接复制过来即可。

image.png

然后就可以滚榜了,我是在 Windows下面滚的。所以你需要把这个 my-contest 目录传到你的 Windows 系统中,如果你用的是 wsl,那更好,可以直接使用了。

在 resolver 目录里面执行滚榜

bat
.\resolver.bat <my-contest所在的目录> --display_name “{org.formal_name}-{team.name}” --singleStep 25

这里的 2525 表示,前 2525 名的每一次提交由自己手动揭晓,后 2525名的系统自动揭晓。

updata

新加了荣誉奖设置功能,可以和刚的 25 设置为一样的数,这样荣誉奖后面的队伍由系统滚,前面的所有队伍都由自己控制了。(这里 25 表示总榜的 25 名之后的队伍为荣誉奖,包括打星(不过打星好像按理不算荣誉奖?不管了,反正也不发东西,足以满足校赛的需求了)) image.png

如果你想设置滚榜系统的默认头像,只需要在 my-contest 目录下面新建目录 contest,在 contest 目录下面放一个 logo.png 即可。

滚榜时的中文乱码问题

需要使用 7z 解压器打开 jar 文件,下载地址 https://www.7-zip.org/

然后在 7z 解压器打开 resolver 的 lib 目录下的 presentation.jar。

image.png

进入 font 目录, image.png

这里的 Helvetica-Plain.ttf 就是识别字体的文件,你需要把他删除(因为官网的字体是英文的,然后选择你喜欢的一款中文字体,把文件拖拽进来并重命名为 Helvetica-Plain.ttf ) image.png

中文字体的下载,可以直接在 c 盘中搜索 font ,然后选择一款即可,

image.png

image.png

联系方式

如果还有问题,可以联系 QQ:3051863421。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay