Files
netdisk-fast-download/parser/doc/CHANGELOG_CUSTOM_PARSER.md
q 064efdf3f3 feat: 完善JavaScript解析器功能
- 优化JsScriptLoader,支持JAR包内和文件系统的自动资源文件发现
- 移除预定义文件列表,完全依赖自动检测
- 添加getNoRedirect方法支持重定向处理
- 添加sendMultipartForm方法支持文件上传
- 添加代理配置支持
- 修复JSON解析的压缩处理问题
- 添加默认请求头支持(Accept-Encoding、User-Agent、Accept-Language)
- 更新文档,修正导出方式说明
- 优化README.md结构,删除不符合模块定位的内容
- 升级parser版本到10.2.1
2025-10-22 17:34:19 +08:00

6.6 KiB
Raw Blame History

自定义解析器扩展功能更新日志

版本10.1.17+

更新日期: 2024-10-17


🎉 新增功能:自定义解析器扩展

概述

用户在依赖本项目 Maven 坐标后,可以自己实现解析器接口,并通过注册机制将自定义解析器集成到系统中。

核心变更

1. 新增类

CustomParserConfig.java
  • 位置: cn.qaiu.parser.custom.CustomParserConfig
  • 功能: 自定义解析器配置类
  • 主要字段:
    • type: 解析器类型标识(唯一,必填)
    • displayName: 显示名称(必填)
    • toolClass: 解析工具类必填必须实现IPanTool接口
    • standardUrlTemplate: 标准URL模板可选
    • panDomain: 网盘域名(可选)
  • 使用方式: 通过 Builder 模式构建
  • 验证机制:
    • 自动验证 toolClass 是否实现 IPanTool 接口
    • 自动验证 toolClass 是否有 ShareLinkInfo 单参构造器
    • 验证必填字段是否为空
CustomParserRegistry.java
  • 位置: cn.qaiu.parser.custom.CustomParserRegistry
  • 功能: 自定义解析器注册中心
  • 主要方法:
    • register(CustomParserConfig): 注册解析器
    • unregister(String type): 注销解析器
    • get(String type): 获取解析器配置
    • contains(String type): 检查是否已注册
    • clear(): 清空所有注册
    • size(): 获取注册数量
    • getAll(): 获取所有配置
  • 特性:
    • 线程安全(使用 ConcurrentHashMap
    • 自动检查类型冲突(与内置解析器)
    • 防止重复注册

2. 修改的类

ParserCreate.java
  • 新增字段:

    • customParserConfig: 自定义解析器配置
    • isCustomParser: 是否为自定义解析器标识
  • 新增构造器:

    • ParserCreate(CustomParserConfig, ShareLinkInfo): 自定义解析器专用构造器
  • 修改的方法:

    • fromType(String type): 优先查找自定义解析器,再查找内置解析器
    • createTool(): 支持创建自定义解析器工具实例
    • normalizeShareLink(): 自定义解析器抛出不支持异常
    • shareKey(String): 支持自定义解析器的 shareKey 设置
    • getStandardUrlTemplate(): 支持返回自定义解析器的模板
    • genPathSuffix(): 支持生成自定义解析器的路径
  • 新增方法:

    • isCustomParser(): 判断是否为自定义解析器
    • getCustomParserConfig(): 获取自定义解析器配置
    • getPanDomainTemplate(): 获取内置解析器模板

3. 测试类

CustomParserTest.java
  • 位置: cn.qaiu.parser.custom.CustomParserTest
  • 测试覆盖:
    • 注册自定义解析器
    • 重复注册检测
    • 与内置类型冲突检测
    • 注销解析器
    • 创建工具实例
    • fromShareUrl 不支持自定义解析器
    • normalizeShareLink 不支持
    • 生成路径后缀
    • 配置验证
    • 工具类验证

4. 文档

CUSTOM_PARSER_GUIDE.md
  • 位置: parser/doc/CUSTOM_PARSER_GUIDE.md
  • 内容: 完整的自定义解析器扩展指南
    • 使用步骤
    • API 参考
    • 完整示例
    • 常见问题
CUSTOM_PARSER_QUICKSTART.md
  • 位置: parser/doc/CUSTOM_PARSER_QUICKSTART.md
  • 内容: 5分钟快速开始指南
    • 快速集成步骤
    • 可运行示例
    • Spring Boot 集成
    • 常见问题速查
README.md更新
  • 位置: parser/README.md
  • 更新内容:
    • 新增自定义解析器扩展章节
    • 添加快速示例
    • 更新核心 API 列表
    • 添加文档链接

🔒 设计约束

1. 创建限制

自定义解析器只能通过 fromType 方法创建

// ✅ 支持
ParserCreate.fromType("mypan")
    .shareKey("abc123")
    .createTool();

// ❌ 不支持
ParserCreate.fromShareUrl("https://mypan.com/s/abc123");

原因: 自定义解析器没有正则表达式来匹配分享链接

2. 方法限制

自定义解析器不支持 normalizeShareLink() 方法

ParserCreate parser = ParserCreate.fromType("mypan");
parser.normalizeShareLink();  // ❌ 抛出 UnsupportedOperationException

3. 类型唯一性

  • 自定义解析器类型不能与内置类型冲突
  • 不能重复注册相同类型

4. 构造器要求

解析器工具类必须提供 ShareLinkInfo 单参构造器:

public class MyTool implements IPanTool {
    public MyTool(ShareLinkInfo info) {  // 必须
        // ...
    }
}

💡 使用场景

1. 企业内部网盘

为企业内部网盘系统添加解析支持

2. 私有部署网盘

支持私有部署的网盘服务(如 Cloudreve、可道云的自定义实例

3. 新兴网盘服务

快速支持新出现的网盘服务,无需等待官方更新

4. 临时解析方案

在等待官方支持期间的临时解决方案


📦 影响范围

兼容性

  • 向后兼容:不影响现有功能
  • 可选功能:不使用则无影响
  • 独立模块:与内置解析器解耦

依赖关系

  • 无新增外部依赖
  • 使用已有的 ShareLinkInfoIPanTool 等接口

性能影响

  • 注册查找O(1) 时间复杂度HashMap
  • 内存占用:每个注册器约 1KB
  • 线程安全:使用 ConcurrentHashMap无锁竞争

🚀 升级指南

现有用户

无需任何改动,所有现有功能保持不变。

新用户

参考文档快速集成:

  1. 快速开始
  2. 完整指南

📝 示例代码

最小示例3步

// 1. 实现接口
class MyTool implements IPanTool {
    public MyTool(ShareLinkInfo info) {}
    public Future<String> parse() { /* ... */ }
}

// 2. 注册
CustomParserRegistry.register(
    CustomParserConfig.builder()
        .type("mypan")
        .displayName("我的网盘")
        .toolClass(MyTool.class)
        .build()
);

// 3. 使用
IPanTool tool = ParserCreate.fromType("mypan")
    .shareKey("abc")
    .createTool();
String url = tool.parseSync();

🎯 下一步计划

潜在增强

  • 支持解析器优先级
  • 支持解析器热更新
  • 添加解析器性能监控
  • 提供解析器开发脚手架

社区贡献

欢迎提交优秀的自定义解析器实现,我们将评估后合并到内置解析器中。


🤝 贡献者

  • @qaiu - 设计与实现

📄 许可

MIT License


完整文档: