note/work/AI/course/OPTIMIZATION_SUMMARY.md
2025-11-19 10:16:05 +08:00

3.2 KiB
Raw Permalink Blame History

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 来验证:

  • 所有常量都有正确的值
  • 函数体中不再包含硬编码值
  • 代码功能保持正常

使用方式

原有方式(保持不变)

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"

优势

  1. 可维护性: 配置集中管理,易于修改和扩展
  2. 可读性: 代码中不再有魔法数字和字符串
  3. 灵活性: 可以通过配置文件轻松调整行为
  4. 测试友好: 更容易进行单元测试和配置测试
  5. 向后兼容: 原有功能完全保持不变

验证结果

所有测试通过 代码功能正常 无回归问题 硬编码值已完全优化