| name | course |
| description | PKU Teaching Platform (北大教学网/Blackboard Learn) CLI tool built in Rust. Use this skill when working on the course crate, debugging course commands, adding features to the teaching platform CLI, or when the user mentions 教学网, Blackboard, course downloads, assignment submission, video downloads, or PKU teaching. Also use when dealing with HTML scraping via the scraper crate, Blackboard SSO callback, or multipart file uploads. **NOT for course schedule / 课表 / weekly timetable questions — for those use the `treehole` skill (`treehole course`), which is the canonical source and includes 辅修/双学位.** This `course` crate only deals with the Blackboard teaching platform (assignments, files, recordings, announcements). |
| version | 2.0.0 |
Course - 北大教学网 CLI
A CLI client for PKU's Blackboard Learn teaching platform.
Architecture
- Crate location:
crates/course/
- Auth flow: IAAA SSO (
app_id="blackboard") → Blackboard SSO endpoint callback
- API: HTML scraping with
scraper crate (no JSON API available)
- File upload: multipart form via reqwest
Key Source Files
src/main.rs — Clap CLI with subcommands
src/commands.rs — Command implementations
src/api.rs — HTML scraping logic, page parsers
src/display.rs — Terminal output formatting
src/client.rs — reqwest client builders
CLI Commands
| Command | Alias | Function |
|---|
login / logout / status | | IAAA → Blackboard auth |
courses | | List enrolled courses (supports --all for all semesters) |
info | | Course details |
content | | Browse course content tree |
assignments | | List assignments with deadlines |
assignment | | View single assignment |
browse | | Interactive course content browser |
assignment-download | adl | Download assignment attachments |
download | | Download course files |
video-download | vdl | Download course recordings |
videos | vls | List available videos |
submit | | Upload homework files |
otp | | TOTP 2FA management |
Auto-Login for AI Agents
info-auth check
course login -p
Development Notes
- HTML parsing is the primary data extraction method — no REST API
- Assignment list supports deadline-based sorting
- Video download handles replay/recording URLs
- All user-facing strings in Chinese
- Error handling:
anyhow::Result with .context("中文描述")
- Session persisted to
~/.config/info/course/
- Credentials resolved via
info_common::credential (keyring → env → interactive)