用Python玩转北化OJ平台
Project description
BUCTOJ 用Python玩转北化OJ平台
将 BUCT-OJ 的一些功能封装成包,从而实现通过脚本提交代码等。
⚠ 仅供学习测试,不能用于特殊用途
⚠ 对于拥有管理员账号的同学,应该有自觉使用管理号的觉悟,不会用来免做题目
主要供BUCTOJ管理员使用
主要功能
模拟登录
from BUCTOJ import login cookies = login(用户名, 密码)
使用cookies中的session即可以账号身份进行操作
若账号密码错误,则返回cookie不可用
提交代码
from BUCTOJ import submit submit(比赛的cid,要提交问题的pid,你的cookie,要提交的代码)
上述方式会使用C++语言进行提交(目前仅支持C++)
进入比赛的某道题目后,地址栏的url中会有cid和pid。
例如 Contest2347 的 A 题,url为 https://buctcoder.com/problem.php?cid=2347&pid=0 ,因此此题目的cid为2374,pid为0
cookie是登录功能所获得的cookie。
通过id提交代码
from BUCTOJ import submitById, login
submit(login(账号,密码),题目id,代码,语言)
# response = submit(login('LetMeFly', 'SoHandsome'), '6264', """#include <bits/stdc++.h>\n...""", 'C++')
# response = submit(login('LetMeFly', 'SoHandsome'), '6264', """#include <bits/stdc++.h>\n...""", '1')
上述方式支持多种语言提交,可以传参languageid(对应的languageid在BUCTOJ的提交页面),也可传参语言名。当语言名不受支持时会认为传递的参数是languageid。
语言、id对照表:
语言 |
languageid |
|---|---|
C |
0 |
C++ |
1 |
Java |
3 |
Python |
6 |
PHP |
7 |
JavaScript |
16 |
Go |
17 |
SQL |
18 |
题库中的问题提交之前地址栏中会存在问题id,例如问题“还原撕碎的字条,哄笑生气的毛毛”的id为6264( https://buctoj.com/problem.php?id=6264 )
函数返回来自BUCTOJ的response
新建问题
from BUCTOJ import create1problem, login cookies = login(管理员用户名, 管理员密码) problem_id = create1problem(cookies=cookies, title="题目标题", description="题目描述", input="输入描述", output="输出描述", sample_input="1\n0", sample_output="0")
上述代码会使用管理员账号创建一道新的问题,并返回新建问题的id。
在BUCTOJ提供的新建题目的网页经常会出现编辑了很多之后提交失败的情况,使用此脚本提交可以先在本地编辑好之后一次提交成功。
编辑问题
from BUCTOJ import edit1problem, login cookies = login(管理员用户名, 管理员密码) edit1problem(cookies=cookies, problem_id="6080", title=...后面参考新建问题create1problem函数)
自动完成一个比赛
from BUCTOJ import finish1contest finish1contest(比赛cid, 你的用户名, 你的密码, 管理员用户名, 管理员密码)
前提:
拥有一个管理员账号
每道题都有用C++通过者(非本次比赛提交也可)
功能:
若满足以上两个条件,则此函数具有以下功能:
每隔大约15s通过一道题
查重率为0
若某次比赛中一些题目无人用C++通过,则程序会跳过此题继续提交下一题
下载某比赛/题目的所有提交/AC代码
from BUCTOJ import Config, login, saveAllCodes
cookies = login('账号', '密码')
saveAllCodes(baseurl='http://oj.narc.letmefly.xyz/status.php?cid=1269&jresult=4', cookies=cookies)
前提:
拥有一个管理员账号
功能:
若满足以上一个条件,则此函数具有以下功能:
获取baseurl的所有提交代码(会自动下一页)
以“{用户}-{提交编号}.java”命名保存到results文件夹下(若无则会自动创建)
TODO:
根据提交语音自动生成文件后缀,而非默认的.java
支持用户自定义文件夹名,而非默认的results
修改配置
修改域名
脚本的默认oj域名为”https://buctcoder.com/”
若非本域名的其他相同oj平台,则可以进行配置其他域名。
假如”https://oj.letmefly.xyz/”也是采用的 hustoj ,那么此脚本可能也能用来进行oj.letmefly.xyz的操纵。
from BUCTOJ import Config
from BUCTOJ import login
Config.set_info("base_url", "https://oj.letmefly.xyz/")
cookies = login(0, 0)
当前仅支持“域名”这一个配置。
TODO:
BUGFIX: 脚本自动添加的头部会include上C++的 <bits/stdc++.h> 头文件,这可能导致原本能通过的代码产生编译错误(如 int map; 等)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file BUCTOJ-0.3.4.tar.gz.
File metadata
- Download URL: BUCTOJ-0.3.4.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68aff4ba1be7d6d6a8b3402c83f9f508c29f6999b194bec558e096c31cb16daf
|
|
| MD5 |
45426554853ddf7716b10d6c53291cd4
|
|
| BLAKE2b-256 |
5aac958901cf2bb814a841d4316947afbe82a43ad5ba226029c9658b2e026c13
|
File details
Details for the file BUCTOJ-0.3.4-py3-none-any.whl.
File metadata
- Download URL: BUCTOJ-0.3.4-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d22eb20537cca1dbcaa16ea031add78042af52867936b8e82b63b56879f720cd
|
|
| MD5 |
b0d8ffed938cce856523a1b37c9f8d8b
|
|
| BLAKE2b-256 |
377548ff7e05eb09255819151beaf2be0724bc7800d39ac3be2ed2f549bd2d9c
|