3.2 KiB
3.2 KiB
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
创建了独立的配置文件,包含所有配置常量,便于集中管理和修改。
代码结构改进
- 常量集中管理: 所有配置值现在都在文件顶部的常量区域定义
- 函数参数优化: 函数参数使用常量而不是硬编码值
- 错误处理改进: 添加了配置导入的异常处理,确保在没有 config.py 时也能正常运行
- 类型安全: 保持了原有的类型注解和文档字符串
测试验证
创建了测试脚本 test_hardcoded_values.py 来验证:
- 所有常量都有正确的值
- 函数体中不再包含硬编码值
- 代码功能保持正常
使用方式
原有方式(保持不变)
python3 scraper.py --part-file example_part_100.json --test
新配置方式
可以通过修改 config.py 文件来调整配置,无需修改主代码:
# 修改默认输出目录
DEFAULT_OUTPUT_DIR = "my_downloads"
# 修改API端点(如果需要)
DETAIL_BASE_URL = "https://new-api.example.com/details"
优势
- 可维护性: 配置集中管理,易于修改和扩展
- 可读性: 代码中不再有魔法数字和字符串
- 灵活性: 可以通过配置文件轻松调整行为
- 测试友好: 更容易进行单元测试和配置测试
- 向后兼容: 原有功能完全保持不变
验证结果
✅ 所有测试通过 ✅ 代码功能正常 ✅ 无回归问题 ✅ 硬编码值已完全优化