From 05039ece51fc50a4cec81021f42464b91ca44fba Mon Sep 17 00:00:00 2001 From: QAIU <736226400@qq.com> Date: Sat, 26 Oct 2024 16:04:49 +0800 Subject: [PATCH] =?UTF-8?q?add=20118,=20=E5=BE=AE=E9=9B=A8=E4=BA=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/qaiu/vx/core/Deploy.java | 5 ++ .../main/java/cn/qaiu/parser/IPanTool.java | 4 ++ .../src/main/java/cn/qaiu/parser/PanBase.java | 11 +++- .../cn/qaiu/parser/PanDomainTemplate.java | 10 ++++ .../java/cn/qaiu/parser/impl/P118Tool.java | 48 +++++++++++++++ .../java/cn/qaiu/parser/impl/PvyyTool.java | 51 ++++++++++++++++ .../src/test/java/cn/qaiu/util/TestRegex.java | 15 ++++- web-front/src/App.vue | 12 +++- .../src/main/resources/http-tools/temp.http | 58 ++++++++++++++++++- .../src/main/resources/http-tools/test.http | 8 +++ 10 files changed, 214 insertions(+), 8 deletions(-) create mode 100644 parser/src/main/java/cn/qaiu/parser/impl/P118Tool.java create mode 100644 parser/src/main/java/cn/qaiu/parser/impl/PvyyTool.java diff --git a/core/src/main/java/cn/qaiu/vx/core/Deploy.java b/core/src/main/java/cn/qaiu/vx/core/Deploy.java index 927b7f4..237661c 100644 --- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java +++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java @@ -6,6 +6,7 @@ import cn.qaiu.vx.core.verticle.ReverseProxyVerticle; import cn.qaiu.vx.core.verticle.RouterVerticle; import cn.qaiu.vx.core.verticle.ServiceVerticle; import io.vertx.core.*; +import io.vertx.core.dns.AddressResolverOptions; import io.vertx.core.impl.launcher.commands.VersionCommand; import io.vertx.core.json.JsonObject; import io.vertx.core.shareddata.LocalMap; @@ -121,6 +122,10 @@ public final class Deploy { var vertxOptions = vertxConfigELPS == 0 ? new VertxOptions() : new VertxOptions(vertxConfig); + vertxOptions.setAddressResolverOptions( + new AddressResolverOptions(). + addServer("114.114.114.114"). + addServer("114.114.115.115")); LOGGER.info("vertxConfigEventLoopPoolSize: {}, eventLoopPoolSize: {}, workerPoolSize: {}", vertxConfigELPS, vertxOptions.getEventLoopPoolSize(), vertxOptions.getWorkerPoolSize()); diff --git a/parser/src/main/java/cn/qaiu/parser/IPanTool.java b/parser/src/main/java/cn/qaiu/parser/IPanTool.java index e9385c1..63ec362 100644 --- a/parser/src/main/java/cn/qaiu/parser/IPanTool.java +++ b/parser/src/main/java/cn/qaiu/parser/IPanTool.java @@ -4,4 +4,8 @@ import io.vertx.core.Future; public interface IPanTool { Future parse(); + + default String parseSync() { + return parse().toCompletionStage().toCompletableFuture().join(); + } } diff --git a/parser/src/main/java/cn/qaiu/parser/PanBase.java b/parser/src/main/java/cn/qaiu/parser/PanBase.java index 5addebb..db65a90 100644 --- a/parser/src/main/java/cn/qaiu/parser/PanBase.java +++ b/parser/src/main/java/cn/qaiu/parser/PanBase.java @@ -32,7 +32,8 @@ public abstract class PanBase implements IPanTool { /** * Http client */ - protected WebClient client = WebClient.create(WebClientVertxInit.get()); + protected WebClient client = WebClient.create(WebClientVertxInit.get(), + new WebClientOptions().setUserAgentEnabled(false)); /** * Http client session (会话管理, 带cookie请求) @@ -103,6 +104,10 @@ public abstract class PanBase implements IPanTool { } } + protected void fail() { + fail(""); + } + /** * 生成失败Future的处理器 * @@ -113,6 +118,10 @@ public abstract class PanBase implements IPanTool { return t -> fail(shareLinkInfo.getPanName() + "-" + shareLinkInfo.getType() + " - 请求异常 {}: -> {}", errorMsg, t.fillInStackTrace()); } + protected Handler handleFail() { + return handleFail(""); + } + /** * bodyAsJsonObject的封装, 会自动处理异常 diff --git a/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java b/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java index eadb24d..c58321f 100644 --- a/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java +++ b/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java @@ -83,6 +83,16 @@ public enum PanDomainTemplate { compile("https://474b\\.com/file/(?.+)"), "https://474b.com/file/{shareKey}", CtTool.class), + // https://xxx.118pan.com/bxxx + P118("118网盘", + compile("https://((.*)\\.)?118pan\\.com/b(?.+)"), + "https://qaiu.118pan.com/b{shareKey}", + P118Tool.class), + // https://www.vyuyun.com/s/QMa6ie?password=I4KG7H + PVYY("微雨云存储", + compile("https://www\\.vyuyun\\.com/s/(?[a-zA-Z0-9-]+)(\\?password=.*)?"), + "https://www.vyuyun.com/s/{shareKey}", + PvyyTool.class), // =====================音乐类解析 分享链接标志->MxxS (单歌曲/普通音质)========================== // http://163cn.tv/xxx diff --git a/parser/src/main/java/cn/qaiu/parser/impl/P118Tool.java b/parser/src/main/java/cn/qaiu/parser/impl/P118Tool.java new file mode 100644 index 0000000..8bb3191 --- /dev/null +++ b/parser/src/main/java/cn/qaiu/parser/impl/P118Tool.java @@ -0,0 +1,48 @@ +package cn.qaiu.parser.impl; + +import cn.qaiu.entity.ShareLinkInfo; +import cn.qaiu.parser.PanBase; +import io.vertx.core.Future; +import io.vertx.core.buffer.Buffer; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 118网盘解析 + */ +public class P118Tool extends PanBase { + + private static final String API_URL_PREFIX = "https://qaiu.118pan.com/ajax.php"; + +// private static final String + + public P118Tool(ShareLinkInfo shareLinkInfo) { + super(shareLinkInfo); + } + + public Future parse() { + + client.postAbs(API_URL_PREFIX) + .putHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .sendBuffer(Buffer.buffer("action=load_down_addr1&file_id=" + shareLinkInfo.getShareKey())) + .onSuccess(res -> { + System.out.println(res.headers()); + Pattern compile = Pattern.compile("href=\"([^\"]+)\""); + Matcher matcher = compile.matcher(res.bodyAsString()); + if (matcher.find()) { + System.out.println(matcher.group(1)); + complete(matcher.group(1)); + } else { + fail(); + } + }).onFailure(handleFail("")); + return future(); + } + +// public static void main(String[] args) { +// String s = new P118Tool(ShareLinkInfo.newBuilder().shareUrl("https://xiguage.118pan.com/b11848261").shareKey( +// "11848261").build()).parseSync(); +// System.out.println(s); +// } +} diff --git a/parser/src/main/java/cn/qaiu/parser/impl/PvyyTool.java b/parser/src/main/java/cn/qaiu/parser/impl/PvyyTool.java new file mode 100644 index 0000000..f3ade78 --- /dev/null +++ b/parser/src/main/java/cn/qaiu/parser/impl/PvyyTool.java @@ -0,0 +1,51 @@ +package cn.qaiu.parser.impl; + +import cn.qaiu.entity.ShareLinkInfo; +import cn.qaiu.parser.PanBase; +import io.vertx.core.Future; +import io.vertx.uritemplate.UriTemplate; + +/** + * 微雨云 + */ +public class PvyyTool extends PanBase { + private static final String API_URL_PREFIX1 = "https://www.vyuyun.com/apiv1/share/file/{key}?password={pwd}"; + private static final String API_URL_PREFIX2 = "https://www.vyuyun.com/apiv1/share/getShareDownUrl/{key}/{id}?password={pwd}"; + + public PvyyTool(ShareLinkInfo shareLinkInfo) { + super(shareLinkInfo); + } + + public Future parse() { + // + client.getAbs(UriTemplate.of(API_URL_PREFIX1)) + .setTemplateParam("key", shareLinkInfo.getShareKey()) + .setTemplateParam("pwd", shareLinkInfo.getSharePassword()) + .putHeader("referer", "https://www.vyuyun.com") + .send().onSuccess(res -> { + try { + String id = asJson(res).getJsonObject("data").getJsonObject("data").getString("id"); + + client.getAbs(UriTemplate.of(API_URL_PREFIX2)) + .setTemplateParam("key", shareLinkInfo.getShareKey()) + .setTemplateParam("pwd", shareLinkInfo.getSharePassword()) + .setTemplateParam("id", id) + .putHeader("referer", "https://www.vyuyun.com") + .send().onSuccess(res2 -> { + try { + // data->downInfo->url + String url = + asJson(res2).getJsonObject("data").getJsonObject("downInfo").getString("url"); + complete(url); + } catch (Exception ignored) { + fail(asJson(res2).encodePrettily()); + } + }); + } catch (Exception ignored) { + fail(asJson(res).encodePrettily()); + } + }); + + return future(); + } +} diff --git a/parser/src/test/java/cn/qaiu/util/TestRegex.java b/parser/src/test/java/cn/qaiu/util/TestRegex.java index 90e7916..f2ca922 100644 --- a/parser/src/test/java/cn/qaiu/util/TestRegex.java +++ b/parser/src/test/java/cn/qaiu/util/TestRegex.java @@ -10,13 +10,22 @@ public class TestRegex { @Test public void regexYFC() { String html = """ - https://www.kugou.com/mixsong/9q98o5b9.html + true| + """; - Pattern compile = Pattern.compile("https://(.+)\\.kugou\\.com/mixsong/(?.+).html"); + Pattern compile = Pattern.compile("href=\"([^\"]+)\""); Matcher matcher = compile.matcher(html); if (matcher.find()) { - System.out.println(matcher.group(0)); +// System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); } } diff --git a/web-front/src/App.vue b/web-front/src/App.vue index 398c9fb..90bc6e7 100644 --- a/web-front/src/App.vue +++ b/web-front/src/App.vue @@ -312,13 +312,19 @@ export default { this.$message.error(response.data.msg) } }); - } + }, + async getPaste() { + const text = await navigator.clipboard.readText(); + console.log('获取到的文本内容是:', text) + }, }, mounted() { this.getLinkInfo = `${this.baseAPI}/v2/linkInfo` - this.getLink = `${this.baseAPI}/json/parser` + this.getLink = `${this.baseAPI}/json/parser` this.getInfo() - } + this.getPaste() + }, + } diff --git a/web-service/src/main/resources/http-tools/temp.http b/web-service/src/main/resources/http-tools/temp.http index 619e726..7b56c59 100644 --- a/web-service/src/main/resources/http-tools/temp.http +++ b/web-service/src/main/resources/http-tools/temp.http @@ -74,5 +74,61 @@ GET http://127.0.0.1:6401/parser?url=https://blog.qaiu.top/s/nLNsQ1 ### # @no-redirect -GET http://127.0.0.1:6401/parser?url=https://pan.seeoss.com/s/nLNsQ1 +GET http://127.0.0.1:6401/parser?url=https://pan.baidu.com/s/1o7ZPmAecYJ4rsxibyARyeg?pwd=QAIU + +### +https://pan.baidu.com/s/1o7ZPmAecYJ4rsxibyARyeg?pwd=QAIU + + + +### 微雨云存储 0. 带密码 获取分享ID: QMa6ie +https://www.vyuyun.com/s/QMa6ie?password=I4KG7H +### 微雨云存储 0. 不带密码 获取分享ID: jemOTl +https://www.vyuyun.com/s/jemOTl?password= + +### 微雨云存储 1. 传入jemOTl 获取文件ID json: data->id +https://www.vyuyun.com/apiv1/share/file/jemOTl?password= +### 微雨云存储 1. 传入jemOTl 获取文件ID json: data->id +https://www.vyuyun.com/apiv1/share/file/QMa6ie?password=I4KG7H + +### 微雨云存储 2. 获取文件直链 json: data->downInfo->url +https://www.vyuyun.com/apiv1/share/getShareDownUrl/jemOTl/0BEmf4?password= +referer: https://www.vyuyun.com + + +### 下载直链 无需请求头 11:00 +#@no-cookie-jar +https://down2.bilnn.top/uploads/11283/306bdccd233ffd2c.jar?filename=C400003mAan70zUy5O+%282%29.m4a&mime=audio%2Fx-m4a&verify=1729911697-SLZtEHXB4TM*ze1j31WMyNA**p743DY*GN2sajUx5w*2mM** + + +### 118网盘 https://qaiu.118pan.com/b1228264 +#密码:qaiu +https://qaiu.118pan.com/b1228264 + +### +https://xiguage.118pan.com/b1186280 + +### 118 b1228264->1228264 +POST https://qaiu.118pan.com/ajax.php +Content-Type: application/x-www-form-urlencoded; charset=UTF-8 + +action=load_down_addr1&file_id=1228264 + +### 118 b1186280->1186280 +POST https://qaiu.118pan.com/ajax.php +Content-Type: application/x-www-form-urlencoded; charset=UTF-8 + +action=load_down_addr1&file_id=1186280 + +### +#@no-redirect +https://nsub2d3.118pan.com/dl.php?M2E0NFVEMGM4YnFOenc2dHI5MGp1MEV3MUhvbW1sYXhnUkxLbHg3clhkMDhld24vZFBpazhlNTVTKytEY1IvRUhsWUZxT1lGYWNZUmtaNU9KMnNDQll3NzNYbFVUVU1Uc09CUUQrSHVyajR4RmpSczdsYS8zVUpmNzdkTlJHSG9FMnpNcEJuWnhnVCtiUVBoelE4S1c3WW8xczI2bEZsb3hTSlYvdis4dTk0My9TS2lKbzNLcXpLUmVNN1NPMlhHaWc4Tlo3TVlKQ3g3OHdOWW9mMzhMVk9tRThWdVBzZU1XZHFzTVR5cDE1aEFiU2o4ZkZ1SThwZXRNdGdPQmtOdEJvejRiS0pmMTFNS3Bn + + +### https://qscbm187531.118pan.com/b1102853 +#@no-redirect +POST https://qscbm187531.118pan.com/ajax.php +Content-Type: application/x-www-form-urlencoded; charset=UTF-8 + + diff --git a/web-service/src/main/resources/http-tools/test.http b/web-service/src/main/resources/http-tools/test.http index e493e68..9f88979 100644 --- a/web-service/src/main/resources/http-tools/test.http +++ b/web-service/src/main/resources/http-tools/test.http @@ -239,3 +239,11 @@ GET http://127.0.0.1:6401/parser?url=https://kuwo.cn/play_detail/395500809 http://127.0.0.1:6401/n1/statisticsInfo +### 118pan PASS +# @no-redirect +GET http://127.0.0.1:6400/parser?url=https://qscbm187531.118pan.com/b1102853 + + +### vyuyun PASS +# @no-redirect +GET http://127.0.0.1:6400/parser?url=https://www.vyuyun.com/s/QMa6ie?password=I4KG7H&pwd=I4KG7H