feat: 添加账号支持选择学习平台
账号新增 platform 字段,登录/刷新课程/发现课程按平台分发;同时把 JS 脚本收进 script/(目录规范调整)。
This commit is contained in:
@@ -26,6 +26,14 @@ class Platform:
|
||||
label: str # 日志 / 界面里的展示名
|
||||
study: Optional[Callable] = None # 学一门课;None = 这个平台还没实现
|
||||
entries: tuple = () # 登录 / 学习入口 URL 片段,用于识别平台
|
||||
# 账号级能力:添加账号时选了哪个平台,登录 / 发现 / 刷新课程就走哪个平台的实现
|
||||
session: Optional[Callable] = None # (cookies) -> requests.Session
|
||||
dump_cookies: Optional[Callable] = None # (session) -> [cookie]
|
||||
login: Optional[Callable] = None # (username, password) -> (session, user)
|
||||
list_courses: Optional[Callable] = None # (session) -> [course]
|
||||
discover: Optional[Callable] = None # (session, plan_id, project_id, name) -> 课程描述
|
||||
renew_session: Optional[Callable] = None # (session) -> bool,无密码续期
|
||||
profile: Optional[Callable] = None # (session) -> 显示名
|
||||
|
||||
def matches(self, url="", html=""):
|
||||
"""登录入口或学习入口命中任意片段,就认为页面属于本平台。"""
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
"""莞易学平台:jspx.dgjy.net(登录入口)与 study.dgjy.net(学习入口)是同一个平台。
|
||||
|
||||
课程页有两代前端,`discover` 会把代际写进 `course["generation"]`(legacy / spa),
|
||||
这里按代际分发到对应的学习实现。新增其他平台时,照本文件写一个模块:
|
||||
在 `Platform.entries` 声明登录 / 学习入口,注册表就能按入口识别平台。
|
||||
账号在「添加账号」里选择平台(`accounts.platform`),登录 / 刷新课程 / 发现课程都会
|
||||
走这里的 `login` / `list_courses` / `discover`;学习时 `discover` 会把页面代际写进
|
||||
`course["generation"]`(legacy / spa),由 `_study` 分发到对应实现。
|
||||
新增其他平台时,照本文件写一个模块并在 `Platform.entries` 声明登录 / 学习入口。
|
||||
"""
|
||||
from study_tool.platforms import jspx, registry, study
|
||||
from study_tool.platforms.base import Platform
|
||||
@@ -13,10 +14,19 @@ LABEL = "莞易学"
|
||||
ENTRIES = ("jspx.dgjy.net", "study.dgjy.net", "dgjy.net")
|
||||
|
||||
|
||||
def _profile(s):
|
||||
return jspx.whoami(jspx.fetch_admin(s))
|
||||
|
||||
|
||||
def _study(key, s, d, **opts):
|
||||
if d.get("generation") == "spa":
|
||||
return study._study(key, s, d, **opts)
|
||||
return jspx._study(key, s, d, **opts)
|
||||
|
||||
|
||||
PLATFORM = registry.register(Platform(id=ID, label=LABEL, study=_study, entries=ENTRIES))
|
||||
PLATFORM = registry.register(Platform(
|
||||
id=ID, label=LABEL, study=_study, entries=ENTRIES,
|
||||
session=jspx.new_session, dump_cookies=jspx.dump_cookies,
|
||||
login=jspx.login, list_courses=jspx.scrape_courses, discover=jspx.discover,
|
||||
renew_session=jspx.ensure_jspx_session, profile=_profile,
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user