Files
netdisk-fast-download/parser
yukaidi af723aed3a fix: NPE 修复、资源泄漏修复及其他 Bug 修复
- 修复 12 处 NPE 风险: FjTool/FsTool/IzTool/LzTool/MkwTool/P115Tool/PdbTool/QQTool/ParserCreate/CommonUtils/ShareLinkInfo/URLParamUtil
- 修复 4 处 Vert.x 资源泄漏: 测试类中 Vertx 实例未关闭
- 修复 CacheManager 防重入和 registerPeriodicCleanup 就绪检查
- 修复 ParserApi 中 redirectUrl()/viewUrl() Promise 未 complete
- 修复 CacheManager.updateTotalByField Promise 永不完成
- 修复 AppMain ShutdownHook 注册,确保 Vert.x 先于 JDBCPoolInit 关闭
- 修复 RouterHandlerFactory failureHandler 恢复返回 failure message
- 修复 ParserCreate/LzTool 收窄 catch 异常类型
- 修复 IzTool/FjTool/IzToolWithAuth 并发安全 (volatile + header 副本)
- 修复 P115Tool UA 为 null 时的 NPE,添加默认 User-Agent
- Font Awesome CDN 换源为 s4.zstatic.net,避免 bootcdn 投毒风险
- DirectoryTree selectAll 补 parserUrl 检查,Home 组件名 App→Home
2026-05-29 14:22:40 +08:00
..
2026-05-29 14:21:32 +08:00
2026-05-29 14:21:32 +08:00

parser

NFD 解析器模块:聚合各类网盘/分享页解析,统一输出文件列表与下载信息,供上层下载器使用。

  • 语言Java 17
  • 构建Maven
  • 模块版本10.2.5

依赖Maven Central

<dependency>
  <groupId>cn.qaiu</groupId>
  <artifactId>parser</artifactId>
  <version>10.2.5</version>
</dependency>
  • Gradle Groovy DSL
dependencies {
  implementation 'cn.qaiu:parser:10.2.5'
}
  • Gradle Kotlin DSL
dependencies {
  implementation("cn.qaiu:parser:10.2.5")
}

核心 API 速览

  • WebClientVertxInit注入/获取 Vert.x 实例(内部 HTTP 客户端依赖)。
  • ParserCreate从分享链接或类型构建解析器生成短链 path。
  • IPanTool统一解析接口parse、parseFileList、parseById
  • CustomParserRegistry:自定义解析器注册中心(支持扩展)。
  • CustomParserConfig:自定义解析器配置类(支持扩展)。

使用示例(极简)

List<FileInfo> list = ParserCreate
  .fromShareUrl("https://share.feijipan.com/s/3pMsofZd")
  .createTool()
  .parseFileList()
  .toCompletionStage().toCompletableFuture().join();

完整示例与调试脚本见 parser/doc/README.md。

快速开始

  • 环境JDK >= 17Maven >= 3.9
  • 构建/安装:
mvn -pl parser -am clean package -DskipTests
mvn -pl parser -am install
  • 测试:
mvn -pl parser test

自定义解析器扩展

本模块支持用户自定义解析器扩展。通过简单的配置和注册,你可以添加自己的网盘解析实现:

// 1. 继承 PanBase 抽象类(推荐)
public class MyPanTool extends PanBase {
    public MyPanTool(ShareLinkInfo info) { 
        super(info);
    }
    @Override
    public Future<String> parse() { 
        // 使用 PanBase 提供的 HTTP 客户端
        client.getAbs("https://api.example.com")
            .send()
            .onSuccess(res -> complete(asJson(res).getString("url")))
            .onFailure(handleFail("请求失败"));
        return future();
    }
}

// 2. 注册到系统
CustomParserConfig config = CustomParserConfig.builder()
    .type("mypan")
    .displayName("我的网盘")
    .toolClass(MyPanTool.class)
    .build();
CustomParserRegistry.register(config);

// 3. 使用自定义解析器(仅支持 fromType 方式)
IPanTool tool = ParserCreate.fromType("mypan")
    .shareKey("abc123")
    .createTool();
String url = tool.parseSync();

详细文档: 自定义解析器扩展指南

文档

  • parser/doc/README.md解析约定、示例、IDEA .http 调试
  • parser/doc/JAVASCRIPT_PARSER_GUIDE.mdJavaScript解析器开发完整指南 - 使用JavaScript编写自定义解析器
  • parser/doc/CUSTOM_PARSER_GUIDE.md自定义解析器扩展完整指南 - Java自定义解析器扩展
  • parser/doc/CUSTOM_PARSER_QUICKSTART.md自定义解析器快速开始 - 快速上手指南

目录

  • src/main/java/cn/qaiu/entity通用实体如 FileInfo
  • src/main/java/cn/qaiu/parser解析框架 & 各站点实现impl
  • src/test/java单测与示例

许可证

MIT License