108 lines
3.2 KiB
Markdown
108 lines
3.2 KiB
Markdown
# Scraper.py 硬编码优化总结
|
||
|
||
## 优化内容
|
||
|
||
对 `scraper.py` 文件中的硬编码值进行了全面优化,将所有硬编码值提取为配置常量,提高了代码的可维护性和灵活性。
|
||
|
||
## 优化的硬编码值
|
||
|
||
### 1. 文件路径配置
|
||
- **原硬编码**: `"example_part_100.json"`
|
||
- **优化后**: `DEFAULT_PART_FILE = "example_part_100.json"`
|
||
|
||
- **原硬编码**: `"downloaded"`
|
||
- **优化后**: `DEFAULT_OUTPUT_DIR = "downloaded"`
|
||
|
||
### 2. API 端点配置
|
||
- **原硬编码**: `"https://s-file-2.ykt.cbern.com.cn/zxx/ndrv2/national_lesson/resources/details"`
|
||
- **优化后**: `DETAIL_BASE_URL = "https://s-file-2.ykt.cbern.com.cn/zxx/ndrv2/national_lesson/resources/details"`
|
||
|
||
### 3. 默认值配置
|
||
- **原硬编码**: `"未知教材"`
|
||
- **优化后**: `DEFAULT_MATERIAL_NAME = "未知教材"`
|
||
|
||
- **原硬编码**: `"未知章节"`
|
||
- **优化后**: `DEFAULT_CHAPTER_NAME = "未知章节"`
|
||
|
||
- **原硬编码**: `"未知课程"`
|
||
- **优化后**: `DEFAULT_COURSE_TITLE = "未知课程"`
|
||
|
||
- **原硬编码**: `"unnamed"`
|
||
- **优化后**: `DEFAULT_FILENAME = "unnamed"`
|
||
|
||
### 4. 标签和标识符配置
|
||
- **原硬编码**: `"zxxcc"`
|
||
- **优化后**: `TAG_DIMENSION_ID = "zxxcc"`
|
||
|
||
### 5. 文件和目录限制
|
||
- **原硬编码**: `100` (文件名最大长度)
|
||
- **优化后**: `MAX_FILENAME_LENGTH = 100`
|
||
|
||
- **原硬编码**: `50` (目录名最大长度)
|
||
- **优化后**: `MAX_DIRNAME_LENGTH = 50`
|
||
|
||
### 6. 网络设置
|
||
- **原硬编码**: `8192` (块大小)
|
||
- **优化后**: `CHUNK_SIZE = 8192`
|
||
|
||
- **原硬编码**: `30` (请求超时)
|
||
- **优化后**: `REQUEST_TIMEOUT = 30`
|
||
|
||
- **原硬编码**: `20` (详情请求超时)
|
||
- **优化后**: `DETAIL_REQUEST_TIMEOUT = 20`
|
||
|
||
### 7. 认证配置
|
||
- **原硬编码**: `None` (token 默认值)
|
||
- **优化后**: `DEFAULT_TOKEN = None`
|
||
|
||
## 新增文件
|
||
|
||
### config.py
|
||
创建了独立的配置文件,包含所有配置常量,便于集中管理和修改。
|
||
|
||
## 代码结构改进
|
||
|
||
1. **常量集中管理**: 所有配置值现在都在文件顶部的常量区域定义
|
||
2. **函数参数优化**: 函数参数使用常量而不是硬编码值
|
||
3. **错误处理改进**: 添加了配置导入的异常处理,确保在没有 config.py 时也能正常运行
|
||
4. **类型安全**: 保持了原有的类型注解和文档字符串
|
||
|
||
## 测试验证
|
||
|
||
创建了测试脚本 `test_hardcoded_values.py` 来验证:
|
||
- 所有常量都有正确的值
|
||
- 函数体中不再包含硬编码值
|
||
- 代码功能保持正常
|
||
|
||
## 使用方式
|
||
|
||
### 原有方式(保持不变)
|
||
```bash
|
||
python3 scraper.py --part-file example_part_100.json --test
|
||
```
|
||
|
||
### 新配置方式
|
||
可以通过修改 `config.py` 文件来调整配置,无需修改主代码:
|
||
```python
|
||
# 修改默认输出目录
|
||
DEFAULT_OUTPUT_DIR = "my_downloads"
|
||
|
||
# 修改API端点(如果需要)
|
||
DETAIL_BASE_URL = "https://new-api.example.com/details"
|
||
```
|
||
|
||
## 优势
|
||
|
||
1. **可维护性**: 配置集中管理,易于修改和扩展
|
||
2. **可读性**: 代码中不再有魔法数字和字符串
|
||
3. **灵活性**: 可以通过配置文件轻松调整行为
|
||
4. **测试友好**: 更容易进行单元测试和配置测试
|
||
5. **向后兼容**: 原有功能完全保持不变
|
||
|
||
## 验证结果
|
||
|
||
✅ 所有测试通过
|
||
✅ 代码功能正常
|
||
✅ 无回归问题
|
||
✅ 硬编码值已完全优化
|