mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2025-12-16 12:23:03 +00:00
- 优化JsScriptLoader,支持JAR包内和文件系统的自动资源文件发现 - 移除预定义文件列表,完全依赖自动检测 - 添加getNoRedirect方法支持重定向处理 - 添加sendMultipartForm方法支持文件上传 - 添加代理配置支持 - 修复JSON解析的压缩处理问题 - 添加默认请求头支持(Accept-Encoding、User-Agent、Accept-Language) - 更新文档,修正导出方式说明 - 优化README.md结构,删除不符合模块定位的内容 - 升级parser版本到10.2.1
6.6 KiB
6.6 KiB
自定义解析器扩展功能更新日志
版本: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. 临时解析方案
在等待官方支持期间的临时解决方案
📦 影响范围
兼容性
- ✅ 向后兼容:不影响现有功能
- ✅ 可选功能:不使用则无影响
- ✅ 独立模块:与内置解析器解耦
依赖关系
- 无新增外部依赖
- 使用已有的
ShareLinkInfo、IPanTool等接口
性能影响
- 注册查找:O(1) 时间复杂度(HashMap)
- 内存占用:每个注册器约 1KB
- 线程安全:使用 ConcurrentHashMap,无锁竞争
🚀 升级指南
现有用户
无需任何改动,所有现有功能保持不变。
新用户
参考文档快速集成:
📝 示例代码
最小示例(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
完整文档: