此仓库是一个针对华清大学网络学堂的 Todoist 适配工具,用于解析网络学堂的课程列表和作业列表,并将其转换为 Todoist 任务。
项目基础
Todoist 是一款待办任务管理工具,其免费版提供的功能即与 MS To-Do 等工具相当。Todoist 面向开发者提供了 REST API,允许开发者通过 HTTP 请求与 Todoist 服务器进行交互;同时,Todoist 也提供了 Python SDK,方便开发者使用 Python 语言进行开发。
- Todoist 首页:https://todoist.com/
- Todoist REST API 文档:https://developer.todoist.com/rest/v2/
此仓库是一个针对华清大学网络学堂的非官方工具,用于解析网络学堂的课程列表和作业列表。该项目中 browser 模块提供了解析网络学堂的完整功能,可以用于获取课程列表、作业列表等信息。
./
├── README.md
├── README_en.md
├── README_ru.md
├── src/
│ ├── main.py # 入口
│ ├── thulearn2018/ # euxcet/thulearn2018 项目
│ │ ├── __init__.py
│ │ ├── browser.py
│ │ ├── filemanager.py
│ │ ├── jsonhelper.py
│ │ ├── learn.py
│ │ ├── settings.py
│ │ ├── soup.py
│ │ └── utils.py
│ └── todoApi/ # Todoist API 包装
│ ├── settings.py
│ ├── taskmanager.py
│ └── todoist_interfaces.py
└── packager/
├── with_console.ps1
└── without_console.ps1
Web-Learning-THU-Parser/
├── launchar.bat # 推荐启动入口,配置信息并添加定时任务
├── deleter.bat # 删除定时任务
├── with_console.exe # 带控制台的可执行文件
└── without_console.exe # 无控制台的可执行文件
with_console.exe 和 without_console.exe 均为 main.py 的打包文件,均可直接运行。对应的打包脚本分别为 packager/with_console.ps1 和 packager/without_console.ps1。
with_console.exe会打开控制台窗口,因此可以配置信息并查看运行日志。without_console.exe不会打开控制台窗口,因此无法查看运行日志,如果配置信息不全或有误将报错。
如果运行 without_console.exe 时报错,请尝试运行 with_console.exe,查看报错信息或补全配置信息。
launchar.bat 是一个批处理文件,将 without_console.exe 添加到 Windows 定时任务中,每 3 小时运行一次;同时,其会在添加定时任务后运行 with_console.exe,以进行信息配置。
双击运行 launchar.bat 时,会弹出窗口要求管理员权限,以将 without_console.exe 添加到 Windows 定时任务中,实现定时运行。
deleter.bat 是一个批处理文件,用于删除 Windows 定时任务中的 without_console.exe。
首先,您需要注册一个 Todoist 账号。您可以通过 Todoist 官网注册账号,或者下载 Todoist 客户端。
注:Todoist for Android 需要从 Google Play 商店下载。如果您无法访问 Google Play 商店,请尝试使用 Aurora Store,或者从 APKMirror 下载 Todoist 的 APK 文件。
您可以在本仓库的 Release 页面下载最新的 Release。只需下载 zip 文件,并解压到期望位置。请勿移动、删除或修改解压后文件夹中的任何文件。
在解压后的文件夹中,双击运行 launchar.bat。其会弹出窗口要求管理员权限,以将 without_console.exe 添加到 Windows 定时任务中,实现定时运行。
授予管理员权限后,with_console.exe 会打开控制台窗口,您可以根据提示输入 Todoist API Token、配置文件保存路径、网络学堂用户名和密码等信息。
本项目修改了 euxcet/thulearn2018 项目的部分代码,同时添加了大量 docstring 注释,可能会开发有所帮助;同时,本项目也添加了对 Todoist REST API 的封装,方便开发者使用。
本项目要求 Python 版本为:
- 3.7 以上,以支持新的 SSL 重协商特性。
- 3.9 及以下,以在 SSL 重协商中保证兼容性。
项目的开发测试环境为 Python 3.9.13。您可以使用 Anaconda 等工具,或者使用 pyenv(Windows 下 pyevn-win)等模块创建版本符合要求的虚拟环境。
您可以使用以下命令安装项目的依赖:
pip install -r requirements.txtthulearn2018/
`thulearn2018.settings`
本仓库 thulearn2018.settings 模块提供了 Settings 类,用于管理配置信息。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 初始化 | Settings.__init__ |
path: str,配置文件路径 |
None | 初始化 Settings 类 |
`thulearn2018.browser`
本仓库 thulearn2018.browser 模块集成了解析网络学堂的课程列表、作业列表等功能,提供了 Learn 类来实现这些功能。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 初始化 | Learn.__init__ |
settings: Settings 类实例 |
None | 初始化 Learn 类 |
| ^^ | ^^ | reset: bool,是否重新输入用户名和密码 |
^^ | ^^ |
| 用户管理 | Learn.set_user |
void | None | 设置网络学堂用户名和密码 |
| ^^ | Learn.get_user |
void | str | 获取当前用户名和密码 |
| 文件管理 | Learn.set_path |
void | None | 设置保存文件的路径 |
| ^^ | Learn.get_path |
void | str | 获取当前保存文件的路径 |
| ^^ | Learn.set_local |
void | None | 重置(清除)文件记录 |
| 网络连接管理 | Learn.login |
mode: str,登录模式 |
None | 使用用户名和密码登录平台 |
| 课程管理 | Learn.set_semester |
semester: str,学期 ID |
None | 设置当前学期 |
| ^^ | Learn.get_lessons |
exclude: list,排除的课程名列表 |
list | 获取当前学期的课程列表 |
| ^^ | ^^ | include: list,包含的课程名列表 |
^^ | ^^ |
| ^^ | Learn.init_lessons |
exclude: list,排除的课程名列表 |
list | 为课程创建目录 |
| ^^ | ^^ | include: list,包含的课程名列表 |
^^ | ^^ |
| 任务管理 | Learn.get_files_id |
lesson_id: str,课程 ID |
list | 获取课程的文件 ID 列表 |
| ^^ | Learn.file_id_exist |
fid: str,文件 ID |
bool | 检查文件 ID 是否存在于本地文件 |
| ^^ | Learn.save_file_id |
fid: str,文件 ID |
None | 将文件 ID 保存到本地文件 |
| ^^ | Learn.download_files |
lesson_id: str,课程 ID |
None | 下载课程的文件 |
| ^^ | ^^ | lesson_name: str,课程名 |
^^ | ^^ |
| ^^ | ^^ | file_id: str,文件 ID |
^^ | ^^ |
| ^^ | Learn.download_homework |
lesson_id: str,课程 ID |
list | 下载课程的作业 |
| ^^ | ^^ | lesson_name: str,课程名 |
^^ | ^^ |
| ^^ | ^^ | download_submission: bool,是否下载提交的作业 |
^^ | ^^ |
| ^^ | ^^ | download_files: bool,是否下载文件 |
^^ | ^^ |
| ^^ | Learn.upload |
homework_id: str,作业 ID |
None | 上传作业文件 |
| ^^ | ^^ | file_path: str,文件路径 |
^^ | ^^ |
| ^^ | ^^ | message: str,上传信息 |
^^ | ^^ |
| ^^ | Learn.get_ddl |
lessons: list,课程列表 |
list | 获取课程的作业截止日期列表 |
| ^^ | ^^ | download_submission: bool,是否下载提交的作业 |
^^ | ^^ |
| ^^ | ^^ | download_files: bool,是否下载文件 |
^^ | ^^ |
`thulearn2018.learn`
本仓库 thulearn2018.learn 模块提供了命令行接口(CLI),用于与华清大学网络学堂进行交互。该模块使用 click 库实现了多个命令,包括下载课程文件、重置配置、显示配置、清除下载记录、提交作业和显示作业截止日期。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 下载 | download |
exclude: str,排除的课程名列表 |
None | 下载指定课程和学期的所有课程文件 |
| ^^ | ^^ | include: str,包含的课程名列表 |
^^ | ^^ |
| ^^ | ^^ | semester: str,学期 ID |
^^ | ^^ |
| ^^ | ^^ | path: str,保存文件的路径 |
^^ | ^^ |
| ^^ | ^^ | download_submission: bool,是否下载提交的作业 |
^^ | ^^ |
| 重置 | reset |
void | None | 重置配置,如用户名和路径 |
| 显示配置 | config |
void | None | 显示当前配置,包括用户名和路径 |
| 清除记录 | clear |
semester: str,学期 ID |
None | 清除指定学期的所有下载记录 |
| 提交作业 | submit |
name: str,作业文件路径 |
None | 提交指定名称和信息的作业 |
| ^^ | ^^ | m: str,提交信息 |
^^ | ^^ |
| 显示截止日期 | ddl |
exclude: str,排除的课程名列表 |
None | 显示指定课程和学期的作业截止日期 |
| ^^ | ^^ | include: str,包含的课程名列表 |
^^ | ^^ |
| ^^ | ^^ | semester: str,学期 ID |
^^ | ^^ |
| ^^ | ^^ | path: str,保存作业文件的路径 |
^^ | ^^ |
| ^^ | ^^ | download_submission: bool,是否下载提交的作业 |
^^ | ^^ |
todoApi/
`todoApi.settings`
本仓库 todoApi.settings 模块提供了 Settings 类,用于管理 Todoist API 的配置信息。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 初始化 | Settings.__init__ |
config_dir: str,配置文件目录 |
None | 初始化 Settings 类 |
`todoApi.taskmanager`
本仓库 todoApi.taskmanager 模块提供了 TaskManager 类,用于管理 Todoist 中的项目、章节和任务。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 初始化 | TaskManager.__init__ |
settings: Settings 类实例 |
None | 初始化 TaskManager 类 |
| ^^ | ^^ | reset: bool,是否重置 Todoist 配置 |
^^ | ^^ |
| 项目管理 | TaskManager.project_setup |
semester: str,学期 ID |
None | 设置当前学期项目 |
| 章节管理 | TaskManager.section_setup |
project_id: str,项目 ID |
None | 初始化项目章节 |
| 课程管理 | TaskManager.init_courses |
courses: list,课程列表 |
None | 创建课程标签 |
| 任务管理 | TaskManager.update_assignments |
assignments: list[list],作业列表 |
None | 更新作业任务 |
`todoApi.todoist_interfaces`
本仓库 todoApi.todoist_interfaces 模块提供了 TodoistInterface 类,用于与 Todoist API 进行交互,管理项目、章节、任务和标签。
| 分类 | 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|---|
| 初始化 | TodoistInterface.__init__ |
settings: Settings 类实例 |
None | 初始化 TodoistInterface 类 |
| ^^ | ^^ | reset: bool,是否重置 Todoist 配置 |
^^ | ^^ |
| 项目管理 | TodoistInterface.get_projects |
void | list[Project] | 获取所有项目 |
| ^^ | TodoistInterface.get_project |
name: str,项目名称 |
Optional[Project] | 获取指定名称的项目 |
| ^^ | TodoistInterface.add_project |
name: str,项目名称 |
Optional[Project] | 添加指定名称的项目 |
| ^^ | TodoistInterface.favorite_project |
project_id: str,项目 ID |
bool | 收藏指定 ID 的项目 |
| 章节管理 | TodoistInterface.get_sections |
project_id: str,项目 ID |
list[Section] | 获取指定项目的所有章节 |
| ^^ | TodoistInterface.get_section |
project_id: str,项目 ID |
Optional[Section] | 获取指定项目中指定名称的章节 |
| ^^ | TodoistInterface.add_section |
project_id: str,项目 ID |
Optional[Section] | 添加指定名称的章节到指定项目 |
| 任务管理 | TodoistInterface.get_tasks |
project_id: str,项目 ID |
list[Task] | 获取指定项目的所有任务 |
| ^^ | ^^ | section_id: str,章节 ID |
^^ | ^^ |
| ^^ | ^^ | label: str,任务标签 |
^^ | ^^ |
| ^^ | TodoistInterface.get_task |
project_id: str,项目 ID |
Optional[Task] | 获取指定项目中指定标题的任务 |
| ^^ | ^^ | title: str,任务标题 |
^^ | ^^ |
| ^^ | ^^ | section_id: str,章节 ID |
^^ | ^^ |
| ^^ | ^^ | label: str,任务标签 |
^^ | ^^ |
| ^^ | TodoistInterface.add_task |
title: str,任务标题 |
Optional[Task] | 添加任务到指定项目 |
| ^^ | ^^ | project_id: str,项目 ID |
^^ | ^^ |
| ^^ | ^^ | section_id: str,章节 ID |
^^ | ^^ |
| ^^ | ^^ | labels: list[str],任务标签 |
^^ | ^^ |
| ^^ | ^^ | desc: str,任务描述 |
^^ | ^^ |
| ^^ | ^^ | **kwargs: 其他参数 |
^^ | ^^ |
| ^^ | TodoistInterface.update_task |
task_id: str,任务 ID |
bool | 更新指定 ID 的任务 |
| ^^ | ^^ | **kwargs: 其他参数 |
^^ | ^^ |
| ^^ | TodoistInterface.complete_task |
task_id: str,任务 ID |
bool | 完成指定 ID 的任务 |
| 标签管理 | TodoistInterface.get_personal_labels |
void | list[Label] | 获取所有个人标签 |
| ^^ | TodoistInterface.get_label |
name: str,标签名称 |
Optional[Label] | 获取指定名称的标签 |
| ^^ | TodoistInterface.add_label |
name: str,标签名称 |
Optional[Label] | 添加指定名称的标签 |
| ^^ | ^^ | color: str,标签颜色 |
^^ | ^^ |
