Skip to main content

用Python玩转北化OJ平台

项目描述

BUCTOJ 用Python玩转北化OJ平台

https://readthedocs.org/projects/buctoj/badge/?version=latest

将BUCT -OJ的一些功能封装成包,通过脚本提交代码等实现。

⚠ 翻译用于学习测试,不能特殊用途

⚠对于拥有日记的同学,应该有使用管理员管理号的觉悟,不会使用免做

主要供BUCTOJ管理员使用

主要功能

模拟登录

from BUCTOJ import login
cookies = login(用户名, 密码)

使用cookies中的会话即可以帐户身份进行操作

账号密码错误,则返回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(在BUCTOJ的提交页面中的languageid),也可以传参语言名。当语言名不受支持时会认为传递参数是languageid。

语言、id对照表:

语言

语言标识

C

0

C++

1

爪哇

3

Python

6

PHP

7

JavaScript

16

17

SQL

18

题中还原问题之前提交库地址问题“例如存在问题,撕笑的碎字毛毛”的为6264( https://buctoj.com/problem.php?id=6264 )

函数返回来自 BUCTOJ 的回应

新建问题

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, 你的用户名, 你的密码, 管理员用户名, 管理员密码)

作品

  1. 拥有一个管理员账号

  2. 道题有用C++通过者(非本次提交比赛也可)

功能

若满足以上两个条件,则此函数具有以下功能:

  1. 每题大约 15 秒通过

  2. 查重等级0

如果某次比赛题目中一些无人问津,则程序会跳过这道题继续提交下一道题

修改配置

修改域名

脚本的默认oj域名为“ https://buctcoder.com/

若非本域名的其他相同oj平台,则可以进行配置其他域名。

https://oj.letme.xyz/ ”采用的hustoj .,那么这个脚本可能也能利用oj.letme.xyz的电荷fly进行。

from BUCTOJ import Config
from BUCTOJ import login

Config.set_info("base_url", "https://oj.letmefly.xyz/")
cookies = login(0, 0)

目前支持“域名”这只是一个配置。

去做:

BUGFIX:脚本自动添加的头部会包含上C++的<bits/stdc++.h>头文件,这可能导致原本可以通过的代码生成错误(如int map;等)

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

BUCTOJ-0.2.2.tar.gz (12.1 kB 查看哈希

已上传 source

内置分布

BUCTOJ-0.2.2-py3-none-any.whl (14.6 kB 查看哈希

已上传 py3