feat(platforms): 增加能力推导与 /api/platforms capabilities 字段
新增 platforms/contract.py:生命周期 ↔ 槽位 ↔ 能力名映射,capabilities_of 按非空槽位推导;Platform.capabilities() 供 /api/platforms 返回 capabilities。行为不变,现有流程与前端未改。同步 architecture.md(生命周期与能力、广东公需课)、todo 第二/三步、OPTIMIZATION 平台列表。
This commit is contained in:
+24
-2
@@ -72,6 +72,7 @@ class Platform:
|
||||
discover: Callable # (session, plan_id, project_id, name) -> 课程描述
|
||||
renew_session: Callable # (session) -> bool,无密码续期
|
||||
profile: Callable # (session) -> 显示名
|
||||
# 槽位为 None = 该平台没有这项能力;capabilities() 按非空槽位推导
|
||||
```
|
||||
|
||||
`registry.detect(url, html)` 按 `entries` 命中平台;「添加账号」时选择的平台写进
|
||||
@@ -82,6 +83,21 @@ class Platform:
|
||||
`opts` 固定包含:`workers / cap / enable_quiz / enable_feedback / mode / parallel /
|
||||
quiz_key / cookies / plan / project / name`。插件可以只取自己需要的。
|
||||
|
||||
### 生命周期与能力
|
||||
|
||||
阶段与槽位对应,缺的阶段不实现即可(不要抛 `NotImplementedError`):
|
||||
|
||||
- 登录 / 会话:`login`、`session`、`renew_session`、`profile`
|
||||
- 查询课程:`list_courses`
|
||||
- 课程详情:`discover`
|
||||
- 学习:`study`
|
||||
- 测验:暂未进契约(`quiz.py` 仍是莞易学专用),下沉为平台能力后再加 `quiz`
|
||||
|
||||
`Platform.capabilities()` 按非空槽位推导能力名(映射见 `platforms/contract.py`):
|
||||
`login` / `session` / `renew` / `profile` / `courses` / `discover` / `study`。
|
||||
`GET /api/platforms` 一并返回 `capabilities`,前端据此决定显示哪些按钮。
|
||||
流程顺序只有一个实现(引擎),插件只负责单步。
|
||||
|
||||
### 内置:莞易学
|
||||
|
||||
`jspx.dgjy.net`(登录入口)和 `study.dgjy.net`(学习入口)是同一个平台,统一注册为
|
||||
@@ -94,6 +110,12 @@ quiz_key / cookies / plan / project / name`。插件可以只取自己需要的
|
||||
- `platforms/guanyixue.py`:注册平台并按 `course["generation"]` 分发;
|
||||
`platforms/detect.py` 只判断页面代际,不判断平台归属。
|
||||
|
||||
### 内置:广东公需课
|
||||
|
||||
`id=gdgxk`,`platforms/gdgxk.py` 单文件实现:在 `jsglpt.gds.edu.cn` 登录(账号、密码
|
||||
都是 base64),再用 `ssoItlmsGxkTicket.action` 换票进 `jsxx.gds.edu.cn`;视频按真实
|
||||
流逝时间上报 `updateViewTime1`。没有测验 / 反馈表,所以不实现对应能力。
|
||||
|
||||
### 新增一个平台
|
||||
|
||||
1. 新建 `src/study_tool/platforms/<名字>.py`:
|
||||
@@ -120,8 +142,8 @@ quiz_key / cookies / plan / project / name`。插件可以只取自己需要的
|
||||
3. 平台注册后会自动出现在「添加账号」的平台下拉框;账号选了该平台,登录 / 刷新课程 /
|
||||
发现课程 / 学习都走它的实现,不需要改路由或前端。
|
||||
|
||||
现阶段登录与课程发现由莞易学模块承担(SSO 只有一套);`accounts.platform` 已经是平台分发的
|
||||
依据,接入第二个平台时在 `platforms/<平台>.py` 里实现上面的入口即可。
|
||||
已内置莞易学(`guanyixue`)和广东公需课(`gdgxk`);`accounts.platform` 是平台分发依据,
|
||||
接入新平台只需在 `platforms/<平台>.py` 实现对应阶段的槽位,引擎与路由不用改。
|
||||
|
||||
## 前端
|
||||
|
||||
|
||||
Reference in New Issue
Block a user