Skip to content

Commit 64ab1cc

Browse files
committed
update README
1 parent 2f6447f commit 64ab1cc

File tree

3 files changed

+86
-83
lines changed

3 files changed

+86
-83
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
build
2-
dist
2+
dist

README.md

Lines changed: 78 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,123 @@
1-
# [国家中小学智慧教育平台](https://basic.smartedu.cn/tchMaterial/) 电子课本下载工具
1+
# [国家中小学智慧教育平台](https://basic.smartedu.cn/tchMaterial/) 电子课本下载工具
22

33
![Python Version](https://img.shields.io/badge/Python-3.x-blue.svg)
44
![License](https://img.shields.io/badge/License-MIT-green.svg)
55
![Made With Love❤️](https://img.shields.io/badge/Made_With-%E2%9D%A4-red.svg)
66

7-
本工具可以帮助您从 **[国家中小学智慧教育平台](https://basic.smartedu.cn/tchMaterial/)** 获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。
7+
> [!TIP]
8+
> 🚀最新版本 v3.0 现已发布,欢迎体验!
89
9-
📢 **⚠️ 重要更新(2025年3月)**
10-
**2025 年 02 月** 起,国家中小学智慧教育平台 **需要登录** 才能访问电子课本资源,用户需提供 **Access Token** 才可正常下载。
10+
本工具可以帮助您从[**国家中小学智慧教育平台**](https://basic.smartedu.cn/tchMaterial/)获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。
1111

12-
👉 **请先按照下方指南设置 Access Token**,否则程序将无法解析资源!
12+
> [!CAUTION]
13+
>
14+
> **2025 年 2 月**起,国家中小学智慧教育平台**需要登录**才能访问电子课本资源,用户需提供 **Access Token**(即登录凭据)才可正常使用本工具的下载功能。
15+
>
16+
> **👉请先按照[下方指南](#2-设置-access-token)设置 Access Token,否则程序将无法解析资源!**
1317
14-
---
18+
## ✨工具特点
1519

16-
## ✨ 工具特点
20+
- **支持 Access Token 登录**🔑:支持用户手动输入 Access Token,在 Windows 操作系统下会存入注册表,下次启动可自动加载。
21+
- **支持批量下载**📚:一次输入多个电子课本预览页面网址,即可批量下载 PDF 课本文件。
22+
- **自动文件命名**📂:程序会自动使用教材名称作为文件名,方便管理下载的课本文件。
23+
- **高 DPI 适配**🖥️:优化 UI 以适配高分辨率屏幕,避免界面模糊问题。
24+
- **下载进度可视化**📊:实时显示下载进度,支持暂停/恢复操作。
25+
- **跨平台支持**💻:支持 Windows、Linux、macOS 等操作系统(需要图形界面)。
1726

18-
- **支持 Access Token 登录** 🔑:支持用户手动输入 Access Token,并存储在本地(Windows 版存入注册表),下次启动可自动加载。
19-
- **支持批量下载** 📚:一次输入多个电子课本预览页面网址,即可批量下载 PDF 课本文件。
20-
- **自动文件命名** 📂:程序会自动使用教材名称作为文件名,方便管理下载的课本文件。
21-
- **高DPI适配** 🖥️:优化 UI 以适配高分辨率屏幕,避免界面模糊问题。
22-
- **下载进度可视化** 📊:实时显示下载进度,支持暂停/恢复操作。
23-
- **跨平台支持** 💻:支持 Windows、Linux、macOS(需图形界面)。
27+
![程序截图](./res/PixPin_2025-03-14_23-44-26.png)
2428

25-
---
29+
## ⬇️下载与安装方法
2630

27-
## 🔑 获取 Access Token(必需)
31+
### GitHub Releases 页面
2832

29-
1. **打开浏览器**,访问 [国家中小学智慧教育平台](https://auth.smartedu.cn/uias/login)**登录账号**
30-
2.**F12****Ctrl+Shift+I** 打开 **开发者工具**,选择 **控制台(Console)**
31-
3. 在控制台粘贴以下代码后回车(Enter):
33+
由于我们的精力有限,本项目的 [GitHub Releases 页面](https://github.com/happycola233/tchMaterial-parser/releases)**仅会发布适用于 Windows 与 Linux 操作系统的 x64 架构**的程序。
3234

33-
```javascript
34-
(function() {
35-
let authKey = Object.keys(localStorage).find(key => key.includes("ND_UC_AUTH"));
36-
if (!authKey) {
37-
console.error("未找到 Access Token,请确保已登录!");
38-
return;
39-
}
40-
let tokenData = JSON.parse(localStorage.getItem(authKey));
41-
let accessToken = JSON.parse(tokenData.value).access_token;
42-
console.log("%cAccess Token: ", "color: green; font-weight: bold", accessToken);
43-
})();
44-
```
45-
4. 复制控制台输出的 **Access Token**,然后在本程序中点击 **“设置 Token”** 按钮,粘贴并保存 Token。
35+
在下载完成之后,即可运行本程序,不需要额外的安装步骤。
4636

47-
🚨 **注意**:Access Token 可能会过期,若下载失败提示 **401 Unauthorized**,请重新获取并设置新的 Token。
37+
### Arch 用户软件仓库(AUR)
4838

49-
---
39+
对于 **Arch Linux** 操作系统,本程序已发布至[Arch 用户软件仓库](https://aur.archlinux.org/packages/tchmaterial-parser),因此您还可以通过在终端中输入以下命令安装:
5040

51-
## 🛠️ 使用方法
41+
```sh
42+
yay -S tchmaterial-parser
43+
```
5244

53-
1. **输入教材链接** 📥
54-
- 将电子课本的 **预览页面网址** 粘贴到程序文本框中,支持多个 URL(每行一个)。
55-
- **示例网址**
56-
```
57-
https://basic.smartedu.cn/tchMaterial/detail?contentType=assets_document&contentId=XXXXXX&catalogType=tchMaterial&subCatalog=tchMaterial
58-
```
45+
感谢 @iamzhz 制作了本工具的发行包(#26)!
5946

60-
2. **设置 Access Token** 🔑
61-
- 若是第一次使用,需点击 **“设置 Token”** 按钮,粘贴 Access Token 并保存。
47+
## 🛠️使用方法
6248

63-
3. **开始下载** 🚀
64-
- 点击 **“下载”** 按钮,程序将自动解析并下载 PDF 课本。
65-
- 支持 **批量下载**,所有 PDF 文件会自动按课本名称命名并保存在选定目录中。
49+
### 1. 输入教材链接📥
6650

67-
---
51+
将电子课本的**预览页面网址**粘贴到程序文本框中,支持多个 URL(每行一个)。
6852

69-
## 📸 截图
53+
**示例网址**
7054

71-
![程序截图](./res/PixPin_2025-03-14_23-44-26.png)
55+
```text
56+
https://basic.smartedu.cn/tchMaterial/detail?contentType=assets_document&contentId=XXXXXX&catalogType=tchMaterial&subCatalog=tchMaterial
57+
```
7258

73-
---
59+
### 2. 设置 Access Token🔑
7460

75-
## ❓ 常见问题
61+
若是第一次使用,需点击 “**设置 Token**” 按钮,粘贴 Access Token 并保存。
7662

77-
### 1. **为什么下载失败?** ⚠️
63+
1. **打开浏览器**,访问[国家中小学智慧教育平台](https://auth.smartedu.cn/uias/login)**登录账号**
64+
2. 按下 **F12****Ctrl+Shift+I**,或右键——检查(审查元素)打开**开发者工具**,选择**控制台(Console)**
65+
3. 在控制台粘贴以下代码后回车(Enter):
7866

79-
- **检查是否已正确设置 Access Token** 🔑。
80-
- **确认网络连接是否正常** 🌐,有时网络不稳定可能导致下载失败。
81-
- **确保输入的网址有效** 🔗,部分旧资源可能已被移除。
82-
- **Token 过期**:点击下载后,若程序提示 Token 过期,请重新获取 Token 并更新。
67+
```js
68+
(function() {
69+
const authKey = Object.keys(localStorage).find(key => key.startsWith("ND_UC_AUTH"));
70+
if (!authKey) {
71+
console.error("未找到 Access Token,请确保已登录!");
72+
return;
73+
}
74+
const tokenData = JSON.parse(localStorage.getItem(authKey));
75+
const accessToken = JSON.parse(tokenData.value).access_token;
76+
console.log("%cAccess Token: ", "color: green; font-weight: bold", accessToken);
77+
})();
78+
```
79+
80+
4. 复制控制台输出的 **Access Token**,然后在本程序中点击 “**设置 Token**” 按钮,粘贴并保存 Token。
8381

84-
### 2. **Access Token 保存在哪里?** 💾
82+
> [!CAUTION]
83+
> Access Token 可能会过期,若下载失败提示 **401 Unauthorized**,请重新获取并设置新的 Token。
8584
86-
- **Windows 版**:Token 会存入 **注册表**(`HKEY_CURRENT_USER\Software\tchMaterial-parser`)。
87-
- **Linux/macOS 版**:Token 仅存于内存,不会自动保存,程序重启后需重新输入。
85+
### 3. 开始下载🚀
8886

89-
### 3. **Token 会不会泄露?** 🔐
87+
点击 “**下载**” 按钮,程序将自动解析并下载 PDF 课本。
9088

91-
- 本程序 **不会上传** Token,也不会存储在云端,仅用于本地请求授权。
92-
- **请勿在公开场合分享 Token**,以免账号被他人使用。
89+
本工具支持**批量下载**,所有 PDF 文件会自动按课本名称命名并保存在选定目录中。
9390

94-
---
91+
## ❓常见问题
9592

96-
## ⭐ Star History
93+
### 1. 为什么下载失败?⚠️
9794

98-
[![Star History Chart](https://api.star-history.com/svg?repos=happycola233/tchMaterial-parser&type=Date)](https://star-history.com/#happycola233/tchMaterial-parser&Date)
95+
- 检查是否已[**正确设置 Access Token**](#2-设置-access-token)🔑,且没有过期。
96+
- **确认网络连接是否正常**🌐,有时网络不稳定可能导致下载失败。
97+
- **确保输入的网址有效**🔗,部分旧资源可能已被移除。
9998

100-
---
99+
### 2. Access Token 保存在哪里?💾
101100

102-
## 🤝 贡献指南
101+
- **Windows 操作系统**:Token 会存储在**注册表** `HKEY_CURRENT_USER\Software\tchMaterial-parser` 项中的 `AccessToken` 值。
102+
- **Linux/macOS 等操作系统**:Token 仅在运行时临时存储于内存,不会自动保存,程序重启后需重新输入,目前我们正在努力改进该功能。
103103

104-
如果您发现 Bug 或有改进建议,欢迎提交 **Issue** 或 **Pull Request**,让我们一起完善本工具!
104+
### 3. Token 会不会泄露?🔐
105105

106-
---
106+
- 本程序**不会上传** Token,也不会存储在云端,仅用于本地请求授权。
107+
- **请勿在公开场合分享 Token**,以免您的账号被他人使用,造成严重后果。
107108

108-
## 📜 许可证
109+
## ⭐Star History
110+
111+
[![Star History Chart](https://api.star-history.com/svg?repos=happycola233/tchMaterial-parser&type=Date)](https://star-history.com/#happycola233/tchMaterial-parser&Date)
109112

110-
本项目基于 [MIT License](LICENSE) 许可证,欢迎自由使用和二次开发。
113+
## 🤝贡献指南
111114

112-
---
115+
如果您发现 Bug 或有改进建议,欢迎提交 **Issue****Pull Request**,让我们一起完善本工具!
113116

114-
## 💌 友情链接
117+
## 📜许可证
115118

116-
📚 您也可以在 [ChinaTextbook](https://github.com/TapXWorld/ChinaTextbook) 项目中下载归档的教材 PDF。
119+
本项目基于 [MIT 许可证](LICENSE),欢迎自由使用和二次开发。
117120

118-
---
121+
## 💌友情链接
119122

120-
🚀 **最新版本 v3.0 现已发布,欢迎体验!**
123+
- 📚您也可以在 [ChinaTextbook](https://github.com/TapXWorld/ChinaTextbook) 项目中下载归档的教材 PDF。

src/tchMaterial-parser.pyw

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ from tkinter import ttk, messagebox, filedialog
1010
import os, platform
1111
from functools import partial
1212
import base64, tempfile
13-
import threading, requests, pyperclip, psutil
13+
import threading, requests, psutil
1414

1515
os_name = platform.system() # 获取操作系统类型
1616
if os_name == "Windows": # 如果是 Windows 操作系统,导入 Windows 相关库
@@ -264,7 +264,7 @@ def open_access_token_window():
264264
# 在 Windows 上额外提示存储位置
265265
if os_name == "Windows":
266266
reg_pos = "HKEY_CURRENT_USER\\Software\\tchMaterial-parser\\AccessToken"
267-
messagebox.showinfo("提示", f"Access Token 已保存!\n已写入注册表:\n{reg_pos}")
267+
messagebox.showinfo("提示", f"Access Token 已保存!\n已写入注册表:{reg_pos}")
268268
else:
269269
messagebox.showinfo("提示", "Access Token 已保存!")
270270

@@ -289,13 +289,13 @@ def open_access_token_window():
289289
请先在浏览器登录国家中小学智慧教育平台(https://auth.smartedu.cn/uias/login),然后按 F12 或 Ctrl+Shift+I 或 右键-检查(审查元素),打开开发人员工具,点击“控制台(Console)”选项卡,在里面粘贴以下代码后回车(Enter):
290290
---------------------------------------------------------
291291
(function() {
292-
let authKey = Object.keys(localStorage).find(key => key.includes("ND_UC_AUTH"));
292+
const authKey = Object.keys(localStorage).find(key => key.startsWith("ND_UC_AUTH"));
293293
if (!authKey) {
294294
console.error("未找到 Access Token,请确保已登录!");
295295
return;
296296
}
297-
let tokenData = JSON.parse(localStorage.getItem(authKey));
298-
let accessToken = JSON.parse(tokenData.value).access_token;
297+
const tokenData = JSON.parse(localStorage.getItem(authKey));
298+
const accessToken = JSON.parse(tokenData.value).access_token;
299299
console.log("%cAccess Token: ", "color: green; font-weight: bold", accessToken);
300300
})();
301301
---------------------------------------------------------
@@ -425,7 +425,7 @@ def thread_it(func, args: tuple = ()): # args 为元组,且默认值是空元
425425
session = requests.Session()
426426
# 设置请求头部,包含认证信息
427427
access_token = None
428-
headers = {"X-ND-AUTH": 'MAC id="0",nonce="0",mac="0"'} # “MAC id”等同于“access_token”,“nonce”和“mac”不可缺省但无需有效
428+
headers = { "X-ND-AUTH": 'MAC id="0",nonce="0",mac="0"' } # “MAC id”等同于“access_token”,“nonce”和“mac”不可缺省但无需有效
429429
session.proxies = { "http": None, "https": None } # 全局忽略代理
430430

431431
# 尝试从注册表读取本地存储的 access_token(仅限Windows)
@@ -653,7 +653,7 @@ token_btn = ttk.Button(container_frame, text="设置 Token", command=open_access
653653
token_btn.pack(side="left", padx=int(5 * scale), pady=int(5 * scale), ipady=int(5 * scale))
654654

655655
# 按钮:下载
656-
download_btn = ttk.Button(container_frame, text="下载", command=lambda: thread_it(download))
656+
download_btn = ttk.Button(container_frame, text="下载", command=download)
657657
download_btn.pack(side="right", padx=int(5 * scale), pady=int(5 * scale), ipady=int(5 * scale))
658658

659659
# 下载进度条

0 commit comments

Comments
 (0)