Files
netdisk-fast-download/parser/src/test/java/cn/qaiu/parser/clientlink/ClientLinkExample.java
T
q 42b721eabf feat: 新增客户端协议生成系统,支持8种主流下载工具
🚀 核心功能
- 新增完整的客户端下载链接生成器系统
- 支持ARIA2、Motrix、比特彗星、迅雷、wget、cURL、IDM、FDM、PowerShell等8种客户端
- 自动处理防盗链参数(User-Agent、Referer、Cookie等)
- 提供可扩展的生成器架构,支持自定义客户端

🔧 技术实现
- ClientLinkGeneratorFactory: 工厂模式管理生成器
- DownloadLinkMeta: 元数据存储下载信息
- ClientLinkUtils: 便捷工具类
- 线程安全的ConcurrentHashMap设计

🌐 前端集成
- 新增ClientLinks.vue界面,支持客户端链接展示
- Element Plus图标系统,混合图标显示
- 客户端检测逻辑优化,避免自动打开外部应用
- 移动端和PC端环境判断

📚 文档完善
- 完整的CLIENT_LINK_GENERATOR_GUIDE.md使用指南
- API文档和测试用例
- 输出示例和最佳实践

从单纯的网盘解析工具升级为完整的下载解决方案生态
2025-10-24 09:29:05 +08:00

149 lines
5.1 KiB
Java

package cn.qaiu.parser.clientlink;
import cn.qaiu.entity.ShareLinkInfo;
import cn.qaiu.parser.IPanTool;
import cn.qaiu.parser.ParserCreate;
import cn.qaiu.parser.clientlink.ClientLinkType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
/**
* 客户端下载链接生成器使用示例
*
* @author <a href="https://qaiu.top">QAIU</a>
* Create at 2025/01/21
*/
public class ClientLinkExample {
private static final Logger log = LoggerFactory.getLogger(ClientLinkExample.class);
/**
* 示例1:使用新的 parseWithClientLinks 方法
*/
public static void example1() {
try {
// 创建解析器
IPanTool tool = ParserCreate.fromShareUrl("https://cowtransfer.com/s/abc123")
.createTool();
// 解析并生成客户端链接
Map<ClientLinkType, String> clientLinks = tool.parseWithClientLinksSync();
// 输出生成的链接
log.info("=== 生成的客户端下载链接 ===");
for (Map.Entry<ClientLinkType, String> entry : clientLinks.entrySet()) {
log.info("{}: {}", entry.getKey().getDisplayName(), entry.getValue());
}
} catch (Exception e) {
log.error("示例1执行失败", e);
}
}
/**
* 示例2:传统方式 + 手动生成客户端链接
*/
public static void example2() {
try {
// 创建解析器
IPanTool tool = ParserCreate.fromShareUrl("https://cowtransfer.com/s/abc123")
.createTool();
// 解析获取直链
String directLink = tool.parseSync();
log.info("直链: {}", directLink);
// 获取 ShareLinkInfo
ShareLinkInfo shareLinkInfo = tool.getShareLinkInfo();
// 手动生成客户端链接
Map<ClientLinkType, String> clientLinks =
ClientLinkGeneratorFactory.generateAll(shareLinkInfo);
// 输出生成的链接
log.info("=== 手动生成的客户端下载链接 ===");
for (Map.Entry<ClientLinkType, String> entry : clientLinks.entrySet()) {
log.info("{}: {}", entry.getKey().getDisplayName(), entry.getValue());
}
} catch (Exception e) {
log.error("示例2执行失败", e);
}
}
/**
* 示例3:生成特定类型的客户端链接
*/
public static void example3() {
try {
// 创建解析器
IPanTool tool = ParserCreate.fromShareUrl("https://cowtransfer.com/s/abc123")
.createTool();
// 解析获取直链
String directLink = tool.parseSync();
log.info("直链: {}", directLink);
// 获取 ShareLinkInfo
ShareLinkInfo shareLinkInfo = tool.getShareLinkInfo();
// 生成特定类型的链接
String curlCommand = ClientLinkGeneratorFactory.generate(shareLinkInfo, ClientLinkType.CURL);
String thunderLink = ClientLinkGeneratorFactory.generate(shareLinkInfo, ClientLinkType.THUNDER);
String aria2Command = ClientLinkGeneratorFactory.generate(shareLinkInfo, ClientLinkType.ARIA2);
log.info("=== 特定类型的客户端链接 ===");
log.info("cURL命令: {}", curlCommand);
log.info("迅雷链接: {}", thunderLink);
log.info("Aria2命令: {}", aria2Command);
} catch (Exception e) {
log.error("示例3执行失败", e);
}
}
/**
* 示例4:使用便捷工具类
*/
public static void example4() {
try {
// 创建解析器
IPanTool tool = ParserCreate.fromShareUrl("https://cowtransfer.com/s/abc123")
.createTool();
// 解析获取直链
String directLink = tool.parseSync();
log.info("直链: {}", directLink);
// 获取 ShareLinkInfo
ShareLinkInfo shareLinkInfo = tool.getShareLinkInfo();
// 使用便捷工具类
String curlCommand = ClientLinkUtils.generateCurlCommand(shareLinkInfo);
String wgetCommand = ClientLinkUtils.generateWgetCommand(shareLinkInfo);
String thunderLink = ClientLinkUtils.generateThunderLink(shareLinkInfo);
log.info("=== 使用便捷工具类生成的链接 ===");
log.info("cURL命令: {}", curlCommand);
log.info("wget命令: {}", wgetCommand);
log.info("迅雷链接: {}", thunderLink);
} catch (Exception e) {
log.error("示例4执行失败", e);
}
}
public static void main(String[] args) {
log.info("开始演示客户端下载链接生成器功能");
example1();
example2();
example3();
example4();
log.info("演示完成");
}
}