Compare commits

..

2 Commits

Author SHA1 Message Date
q
2e76af980e front ver 0.1.9.b12 2025-11-28 19:50:29 +08:00
q
80ccbe5b62 fixed. 123跨区下载错误 2025-11-28 19:48:19 +08:00
10 changed files with 328 additions and 7 deletions

View File

@@ -38,6 +38,8 @@ https://nfd-parser.github.io/nfd-preview/preview.html?src=https%3A%2F%2Flz.qaiu.
**解析器模块文档:** [parser/README.md](parser/README.md)
**JavaScript解析器文档** [JavaScript解析器开发指南](parser/doc/JAVASCRIPT_PARSER_GUIDE.md) | [自定义解析器扩展指南](parser/doc/CUSTOM_PARSER_GUIDE.md) | [快速开始](parser/doc/CUSTOM_PARSER_QUICKSTART.md)
## 预览地址
[预览地址1](https://lz.qaiu.top)
[预览地址2](https://lzzz.qaiu.top)
@@ -406,6 +408,23 @@ proxy:
nfd-proxy搭建http代理服务器
参考https://github.com/nfd-parser/nfd-proxy
### 认证信息配置说明
部分网盘如123解析大文件时需要登录认证可以在配置文件中添加认证信息。
修改配置文件:
app-dev.yml
```yaml
### 解析认证相关
auths:
# 123配置用户名密码
ye:
username: 你的用户名
password: 你的密码
```
**注意:** 目前仅支持 123ye的认证配置。
## 开发计划
### v0.1.8~v0.1.9 ✓
- API添加文件信息(专属版/开源版)

View File

@@ -95,7 +95,9 @@ String url = tool.parseSync();
## 文档
- parser/doc/README.md解析约定、示例、IDEA `.http` 调试
- **parser/doc/CUSTOM_PARSER_GUIDE.md自定义解析器扩展完整指南**
- **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

View File

@@ -6,6 +6,9 @@
本模块支持用户自定义解析器扩展。用户在依赖本项目的 Maven 坐标后,可以实现自己的网盘解析器并注册到系统中使用。
> **提示**除了Java自定义解析器本项目还支持使用JavaScript编写解析器无需编译即可使用。
> 查看 [JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md) 了解更多。
## 核心组件
### 1. CustomParserConfig
@@ -491,6 +494,12 @@ A: 不可以。自定义解析器只能通过 `fromType` 方法创建。如果
### Q5: 解析器需要依赖外部服务怎么办?
A: 可以在解析器类中注入依赖,或使用单例模式管理外部服务连接。
## 相关文档
- [JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md) - 使用JavaScript编写解析器无需编译
- [自定义解析器快速开始](CUSTOM_PARSER_QUICKSTART.md) - 快速上手指南
- [解析器开发文档](README.md) - 解析器开发约定和规范
## 贡献
如果你实现了通用的网盘解析器,欢迎提交 PR 将其加入到内置解析器中!

View File

@@ -1,5 +1,8 @@
# 自定义解析器快速开始
> **提示**除了Java自定义解析器本项目还支持使用JavaScript编写解析器无需编译即可使用。
> 查看 [JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md) 了解更多。
## 5分钟快速集成指南
### 步骤1: 添加依赖pom.xml
@@ -266,6 +269,12 @@ public class ParserConfig {
- 🔍 查看[测试代码](../src/test/java/cn/qaiu/parser/CustomParserTest.java)了解更多示例
- 💡 参考[内置解析器](../src/main/java/cn/qaiu/parser/impl/)了解最佳实践
## 相关文档
- [自定义解析器扩展完整指南](CUSTOM_PARSER_GUIDE.md) - Java自定义解析器详细文档
- [JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md) - 使用JavaScript编写解析器
- [解析器开发文档](README.md) - 解析器开发约定和规范
## 技术支持
遇到问题?

View File

@@ -62,9 +62,56 @@ function parse(shareLinkInfo, http, logger) {
}
```
### 2. 重启应用
### 2. 解析器加载路径
重启应用后,JavaScript解析器会自动加载并注册。
JavaScript解析器支持两种加载方式:
#### 内置解析器jar包内
- **位置**jar包内的 `custom-parsers/` 资源目录
- **特点**随jar包一起发布无需额外配置
- **路径**`parser/src/main/resources/custom-parsers/`
#### 外部解析器(用户自定义)
- **默认位置**:应用运行目录下的 `./custom-parsers/` 文件夹
- **配置方式**(优先级从高到低):
1. **系统属性**`-Dparser.custom-parsers.path=/path/to/your/parsers`
2. **环境变量**`PARSER_CUSTOM_PARSERS_PATH=/path/to/your/parsers`
3. **默认路径**`./custom-parsers/`(相对于应用运行目录)
#### 配置示例
**Maven项目中使用**
```bash
# 方式1系统属性
mvn exec:java -Dexec.mainClass="your.MainClass" -Dparser.custom-parsers.path=./src/main/resources/custom-parsers
# 方式2环境变量
export PARSER_CUSTOM_PARSERS_PATH=./src/main/resources/custom-parsers
mvn exec:java -Dexec.mainClass="your.MainClass"
```
**jar包运行时**
```bash
# 方式1系统属性
java -Dparser.custom-parsers.path=/path/to/your/parsers -jar your-app.jar
# 方式2环境变量
export PARSER_CUSTOM_PARSERS_PATH=/path/to/your/parsers
java -jar your-app.jar
```
**Docker部署**
```bash
# 挂载外部解析器目录
docker run -d -v /path/to/your/parsers:/app/custom-parsers your-image
# 或使用环境变量
docker run -d -e PARSER_CUSTOM_PARSERS_PATH=/app/custom-parsers your-image
```
### 3. 重启应用
重启应用后JavaScript解析器会自动加载并注册。查看应用日志确认解析器是否成功加载。
## 元数据格式
@@ -653,7 +700,20 @@ A: 使用 `logger.debug()` 输出调试信息,查看应用日志。
## 示例脚本
参考 `parser/src/main/resources/custom-parsers/example-demo.js` 文件,包含完整的示例实现
参考以下示例文件,包含完整的解析器实现
- **`parser/src/main/resources/custom-parsers/example-demo.js`** - 完整的演示解析器,展示所有功能
- **`parser/src/main/resources/custom-parsers/baidu-photo.js`** - 百度相册解析器示例
- **`parser/src/main/resources/custom-parsers/migu-music.js`** - 咪咕音乐解析器示例
- **`parser/src/main/resources/custom-parsers/qishui-music.js`** - 汽水音乐解析器示例
这些示例展示了:
- 元数据配置
- 三个核心方法的实现parse、parseFileList、parseById
- 错误处理和日志记录
- 文件信息构建
- 重定向处理
- 代理支持
## 限制说明
@@ -662,6 +722,16 @@ A: 使用 `logger.debug()` 输出调试信息,查看应用日志。
3. **内存限制**: 长时间运行可能存在内存泄漏风险
4. **安全限制**: 无法访问文件系统或执行系统命令
## 相关文档
- [自定义解析器扩展指南](CUSTOM_PARSER_GUIDE.md) - Java自定义解析器扩展
- [自定义解析器快速开始](CUSTOM_PARSER_QUICKSTART.md) - 快速上手指南
- [解析器开发文档](README.md) - 解析器开发约定和规范
## 更新日志
- v1.0.0: 初始版本支持基本的JavaScript解析器功能
- 支持外部解析器路径配置(系统属性、环境变量)
- 支持文件上传功能sendMultipartForm
- 支持重定向处理getNoRedirect、getWithRedirect
- 支持代理配置HTTP/SOCKS4/SOCKS5

View File

@@ -118,8 +118,9 @@ function parse(shareLinkInfo, http, logger) {
### 3. 详细文档
- [JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md)
- [自定义解析器开发指南](CUSTOM_PARSER_GUIDE.md)
- **[JavaScript解析器开发指南](JAVASCRIPT_PARSER_GUIDE.md)** - 完整的JavaScript解析器开发文档包含API参考、示例代码和最佳实践
- **[自定义解析器扩展指南](CUSTOM_PARSER_GUIDE.md)** - Java自定义解析器扩展完整指南
- **[自定义解析器快速开始](CUSTOM_PARSER_QUICKSTART.md)** - 快速上手自定义解析器开发
---

View File

@@ -7,6 +7,51 @@
// 全局类型定义使用JSDoc注释
// 这些类型定义将在VSCode中提供代码补全和类型检查
// ============================================================================
// Nashorn Java 互操作全局对象
// ============================================================================
/**
* Java 全局对象类型定义 (Nashorn引擎提供)
* 用于访问Java类型和进行Java互操作
* @typedef {Object} JavaGlobal
* @property {function(string): any} type - 获取Java类参数为完整类名如"java.util.zip.CRC32"
* @property {function(any): any} from - 将Java对象转换为JavaScript对象
* @property {function(any): any} to - 将JavaScript对象转换为Java对象
* @property {function(any): boolean} isType - 检查对象是否为指定Java类型
* @property {function(any): boolean} isJavaObject - 检查对象是否为Java对象
* @property {function(any): boolean} isJavaMethod - 检查对象是否为Java方法
* @property {function(any): boolean} isJavaFunction - 检查对象是否为Java函数
*/
/**
* Java 全局对象 (Nashorn引擎提供)
* @global
* @type {JavaGlobal}
*/
var Java;
/**
* java 命名空间对象类型定义 (Nashorn引擎提供)
* 用于直接访问Java包和类
* @typedef {Object} JavaNamespace
* @property {Object} lang - java.lang 包
* @property {Object} util - java.util 包
* @property {Object} io - java.io 包
* @property {Object} net - java.net 包
* @property {Object} math - java.math 包
* @property {Object} security - java.security 包
* @property {Object} text - java.text 包
* @property {Object} time - java.time 包
*/
/**
* java 命名空间对象 (Nashorn引擎提供)
* @global
* @type {JavaNamespace}
*/
var java;
/**
* @typedef {Object} ShareLinkInfo
* @property {function(): string} getShareUrl - 获取分享URL
@@ -69,3 +114,157 @@
* @property {function(ShareLinkInfo, JsHttpClient, JsLogger): FileInfo[]} parseFileList - 解析文件列表
* @property {function(ShareLinkInfo, JsHttpClient, JsLogger): string} parseById - 根据文件ID获取下载链接
*/
// ============================================================================
// Java 基础类型定义
// ============================================================================
/**
* Java byte 类型 (8位有符号整数)
* 范围: -128 到 127
* @typedef {number} JavaByte
*/
/**
* Java short 类型 (16位有符号整数)
* 范围: -32,768 到 32,767
* @typedef {number} JavaShort
*/
/**
* Java int 类型 (32位有符号整数)
* 范围: -2,147,483,648 到 2,147,483,647
* @typedef {number} JavaInt
*/
/**
* Java long 类型 (64位有符号整数)
* 范围: -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
* @typedef {number} JavaLong
*/
/**
* Java float 类型 (32位单精度浮点数)
* @typedef {number} JavaFloat
*/
/**
* Java double 类型 (64位双精度浮点数)
* @typedef {number} JavaDouble
*/
/**
* Java char 类型 (16位Unicode字符)
* @typedef {string|number} JavaChar
*/
/**
* Java boolean 类型 (布尔值)
* @typedef {boolean} JavaBoolean
*/
/**
* Java String 类型 (字符串)
* @typedef {string} JavaString
*/
/**
* Java Byte 包装类型
* @typedef {Object} JavaByteWrapper
* @property {function(): number} byteValue - 返回byte值
* @property {function(): number} intValue - 返回int值
* @property {function(): number} longValue - 返回long值
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} doubleValue - 返回double值
* @property {function(JavaByteWrapper): number} compareTo - 比较两个Byte对象
* @property {function(): string} toString - 转换为字符串
*/
/**
* Java Short 包装类型
* @typedef {Object} JavaShortWrapper
* @property {function(): number} shortValue - 返回short值
* @property {function(): number} intValue - 返回int值
* @property {function(): number} longValue - 返回long值
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} doubleValue - 返回double值
* @property {function(JavaShortWrapper): number} compareTo - 比较两个Short对象
* @property {function(): string} toString - 转换为字符串
*/
/**
* Java Integer 包装类型
* @typedef {Object} JavaIntegerWrapper
* @property {function(): number} intValue - 返回int值
* @property {function(): number} longValue - 返回long值
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} doubleValue - 返回double值
* @property {function(JavaIntegerWrapper): number} compareTo - 比较两个Integer对象
* @property {function(): string} toString - 转换为字符串
* @property {function(number): JavaIntegerWrapper} valueOf - 静态方法创建Integer对象
* @property {function(string): number} parseInt - 静态方法解析字符串为int
*/
/**
* Java Long 包装类型
* @typedef {Object} JavaLongWrapper
* @property {function(): number} longValue - 返回long值
* @property {function(): number} intValue - 返回int值
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} doubleValue - 返回double值
* @property {function(JavaLongWrapper): number} compareTo - 比较两个Long对象
* @property {function(): string} toString - 转换为字符串
* @property {function(number): JavaLongWrapper} valueOf - 静态方法创建Long对象
* @property {function(string): number} parseLong - 静态方法解析字符串为long
*/
/**
* Java Float 包装类型
* @typedef {Object} JavaFloatWrapper
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} doubleValue - 返回double值
* @property {function(): number} intValue - 返回int值
* @property {function(): number} longValue - 返回long值
* @property {function(JavaFloatWrapper): number} compareTo - 比较两个Float对象
* @property {function(): string} toString - 转换为字符串
* @property {function(number): JavaFloatWrapper} valueOf - 静态方法创建Float对象
* @property {function(string): number} parseFloat - 静态方法解析字符串为float
*/
/**
* Java Double 包装类型
* @typedef {Object} JavaDoubleWrapper
* @property {function(): number} doubleValue - 返回double值
* @property {function(): number} floatValue - 返回float值
* @property {function(): number} intValue - 返回int值
* @property {function(): number} longValue - 返回long值
* @property {function(JavaDoubleWrapper): number} compareTo - 比较两个Double对象
* @property {function(): string} toString - 转换为字符串
* @property {function(number): JavaDoubleWrapper} valueOf - 静态方法创建Double对象
* @property {function(string): number} parseDouble - 静态方法解析字符串为double
*/
/**
* Java Character 包装类型
* @typedef {Object} JavaCharacterWrapper
* @property {function(): string|number} charValue - 返回char值
* @property {function(JavaCharacterWrapper): number} compareTo - 比较两个Character对象
* @property {function(): string} toString - 转换为字符串
* @property {function(string|number): boolean} isDigit - 静态方法:判断是否为数字
* @property {function(string|number): boolean} isLetter - 静态方法:判断是否为字母
* @property {function(string|number): boolean} isLetterOrDigit - 静态方法:判断是否为字母或数字
* @property {function(string|number): boolean} isUpperCase - 静态方法:判断是否为大写
* @property {function(string|number): boolean} isLowerCase - 静态方法:判断是否为小写
* @property {function(string|number): string|number} toUpperCase - 静态方法:转换为大写
* @property {function(string|number): string|number} toLowerCase - 静态方法:转换为小写
*/
/**
* Java Boolean 包装类型
* @typedef {Object} JavaBooleanWrapper
* @property {function(): boolean} booleanValue - 返回boolean值
* @property {function(JavaBooleanWrapper): number} compareTo - 比较两个Boolean对象
* @property {function(): string} toString - 转换为字符串
* @property {function(boolean): JavaBooleanWrapper} valueOf - 静态方法创建Boolean对象
* @property {function(string): boolean} parseBoolean - 静态方法解析字符串为boolean
*/

View File

@@ -48,7 +48,7 @@
</div>
<!-- 项目简介移到卡片内 -->
<div class="project-intro">
<div class="intro-title">NFD网盘直链解析0.1.9_b10</div>
<div class="intro-title">NFD网盘直链解析0.1.9_b12</div>
<div class="intro-desc">
<div>支持网盘蓝奏云蓝奏云优享小飞机盘123云盘奶牛快传移动云空间QQ邮箱云盘QQ闪传等 <el-link style="color:#606cf5" href="https://github.com/qaiu/netdisk-fast-download?tab=readme-ov-file#%E7%BD%91%E7%9B%98%E6%94%AF%E6%8C%81%E6%83%85%E5%86%B5" target="_blank"> &gt;&gt; </el-link></div>
<div>文件夹解析支持蓝奏云蓝奏云优享小飞机盘123云盘</div>

View File

@@ -82,5 +82,11 @@ public class AppMain {
localMap.put("proxy", jsonObject1);
}
}
// 认证
if (jsonObject.containsKey(ConfigConstant.AUTHS)) {
JsonObject auths = jsonObject.getJsonObject(ConfigConstant.AUTHS);
localMap.put(ConfigConstant.AUTHS, auths);
}
}
}

View File

@@ -96,3 +96,9 @@ proxy:
# username:
# password:
### 解析认证相关
auths:
# 123网盘配置用户名密码
ye:
username:
password: