如果这个项目为你带来了便利,不妨给个 star ⭐ 支持一下~
pku3b 被用于以下开源项目:
如果您的开源项目用到了 pku3b,欢迎发起 PR 将你的项目添加到上述列表!
pku3b 是一个由 Rust 实现的小巧 (~10MB) 命令行工具,用于爬取北京大学教学网 (https://course.pku.edu.cn) 的信息。目前它可以
- 📋 查看课程作业信息(未完成/全部)
- 📂 下载课程作业附件
- 📤 提交课程作业
- 📅 查看个人课表
- 📢 查看课程公告(支持列表与按 ID 查看详情)
- 🎥 查看课程回放列表
- ⏯️ 下载课程回放(需要 ffmpeg)
- 🎓 快捷选课(你懂我什么意思吧)
- 📊 查看课程成绩
- 📱 Bark 通知推送(可选,用于选课成功通知)
- 🧑🏫 助教功能:查看批改组、批量下载作业、逐人登分
Tip
不想看使用教程?您可以在安装之后,使用以下 prompt 让您的 AI 工具学会使用 pku3b:
执行 `pku3b -h` 并对子命令执行 `pku3b help [args]` 命令,总结 `pku3b` 的所有用法
基本用法如下:
A tool for PKU students to check their courses.
Usage: pku3b [OPTIONS] [COMMAND]
Commands:
assignment 获取课程作业信息/下载附件/提交作业 [aliases: a]
course-content 获取课程内容 [aliases: cc]
coursetable 获取个人课表 [aliases: ct]
announcement 获取课程公告 [aliases: ann]
video 获取课程回放/下载课程回放 [aliases: v]
grades 查看课程成绩 [aliases: g]
ta 助教功能:查看批改组、下载作业、登分
syllabus 选课操作 [aliases: s]
ttshitu 图形验证码识别 [aliases: tt]
bark Bark通知设置 [aliases: b]
init (重新) 初始化用户名/密码
config 显示或修改配置项
cache 查看缓存大小/清除缓存
help Print this message or the help of the given subcommand(s)
Options:
--config <PATH> 配置文件路径 (优先级高于 PKU3B_CONFIG) [env: PKU3B_CONFIG=]
--cache-dir <PATH> 缓存目录路径 (优先级高于 PKU3B_CACHE_DIR) [env: PKU3B_CACHE_DIR=]
-h, --help Print help (see more with '--help')
-V, --version Print version
查看作业/下载附件:
查看/下载课程回放,支持断点续传 (10 倍速):
首先你需要安装 pku3b 本身。在安装完成后请重新开一个终端窗口,否则会找不到该命令。
这个安装方式在 Win/Linux/Mac 上均适用。
如果你的电脑上恰好有 rust 工具链,那么建议你使用 cargo 安装最新版本。如果需要更新,只需再次执行这个命令:
cargo install pku3b对于 Windows 系统,你可以在终端(Powershell/Terminal)执行命令来安装 pku3b。首先你可以执行以下命令来确保终端可以访问 Github。如果该命令输出 200,说明成功:
(Invoke-WebRequest -Uri "https://github.com/sshwy/pku3b" -Method Head).StatusCode为了保证你能够执行远程下载的批处理脚本,你需要暂时关闭【Windows 安全中心 > 病毒和威胁防护 > 管理设置 > 实时保护】,然后执行以下命令(直接复制全部文本粘贴至命令行)来安装指定版本的 pku3b (当前最新版 0.12.0):
Invoke-WebRequest `
-Uri "https://raw.githubusercontent.com/sshwy/pku3b/refs/heads/master/assets/windows_install.bat" `
-OutFile "$env:TEMP\script.bat"; `
Start-Process `
-FilePath "$env:TEMP\script.bat" `
-ArgumentList "0.12.0" `
-NoNewWindow -Wait安装过程大致如下:
Step 1: Downloading pku3b version 0.12.0...
Download complete.
Step 2: Extracting pku3b version 0.12.0...
Extraction complete.
Step 3: Moving pku3b.exe to C:\Users\Sshwy\AppData\Local\pku3b\bin...
移动了 1 个文件。
File moved to C:\Users\Sshwy\AppData\Local\pku3b\bin.
Step 4: Checking if C:\Users\Sshwy\AppData\Local\pku3b\bin is in the PATH variable...
C:\Users\Sshwy\AppData\Local\pku3b\bin is already in the PATH variable.
Installation complete!
请按任意键继续. . .你可以使用 Homebrew 安装 (你需要保证你的终端可以访问 Github):
brew install sshwy/tools/pku3b你可以从 Release 页面中找到你所使用的操作系统对应的版本,然后下载二进制文件,放到应该放的位置,然后设置系统的环境变量。你也可以不设置环境变量,而是直接通过文件路径来执行这个程序。
如果需要使用下载课程回放的功能,你需要额外安装 ffmpeg:
- 在 Windows 🖥️ 上推荐使用 winget 安装:
winget install ffmpeg。如果您艺高人胆大,也可以手动从官网上下载二进制文件安装,然后将ffmpeg命令加入系统环境变量。 - 在 MacOS 🍏 上可以使用 Homebrew 安装:
brew install ffmpeg; - 在 Linux 🐧 上使用发行版的包管理器安装(以 Ubuntu 为例):
apt install ffmpeg;
安装完成后请新开一个终端窗口,并执行 ffmpeg 命令检查是否安装成功(没有显示“找不到该命令”就说明安装成功)。
在首次执行命令前你需要登陆教学网。执行以下命令,根据提示输入教学网账号密码来完成初始化设置(只需要执行一次):
pku3b init完成初始化设置后即可使用该工具啦。如果之后想修改配置,可以使用 pku3b config -h 查看帮助。
默认情况下,pku3b init 会把配置写入系统的应用配置目录,后续命令也会从同一个默认位置读取配置。如果需要为不同账号、不同环境或临时测试使用另一份配置文件,可以使用全局参数 --config <PATH> 指定配置文件路径:
pku3b --config ./cfg.toml init
pku3b --config ./cfg.toml coursetable
pku3b --config ./cfg.toml config username也可以通过环境变量 PKU3B_CONFIG 指定默认配置文件路径:
PKU3B_CONFIG=./cfg.toml pku3b coursetable命令行参数 --config 的优先级高于环境变量 PKU3B_CONFIG。
默认情况下,pku3b 会把配置写入本地配置文件。若希望密码、TT 识图账号密码和 Bark token 不以明文形式保存在配置文件中,可以使用 keyring 后端,将敏感信息交给系统钥匙串/密钥环保存。
keyring 后端需要二进制在构建时启用 keyring feature。使用 cargo 安装时可以这样安装:
cargo install pku3b --features keyring初始化配置后,执行以下命令即可把敏感信息迁移到系统 keyring,并在配置文件中清空对应明文字段:
pku3b config secret-backend keyring之后正常使用 pku3b 即可。若需要恢复为明文配置文件存储,可以执行:
pku3b config secret-backend plaintext如果当前配置使用了 secret_backend = "keyring",但正在运行的 pku3b 没有启用 keyring feature,程序会提示需要使用支持 keyring 的构建。
pku3b 会把登录状态、接口缓存和课程回放下载过程中的临时分片保存到缓存目录中。默认缓存目录由操作系统决定;如果课程回放较大,或默认缓存目录所在磁盘空间不足,可以使用全局参数 --cache-dir <PATH> 指定新的缓存目录:
pku3b --cache-dir ./cache/pku3b cache show
pku3b --cache-dir /data/pku3b-cache video download <VIDEO_ID>也可以通过环境变量 PKU3B_CACHE_DIR 指定默认缓存目录:
PKU3B_CACHE_DIR=./cache/pku3b pku3b cache show命令行参数 --cache-dir 的优先级高于环境变量 PKU3B_CACHE_DIR。
如果你是课程助教,pku3b ta 系列命令可以帮助你管理批改流程。
pku3b ta group ls # 列出所有批改组及人数
pku3b ta group show <ID> # 查看某组成员pku3b ta hw ls # 列出作业及已评/未评/总人数
pku3b ta hw ls -g 1 # 按批改组筛选
pku3b ta hw ls -c _98207_1 # 跳过课程选择默认仅下载未评分、最新一次提交,自动重命名为 学号_姓名_原文件名。文件保存到系统 Downloads 文件夹。
pku3b ta hw down # 交互选择作业下载
pku3b ta hw down -g 1 # 只下载某组提交
pku3b ta hw down -g 1 -i 3 # 指定作业(编号见 ta hw ls)
pku3b ta hw down -g 1 -s _ID # 只下载某学生(不需 -g)
pku3b ta hw down -g 1 -a # 含已评分
pku3b ta hw down -g 1 -A # 所有历史提交
pku3b ta hw down -g 1 --no-rename # 保留原始文件名
pku3b ta hw down -g 1 --all-hw # 一键下载所有作业(有确认弹窗)支持三种模式。评分默认处理该学生的全部历史提交。
单人(-s 指定学号,-S 可选分数):
pku3b ta hw grade -c _98207_1 -s _ID -S 10 -i 3 # 直接打分
pku3b ta hw grade -c _98207_1 -s _ID -i 3 # 交互输分数批量(-S 不跟 -s,给组内全部待评分打统一分,有确认弹窗):
pku3b ta hw grade -g 1 -c _98207_1 -S 10 -i 3交互(逐个学生提示,q 跳过,e 退出):
pku3b ta hw grade -g 1 -c _98207_1 -i 3# 1. 查看批改组和作业
pku3b ta group ls
pku3b ta hw ls -g 1
# 2. 一键下载本组所有未评分作业
pku3b ta hw down -g 1 --all-hw -c _98207_1
# 3. 本地批改后登分
pku3b ta hw grade -g 1 -c _98207_1 # 交互
pku3b ta hw grade -c _98207_1 -s _ID -S 10 # 或单人直接打分
# 4. 确认评分状态
pku3b ta hw ls -g 1pku3b 支持通过 Bark 发送选课通知到 iPhone/iPad:
- 选课开始通知: 自动选课程序启动时发送
- 选课成功通知: 成功选上课程时发送
- 登录失败通知: 无法登录选课网时发送
- 选课循环中断通知: 选课过程中出现异常时发送
配置步骤:
- 在 App Store 下载 Bark 应用
- 获取你的 Bark 推送令牌
- 执行
pku3b bark init配置令牌 - 执行
pku3b bark test测试通知功能
注意:Bark 通知是完全可选的功能,不配置也不会影响选课程序的正常运行。
- 📋 查看未完成的作业列表:
pku3b a ls - 📋 查看全部作业列表:
pku3b a ls -a - 📂 下载作业附件:
pku3b a down <ID>: ID 请在作业列表中查看 - 📂 交互式下载作业附件:
pku3b a down: ID 请在作业列表中查看 - 📤 提交作业:
pku3b a sb <ID> <PATH>: PATH 为文件路径,可以是各种文件,例如 pdf、zip、txt 等等 - 📤 交互式提交作业:
pku3b a sb: 会在当前工作目录中寻找要提交的作业 - 📅 查看个人课表:
pku3b coursetable或pku3b ct - 📅 查看个人课表(原始JSON):
pku3b coursetable --raw - 📊 查看当前学期成绩:
pku3b grades或pku3b g - 📊 查看所有学期成绩:
pku3b grades --all-term - 📢 查看课程公告列表:
pku3b announcement ls - 📢 按 ID 查看公告详情:
pku3b announcement show <ID> - 🎥 查看课程回放列表:
pku3b v ls - 🎥 查看所有学期课程回放列表:
pku3b v ls --all-term - ⏯️ 下载课程回放:
pku3b v down <ID>: ID 请在课程回放列表中复制,该命令会将视频转换为 mp4 格式保存在执行命令时所在的目录下(如果要下载历史学期的课程回放,需要使用--all-term选项)。 - 📱 初始化 Bark 通知:
pku3b bark init或pku3b b init - 📱 测试 Bark 通知:
pku3b bark test或pku3b b test - 🧩 初始化 TT 识图账号密码:
pku3b ttshitu init - 🧩 测试 TT 识图配置是否成功:
pku3b ttshitu test - 📚 交互式选择课程并加入快捷选课列表:
pku3b s set - 📚 交互式移除快捷选课列表中的课程:
pku3b s unset - ⚙️ 查看快捷选课列表配置:
pku3b config - 🔁 启动快捷选课循环(如配置了 Bark 会自动发送通知):
pku3b s launch - 🧑🏫 列出批改组:
pku3b ta group ls - 🧑🏫 查看批改组成员:
pku3b ta group show <ID> - 🧑🏫 查看作业评分数:
pku3b ta hw ls - 🧑🏫 下载学生作业提交:
pku3b ta hw down - 🧑🏫 交互式登分:
pku3b ta hw grade - 🗑️ 查看缓存占用:
pku3b cache - 🗑️ 清空缓存:
pku3b cache clean - ❓ 查看某个命令的使用方法 (以下载课程回放的命令为例):
pku3b help v down - ⚙️ 输出调试日志:
- 在 Windows 上:设置终端环境变量(临时)
$env:RUST_LOG = 'info',那么在这个终端之后执行的 pku3b 命令都会输出调试日志。 - 在 Linux/Mac 上:同样可以设置终端环境变量
export RUST_LOG=info;另外一个方法是在执行 pku3b 的命令前面加上RUST_LOG=info,整个命令形如RUST_LOG=info pku3b [arguments...]
- 在 Windows 上:设置终端环境变量(临时)
众所周知 PKU 的教学网 UI 长得非常次时代,信息获取效率奇低。对此已有的解决方案是借助 PKU-Art 把 UI 变得赏心悦目一点。
但是如果你和我一样已经进入到早十起不来、签到不想管、不知道每天要上什么课也不想关心、对教学网眼不见为净的状态,那我猜你至少会关注作业的 DDL,或者期末的时候看看回放。于是 pku3b 应运而生。在开发项目的过程中又有了更多想法,于是功能就逐渐增加了。