diff --git a/README.md b/README.md index 6e64616..a4215c1 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ # lz-cow-api 蓝奏云-奶牛快传的直链解析的API服务 +使用Jdk17+Vert.x4.4.1+Jsoup +Core模块集成Vert.x实现声明式路由API 示例: ``` // 解析并重定向到直链 ### # @no-redirect -GET http://127.0.0.1:6400/parse?url=https://lanzoux.com/ia2cntg +GET http://127.0.0.1:6400/parser?url=https://lanzoux.com/ia2cntg ### # @no-redirect -GET http://127.0.0.1:6400/parse?url=https://cowtransfer.com/s/9a644fe3e3a748 +GET http://127.0.0.1:6400/parser?url=https://cowtransfer.com/s/9a644fe3e3a748 // Rest请求(只提供共享文件Id): cow 奶牛快传; lz 蓝奏云 ### diff --git a/bin/lz-api.service b/bin/lz-api.service new file mode 100644 index 0000000..7d7188e --- /dev/null +++ b/bin/lz-api.service @@ -0,0 +1,18 @@ +[Unit] +Description=lz-api +Documentation=https://qaiu.top +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +# User=USER +ExecStart=/usr/bin/java -server -Xmx128m -jar /root/java/lz-cow-api-web/lz-cow-api-web-0.0.1.jar +ExecStop=/bin/kill -s QUIT $MAINPID +Restart=always +StandOutput=syslog + +StandError=inherit + +[Install] +WantedBy=multi-user.target diff --git a/bin/service-install.sh b/bin/service-install.sh new file mode 100644 index 0000000..cb21cf6 --- /dev/null +++ b/bin/service-install.sh @@ -0,0 +1,10 @@ +cp ./lz-api.service /etc/systemd/system/ + +# 重新加载 systemd +systemctl daemon-reload + +# 运行服务 +systemctl start lz-api + +# 在系统启动时启动服务 +systemctl enable lz-api diff --git a/core/pom.xml b/core/pom.xml index f765612..0503ff2 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -14,11 +14,11 @@ 17 UTF-8 - 4.1.3 - 0.9.12 + 4.4.1 + 0.10.2 1.18.12 2.0.5 - 3.8.1 + 3.12.0 2.11.3 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 52690b8..aae1198 100644 --- a/core/src/main/java/cn/qaiu/vx/core/Deploy.java +++ b/core/src/main/java/cn/qaiu/vx/core/Deploy.java @@ -67,18 +67,21 @@ public final class Deploy { * 打印logo */ private void outLogo(JsonObject conf) { - Date date = new Date(); Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); - int year = calendar.get(Calendar.YEAR); - String logoTemplete = "\nWeb Server powered by: \n" + - " ____ ____ _ _ _ \n" + - "|_^^_| |_^^_| / |_ | | | | \n" + - " \\ \\ / /.---. _ .--.`| |-' _ __ | |__| |_ \n" + - " \\ \\ / // /__\\\\[ `/'`\\]| | [ \\ [ ]|____ _| \n" + - " \\ V / | \\__., | | | |, _ > ' < _| |_ \n" + - " \\_/ '.__.'[___] \\__/(_)[__]`\\_] |_____| \n" + - " Version: %s; Framework version: %s; %s©%d.\n\n"; + calendar.setTime(new Date()); + var year = calendar.get(Calendar.YEAR); + var logoTemplete = """ + + Web Server powered by:\s + ____ ____ _ _ _ \s + |_^^_| |_^^_| / |_ | | | | \s + \\ \\ / /.---. _ .--.`| |-' _ __ | |__| |_ \s + \\ \\ / // /__\\\\[ `/'`\\]| | [ \\ [ ]|____ _|\s + \\ V / | \\__., | | | |, _ > ' < _| |_ \s + \\_/ '.__.'[___] \\__/(_)[__]`\\_] |_____|\s + Version: %s; Framework version: %s; %s©%d. + + """; System.out.printf(logoTemplete, conf.getString("version_app"), diff --git a/lz-cow-api-web/src/main/java/cn/qaiu/lz/AppMain.java b/lz-cow-api-web/src/main/java/cn/qaiu/lz/AppMain.java index 6b653dc..c47f966 100644 --- a/lz-cow-api-web/src/main/java/cn/qaiu/lz/AppMain.java +++ b/lz-cow-api-web/src/main/java/cn/qaiu/lz/AppMain.java @@ -1,7 +1,9 @@ package cn.qaiu.lz; import cn.qaiu.vx.core.Deploy; +import cn.qaiu.vx.core.util.VertxHolder; import io.vertx.core.json.JsonObject; +import lombok.val; /** @@ -22,7 +24,6 @@ public class AppMain { * @param jsonObject 配置 */ private static void exec(JsonObject jsonObject) { - // } diff --git a/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/CowTool.java b/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/CowTool.java index 3585386..a0e969c 100644 --- a/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/CowTool.java +++ b/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/CowTool.java @@ -41,38 +41,36 @@ public class CowTool { } */ public static String parse(String fullUrl) throws IOException { - String uniqueUrl = fullUrl.substring(fullUrl.lastIndexOf('/') + 1); - String baseUrl = "https://cowtransfer.com/core/api/transfer/share"; - String result = Jsoup + var uniqueUrl = fullUrl.substring(fullUrl.lastIndexOf('/') + 1); + var baseUrl = "https://cowtransfer.com/core/api/transfer/share"; + var result = Jsoup .connect(baseUrl + "?uniqueUrl=" + uniqueUrl).ignoreContentType(true) .get() .text(); - ObjectMapper objectMapper = new ObjectMapper(); + var objectMapper = new ObjectMapper(); Map map = objectMapper.readValue(result, new TypeReference<>() { }); if ("success".equals(map.get("message")) && map.containsKey("data")) { Map data = CastUtil.cast(map.get("data")); - String guid = data.get("guid").toString(); + var guid = data.get("guid").toString(); Map firstFile = CastUtil.cast(data.get("firstFile")); - String fileId = firstFile.get("id").toString(); - String result2 = Jsoup + var fileId = firstFile.get("id").toString(); + var result2 = Jsoup .connect(baseUrl + "/download?transferGuid=" + guid + "&fileId=" + fileId) .ignoreContentType(true) .get() .text(); - Map map2 = objectMapper.readValue(result2, new TypeReference<>() { - }); + Map map2 = objectMapper.readValue(result2, new TypeReference<>() {}); if ("success".equals(map2.get("message")) && map2.containsKey("data")) { Map data2 = CastUtil.cast(map2.get("data")); - String downloadUrl = data2.get("downloadUrl").toString(); + var downloadUrl = data2.get("downloadUrl").toString(); if (StringUtils.isNotEmpty(downloadUrl)) { log.info("cow parse success: {}", downloadUrl); return downloadUrl; } } - } log.info("Cow parse field------------->end"); return null; diff --git a/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/LzTool.java b/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/LzTool.java index 668f3b4..2f8d3a4 100644 --- a/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/LzTool.java +++ b/lz-cow-api-web/src/main/java/cn/qaiu/lz/common/util/LzTool.java @@ -18,27 +18,26 @@ import java.util.regex.Pattern; public class LzTool { public static String parse(String fullUrl) throws Exception { - String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3"; - String url = fullUrl.substring(0, fullUrl.lastIndexOf('/') + 1); - String id = fullUrl.substring(fullUrl.lastIndexOf('/') + 1); + var userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3"; + var url = fullUrl.substring(0, fullUrl.lastIndexOf('/') + 1); + var id = fullUrl.substring(fullUrl.lastIndexOf('/') + 1); Map header = new HashMap<>(); header.put("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"); header.put("referer", url); - /* // 部分链接需要设置安卓UA sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111" sec-ch-ua-mobile: ?1 sec-ch-ua-platform: "Android" */ - String userAgent2 = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36"; - + var userAgent2 = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36"; Map header2 = new HashMap<>(); header2.put("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"); header2.put("sec-ch-ua-mobile", "sec-ch-ua-mobile"); header2.put("sec-ch-ua-platform", "Android"); header2.put("referer", url); + //第一次请求,获取iframe的地址 String result = Jsoup.connect(url + id) .userAgent(userAgent) @@ -75,11 +74,11 @@ public class LzTool { .text() .replace("\\", ""); //json转为map - params = new ObjectMapper().readValue(result, new TypeReference>() {}); + params = new ObjectMapper().readValue(result, new TypeReference<>() {}); // System.out.println(params); //通过json的数据拼接出最终的URL发起第最终请求,并得到响应信息头 url = params.get("dom") + "/file/" + params.get("url"); - Map headers = Jsoup.connect(url) + var headers = Jsoup.connect(url) .ignoreContentType(true) .userAgent(userAgent2) .headers(header2) diff --git a/lz-cow-api-web/src/main/java/cn/qaiu/lz/web/http/ServerApi.java b/lz-cow-api-web/src/main/java/cn/qaiu/lz/web/http/ServerApi.java index 12c07cc..8791fa6 100644 --- a/lz-cow-api-web/src/main/java/cn/qaiu/lz/web/http/ServerApi.java +++ b/lz-cow-api-web/src/main/java/cn/qaiu/lz/web/http/ServerApi.java @@ -36,14 +36,14 @@ public class ServerApi { return JsonResult.data("ok"); } - @RouteMapping(value = "/parse", method = RouteMethod.GET) + @RouteMapping(value = "/parser", method = RouteMethod.GET) public void parse(HttpServerResponse response, String url) throws Exception { if (url.contains("lanzou")) { - String urlDownload = LzTool.parse(url); + var urlDownload = LzTool.parse(url); log.info("url = {}", urlDownload); response.putHeader("location", urlDownload).setStatusCode(302).end(); } else if (url.contains("cowtransfer.com")) { - String urlDownload = CowTool.parse(url); + var urlDownload = CowTool.parse(url); response.putHeader("location", urlDownload).setStatusCode(302).end(); } @@ -51,30 +51,30 @@ public class ServerApi { @RouteMapping(value = "/lz/:id", method = RouteMethod.GET) public void lzParse(HttpServerResponse response, String id) throws Exception { - String url = "https://wwa.lanzoux.com/" + id; - String urlDownload = LzTool.parse(url); + var url = "https://wwa.lanzoux.com/" + id; + var urlDownload = LzTool.parse(url); log.info("url = {}", urlDownload); response.putHeader("location", urlDownload).setStatusCode(302).end(); } @RouteMapping(value = "/cow/:id", method = RouteMethod.GET) public void cowParse(HttpServerResponse response, String id) throws Exception { - String url = "https://cowtransfer.com/s/" + id; - String urlDownload = CowTool.parse(url); + var url = "https://cowtransfer.com/s/" + id; + var urlDownload = CowTool.parse(url); response.putHeader("location", urlDownload).setStatusCode(302).end(); } @RouteMapping(value = "/json/lz/:id", method = RouteMethod.GET) public JsonResult lzParseJson(HttpServerResponse response, String id) throws Exception { - String url = "https://wwa.lanzoux.com/" + id; - String urlDownload = LzTool.parse(url); + var url = "https://wwa.lanzoux.com/" + id; + var urlDownload = LzTool.parse(url); log.info("url = {}", urlDownload); return JsonResult.data(urlDownload); } @RouteMapping(value = "/json/cow/:id", method = RouteMethod.GET) public JsonResult cowParseJson(HttpServerResponse response, String id) throws Exception { - String url = "https://cowtransfer.com/s/" + id; + var url = "https://cowtransfer.com/s/" + id; return JsonResult.data(CowTool.parse(url)); } } diff --git a/lz-cow-api-web/src/main/resources/1.http b/lz-cow-api-web/src/main/resources/1.http index 93d5962..555b552 100644 --- a/lz-cow-api-web/src/main/resources/1.http +++ b/lz-cow-api-web/src/main/resources/1.http @@ -2,10 +2,10 @@ GET http://127.0.0.1:6400/api/serverApi/test3?fullUrl=https://wwp.lanzoux.com/iNvid035jgcb ### # @no-redirect -GET http://127.0.0.1:6400/parse?url=https://lanzoux.com/ia2cntg +GET http://127.0.0.1:6400/parser?url=https://lanzoux.com/ia2cntg ### # @no-redirect -GET http://127.0.0.1:6400/parse?url=https://cowtransfer.com/s/9a644fe3e3a748 +GET http://127.0.0.1:6400/parser?url=https://cowtransfer.com/s/9a644fe3e3a748 ### # @no-redirect GET http://127.0.0.1:6400/cow/9a644fe3e3a748