From 4158f869a33ca40780ccd5d8150c38b32de6b6a9 Mon Sep 17 00:00:00 2001
From: qaiu <736226400@qq.com>
Date: Wed, 23 Oct 2024 18:04:34 +0800
Subject: [PATCH] 0.0
---
.../src/main/java/cn/qaiu/parser/PanBase.java | 4 +
.../cn/qaiu/parser/PanDomainTemplate.java | 65 +++++++++-
.../impl/{MkgTool.java => MkgsTool.java} | 80 ++++++++-----
.../java/cn/qaiu/parser/impl/MkwTool.java | 19 ++-
.../java/cn/qaiu/parser/impl/MneTool.java | 36 ------
.../java/cn/qaiu/parser/impl/MnesTool.java | 54 +++++++++
.../src/main/java/cn/qaiu/util/AESUtils.java | 69 -----------
.../src/main/java/cn/qaiu/util/JsContent.java | 4 +-
.../main/java/cn/qaiu/util/JsExecUtils.java | 13 +-
.../main/resources/http-tools/pan-mkg.http | 113 +++++++++++++++++-
10 files changed, 305 insertions(+), 152 deletions(-)
rename parser/src/main/java/cn/qaiu/parser/impl/{MkgTool.java => MkgsTool.java} (50%)
delete mode 100644 parser/src/main/java/cn/qaiu/parser/impl/MneTool.java
create mode 100644 parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java
diff --git a/parser/src/main/java/cn/qaiu/parser/PanBase.java b/parser/src/main/java/cn/qaiu/parser/PanBase.java
index 595c77d..ca74bc5 100644
--- a/parser/src/main/java/cn/qaiu/parser/PanBase.java
+++ b/parser/src/main/java/cn/qaiu/parser/PanBase.java
@@ -124,4 +124,8 @@ public abstract class PanBase implements IPanTool {
}
}
+ protected void complete(String url) {
+ promise.complete(url);
+ }
+
}
diff --git a/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java b/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java
index 667fc65..f01b01e 100644
--- a/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java
+++ b/parser/src/main/java/cn/qaiu/parser/PanDomainTemplate.java
@@ -2,6 +2,10 @@ package cn.qaiu.parser;
import cn.qaiu.parser.impl.*;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.stream.Collectors;
+
/**
* 枚举类 PanDomainTemplate 定义了不同网盘服务的模板信息,包括:
*
@@ -75,21 +79,54 @@ public enum PanDomainTemplate {
"https://474b\\.com/file/(.+)",
"https://474b.com/file/{shareKey}",
CtTool.class),
+
+ // =====================音乐类解析 分享链接标志->MxxS (单歌曲/普通音质)==========================
// http://163cn.tv/xxx
- MNE("网易云音乐",
+ MNES("网易云音乐分享",
"http(s)?://163cn\\.tv/(.+)",
"http://163cn.tv/{shareKey}",
- MneTool.class),
+ MnesTool.class),
+ MNE("网易云音乐",
+ "https://music\\.163\\.com/(#/)?song\\?id=(.+)",
+ "https://music.163.com/#/song?id={shareKey}",
+ MnesTool.MneTool.class),
// https://c6.y.qq.com/base/fcgi-bin/u?__=xxx
- MQQ("QQ音乐",
+ MQQS("QQ音乐分享",
"https://(.+)\\.y\\.qq\\.com/base/fcgi-bin/u\\?__=(.+)",
"https://c6.y.qq.com/base/fcgi-bin/u?__={shareKey}",
MqqTool.class),
+ // https://y.qq.com/n/ryqq/songDetail/000XjcLg0fbRjv?songtype=0
+ MQQ("QQ音乐",
+ "https://y\\.qq\\.com/n/ryqq/songDetail/(.+)\\?.*",
+ "https://y.qq.com/n/ryqq/songDetail/{shareKey}",
+ MqqTool.class),
+
// https://t1.kugou.com/song.html?id=xxx
- MKG("酷狗音乐",
+ MKGS("酷狗音乐分享",
"https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
"https://t1.kugou.com/song.html?id={shareKey}",
- MkgTool.class),
+ MkgsTool.class),
+ // https://www.kugou.com/share/2bi8Fe9CSV3.html?id=2bi8Fe9CSV3#6ed9gna4"
+ MKGS2("酷狗音乐分享2",
+ "https://www\\.kugou\\.com/share/(.+).html\\?.*",
+ "https://www.kugou.com/share/{shareKey}.html",
+ MkgsTool.Mkgs2Tool.class),
+ // https://www.kugou.com/mixsong/2bi8Fe9CSV3
+ MKG("酷狗音乐",
+ "https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
+ "https://www.kugou.com/mixsong/{shareKey}",
+ MkgsTool.MkgTool.class),
+ //
+ MKWS("酷我音乐分享*",
+ "https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
+ "https://t1.kugou.com/song.html?id={shareKey}",
+ MkwTool.class),
+ //
+ MMGS("咪咕音乐分享",
+ "https://(.+)\\.kugou\\.com/song\\.html\\?id=(.+)",
+ "https://t1.kugou.com/song.html?id={shareKey}",
+ MkwTool.class),
+ // =====================私有盘解析==========================
// https://pan.huang1111.cn/s/xxx
// 通用域名([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}
CE("Cloudreve",
@@ -133,4 +170,22 @@ public enum PanDomainTemplate {
public Class extends IPanTool> getToolClass() {
return toolClass;
}
+
+ public static void main(String[] args) {
+ // 校验重复
+ Set collect =
+ Arrays.stream(PanDomainTemplate.values()).map(PanDomainTemplate::getRegexPattern).collect(Collectors.toSet());
+ if (collect.size() collect2 =
+ Arrays.stream(PanDomainTemplate.values()).map(PanDomainTemplate::getStandardUrlTemplate).collect(Collectors.toSet());
+ if (collect2.size()分享链接1
+ * 分享链接2
+ * 分享链接3
+ * 歌曲链接1
*/
-public class MkgTool extends PanBase {
+public class MkgsTool extends PanBase {
public static final String API_URL = "https://m.kugou.com/app/i/getSongInfo.php?cmd=playInfo&hash={hash}";
@@ -57,7 +60,7 @@ public class MkgTool extends PanBase {
headers.set("Upgrade-Insecure-Requests", "1");
};
- public MkgTool(ShareLinkInfo shareLinkInfo) {
+ public MkgsTool(ShareLinkInfo shareLinkInfo) {
super(shareLinkInfo);
}
@@ -66,32 +69,55 @@ public class MkgTool extends PanBase {
// String shareUrl = "https://t1.kugou.com/song.html?id=2bi8Fe9CSV3";
clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
String locationURL = res.headers().get("Location");
- client.getAbs(locationURL).putHeaders(headers).send().onSuccess(res2->{
- String body = res2.bodyAsString();
- // 正则表达式匹配 hash 字段
- String regex = "\"hash\"\s*:\s*\"([A-F0-9]+)\"";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(body);
-
- // 查找并输出 hash 字段的值
- if (matcher.find()) {
- String hashValue = matcher.group(1); // 获取第一个捕获组
- System.out.println(hashValue);
- client.getAbs(UriTemplate.of(API_URL)).setTemplateParam("hash", hashValue).send().onSuccess(res3 -> {
- JsonObject jsonObject = asJson(res3);
- System.out.println(jsonObject.encodePrettily());
- if (jsonObject.containsKey("url")) {
- promise.complete(jsonObject.getString("url"));
- } else {
- fail("下载链接不存在");
- }
- }).onFailure(handleFail(API_URL.replace("{hash}", hashValue)));
- } else {
- fail("歌曲hash匹配失败, 可能分享已失效");
- }
- }).onFailure(handleFail(locationURL));
+ downUrl(locationURL);
}).onFailure(handleFail(shareUrl));
return promise.future();
}
+
+ protected void downUrl(String locationURL) {
+ client.getAbs(locationURL).putHeaders(headers).send().onSuccess(res2->{
+ String body = res2.bodyAsString();
+ // 正则表达式匹配 hash 字段
+ String regex = "\"hash\"\s*:\s*\"([A-F0-9]+)\"";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(body);
+
+ // 查找并输出 hash 字段的值
+ if (matcher.find()) {
+ String hashValue = matcher.group(1); // 获取第一个捕获组
+ System.out.println(hashValue);
+ client.getAbs(UriTemplate.of(API_URL)).setTemplateParam("hash", hashValue).send().onSuccess(res3 -> {
+ JsonObject jsonObject = asJson(res3);
+ System.out.println(jsonObject.encodePrettily());
+ if (jsonObject.containsKey("url")) {
+ promise.complete(jsonObject.getString("url"));
+ } else {
+ fail("下载链接不存在");
+ }
+ }).onFailure(handleFail(API_URL.replace("{hash}", hashValue)));
+ } else {
+ fail("歌曲hash匹配失败, 可能分享已失效");
+ }
+ }).onFailure(handleFail(locationURL));
+ }
+
+ public static class MkgTool extends MkgsTool{
+
+ public MkgTool(ShareLinkInfo shareLinkInfo) {
+ super(shareLinkInfo);
+ }
+
+ @Override
+ public Future parse() {
+ downUrl(shareLinkInfo.getStandardUrl());
+ return promise.future();
+ };
+ }
+
+ public static class Mkgs2Tool extends MkgTool{
+ public Mkgs2Tool(ShareLinkInfo shareLinkInfo) {
+ super(shareLinkInfo);
+ }
+ }
}
diff --git a/parser/src/main/java/cn/qaiu/parser/impl/MkwTool.java b/parser/src/main/java/cn/qaiu/parser/impl/MkwTool.java
index d266918..69682e0 100644
--- a/parser/src/main/java/cn/qaiu/parser/impl/MkwTool.java
+++ b/parser/src/main/java/cn/qaiu/parser/impl/MkwTool.java
@@ -4,6 +4,7 @@ import cn.qaiu.entity.ShareLinkInfo;
import cn.qaiu.parser.PanBase;
import cn.qaiu.util.JsExecUtils;
import io.vertx.core.Future;
+import io.vertx.core.json.JsonObject;
import io.vertx.uritemplate.UriTemplate;
import java.util.regex.Matcher;
@@ -41,9 +42,21 @@ public class MkwTool extends PanBase {
var token = matcher.group(2);
String sign = JsExecUtils.getKwSign(token, key);
System.out.println(sign);
- clientSession.getAbs(UriTemplate.of(API_URL)).setQueryParam("mid", "395500809")
- .putHeader("Secret", sign).putHeader("Cookie", key + "=" + token).send().onSuccess(res -> {
- System.out.println(res.bodyAsString());
+ clientSession.getAbs(UriTemplate.of(API_URL)).setTemplateParam("mid", "395500809")
+ .putHeader("Secret", sign).send().onSuccess(res -> {
+ JsonObject json = asJson(res);
+ log.debug(json.encodePrettily());
+ try {
+ if (json.getInteger("code") == 200) {
+ complete(json.getJsonObject("data").getString("url"));
+ } else {
+ fail("链接已失效");
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("解析失败");
+ }
});
}
}
diff --git a/parser/src/main/java/cn/qaiu/parser/impl/MneTool.java b/parser/src/main/java/cn/qaiu/parser/impl/MneTool.java
deleted file mode 100644
index 7fcd84e..0000000
--- a/parser/src/main/java/cn/qaiu/parser/impl/MneTool.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.qaiu.parser.impl;
-
-import cn.qaiu.entity.ShareLinkInfo;
-import cn.qaiu.parser.PanBase;
-import cn.qaiu.util.URLUtil;
-import io.vertx.core.Future;
-import io.vertx.uritemplate.UriTemplate;
-
-/**
- * 网易云音乐, 单歌曲直链解析
- * 示例分享1
- * 示例分享2
- */
-public class MneTool extends PanBase {
-
-
- public static final String API_URL = "https://music.163.com/song/media/outer/url?id={id}";
-
-
- public MneTool(ShareLinkInfo shareLinkInfo) {
- super(shareLinkInfo);
- }
-
- public Future parse() {
- String shareUrl = shareLinkInfo.getStandardUrl();
- clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
- String locationURL = res.headers().get("Location");
- String id = URLUtil.from(locationURL).getParam("id");
- clientNoRedirects.getAbs(UriTemplate.of(API_URL)).setTemplateParam("id", id).send()
- .onSuccess(res2 -> {
- promise.complete(res2.headers().get("Location"));
- }).onFailure(handleFail(API_URL.replace("{id}", id)));
- }).onFailure(handleFail(shareUrl));
- return promise.future();
- }
-}
diff --git a/parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java b/parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java
new file mode 100644
index 0000000..fbebd99
--- /dev/null
+++ b/parser/src/main/java/cn/qaiu/parser/impl/MnesTool.java
@@ -0,0 +1,54 @@
+package cn.qaiu.parser.impl;
+
+import cn.qaiu.entity.ShareLinkInfo;
+import cn.qaiu.parser.PanBase;
+import cn.qaiu.util.URLUtil;
+import io.vertx.core.Future;
+import io.vertx.uritemplate.UriTemplate;
+
+/**
+ * 网易云音乐, 单歌曲直链解析
+ * 示例分享1
+ * 示例分享2
+ */
+public class MnesTool extends PanBase {
+
+
+ public static final String API_URL = "https://music.163.com/song/media/outer/url?id={id}";
+
+
+ public MnesTool(ShareLinkInfo shareLinkInfo) {
+ super(shareLinkInfo);
+ }
+
+ public Future parse() {
+ String shareUrl = shareLinkInfo.getStandardUrl();
+ clientNoRedirects.getAbs(shareUrl).send().onSuccess(res -> {
+ String locationURL = res.headers().get("Location");
+ downUrl(locationURL);
+ }).onFailure(handleFail(shareUrl));
+ return promise.future();
+ }
+
+ protected void downUrl(String locationURL) {
+ String id = URLUtil.from(locationURL).getParam("id");
+ clientNoRedirects.getAbs(UriTemplate.of(API_URL)).setTemplateParam("id", id).send()
+ .onSuccess(res2 -> {
+ promise.complete(res2.headers().get("Location"));
+ }).onFailure(handleFail(API_URL.replace("{id}", id)));
+ }
+
+
+ public static class MneTool extends MnesTool{
+
+ public MneTool(ShareLinkInfo shareLinkInfo) {
+ super(shareLinkInfo);
+ }
+
+ @Override
+ public Future parse() {
+ downUrl(shareLinkInfo.getStandardUrl());
+ return promise.future();
+ }
+ }
+}
diff --git a/parser/src/main/java/cn/qaiu/util/AESUtils.java b/parser/src/main/java/cn/qaiu/util/AESUtils.java
index 2514f39..767ce10 100644
--- a/parser/src/main/java/cn/qaiu/util/AESUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/AESUtils.java
@@ -329,73 +329,4 @@ public class AESUtils {
return _0x53928f + "-" + _0x430930 + "-" + _0x49ec94;
}
-
- public static String encrypt(String str, String pwd) {
- if (pwd == null || pwd.length() <= 0) {
- throw new IllegalArgumentException("Please enter a password with which to encrypt the message.");
- }
-
- // 生成 prand 值
- StringBuilder prand = new StringBuilder();
- for (int i = 0; i < pwd.length(); i++) {
- prand.append((int) pwd.charAt(i));
- }
-
- // 计算 sPos, mult, incr, modu
- int sPos = prand.length() / 5;
- long mult = Long.parseLong(prand.substring(sPos, sPos + 1) +
- prand.substring(sPos * 2, sPos * 2 + 1) +
- prand.substring(sPos * 3, sPos * 3 + 1) +
- prand.substring(sPos * 4, sPos * 4 + 1) +
- prand.substring(sPos * 5, sPos * 5 + 1));
- int incr = (int) Math.ceil(pwd.length() / 2.0);
- long modu = (long) Math.pow(2, 31) - 1;
-
- if (mult < 2) {
- throw new IllegalArgumentException("Algorithm cannot find a suitable hash. Please choose a different password.");
- }
-
- // 生成 salt 并加到 prand 上
- long salt = Math.round(Math.random() * 1000000000) % 100000000;
- prand.append(salt);
-
- // 使用 BigInteger 处理超过 Long 范围的 prand 值
- BigInteger prandValue = new BigInteger(prand.toString());
- while (prandValue.toString().length() > 10) {
- prandValue = prandValue.divide(BigInteger.TEN).add(prandValue.remainder(BigInteger.TEN));
- }
-
- // 将 prand 转换为 long 进行后续处理
- prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
-
- // 加密过程
- StringBuilder encStr = new StringBuilder();
- for (int i = 0; i < str.length(); i++) {
- // 将字符和异或的结果强制转换为 int
- int encChr = (int) (str.charAt(i) ^ (int) ((prandValue.doubleValue() / modu) * 255));
- String hexStr = Integer.toHexString(encChr);
- if (hexStr.length() < 2) {
- encStr.append("0");
- }
- encStr.append(hexStr);
-
- prandValue = prandValue.multiply(BigInteger.valueOf(mult)).add(BigInteger.valueOf(incr)).mod(BigInteger.valueOf(modu));
- }
-
- // 将 salt 转换为 16 进制并追加到加密结果
- String saltHex = Long.toHexString(salt);
- while (saltHex.length() < 8) {
- saltHex = "0" + saltHex;
- }
- encStr.append(saltHex);
-
- return encStr.toString();
- }
-
- public static void main(String[] args) {
- // 示例
- String encrypted = encrypt("HelloWorld", "password123");
- System.out.println("Encrypted String: " + encrypted);
- }
-
}
diff --git a/parser/src/main/java/cn/qaiu/util/JsContent.java b/parser/src/main/java/cn/qaiu/util/JsContent.java
index 02617b0..78fbcd8 100644
--- a/parser/src/main/java/cn/qaiu/util/JsContent.java
+++ b/parser/src/main/java/cn/qaiu/util/JsContent.java
@@ -167,8 +167,10 @@ public interface JsContent {
}
var salt = Math.round(Math.random() * 1000000000) % 100000000;
prand += salt;
+ var flag = 1;
while (prand.length > 10) {
- prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
+ prand = (parseInt(prand.substring(0, 10)) + (flag ?parseFloat(prand.substring(10, prand.length)) : parseInt(prand.substring(10, prand.length)) )).toString();
+ flag = 0;
}
prand = (mult * prand + incr) % modu;
var enc_chr = "";
diff --git a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java
index 9d9b830..e23dcc4 100644
--- a/parser/src/main/java/cn/qaiu/util/JsExecUtils.java
+++ b/parser/src/main/java/cn/qaiu/util/JsExecUtils.java
@@ -8,8 +8,6 @@ import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
-import static cn.qaiu.util.AESUtils.encrypt;
-
/**
* 执行Js脚本
*
@@ -85,13 +83,10 @@ public class JsExecUtils {
public static void main(String[] args) {
//encrypt("ZYcEEs2JdncXG8zAaytJiXxmbyhH2wxb", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324")
- //'7909e8e754545a61ba4bc3c90c82cb6c69b6859d5ea2e46a6bf913d1b4f11dee011dced1'
- // 1e3170f1cc1ca75172409e443b89261ec777e190ebc595b458b8e114a912a9544d2b467323f8ca011b2ed0
- // 93a44ef48949d950c91303c84d36
- // 95dea502a45fb153f68d8da0bf8e4a095a001e396f60837e9c1b58a48969eb77038234d2
- // 93c3750f6ccf9d11b5c304b32495
- System.out.println(getKwSign("Hm_lvt_cdb524f42f0ce19b169a8071123a4797", "1729503755"));
- System.out.println(getKwSign("HelloWorld", "password123"));
+ // 1a9b1a33222a78d6506e0aeaacf5b9b69984954de79e98e3ef4766c009025b7000000000
+ // acb0a82caa6ee641ca99ad81ace7081f58412e2148619827aa0a038a8d76c75000000000
+ // f7a05b893131238ee4d1f31a85401b64056bb09988b5b9c2b87c12542578360600000000
+ System.out.println(getKwSign("c7nkKBeXXzCyTQ8Wc8DRNYc4Th3f6hTE", "Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324"));
}
diff --git a/web-service/src/main/resources/http-tools/pan-mkg.http b/web-service/src/main/resources/http-tools/pan-mkg.http
index 33e4b30..19df5d8 100644
--- a/web-service/src/main/resources/http-tools/pan-mkg.http
+++ b/web-service/src/main/resources/http-tools/pan-mkg.http
@@ -2,6 +2,23 @@
#@no-redirect
https://t1.kugou.com/song.html?id=2bi8Fe9CSV3
+###
+#@no-cookie-jar
+#@no-redirect
+https://www.kugou.com/mixsong/8odv4ef8.html
+accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
+if-modified-since: Mon, 21 Oct 2024 08:45:50 GMT
+priority: u=0, i
+sec-ch-ua: "Microsoft Edge";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
+sec-ch-ua-mobile: ?0
+sec-ch-ua-platform: "Windows"
+sec-fetch-dest: document
+sec-fetch-mode: navigate
+sec-fetch-site: none
+sec-fetch-user: ?1
+upgrade-insecure-requests: 1
+user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
+
###
GET https://www.kugou.com/share/2bi8Fe9CSV3.html?id=2bi8Fe9CSV3
@@ -22,8 +39,8 @@ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
https://www.kuwo.cn/api/v1/www/music/playUrl?mid=395500809&type=music&httpsStatus=1&reqId=&plat=web_www&from=
-Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=c7nkKBeXXzCyTQ8Wc8DRNYc4Th3f6hTE
-Secret: 4067e5c95a650d73865fe3e81feb897a6bf7b58579a3ff335de848ffb0ee31c9058333c0
+Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=ikFKTAXkzeYGTnNTjE3i6Y7tmGSjA28r
+Secret: 4a3bcde945663040a440f9d61fd4ff79628ac2be01a3ab7364c728f3c7b45dfe027e25ac
###
https://nmobi.kuwo.cn/mobi.s?f=kuwo&q=NI8S5evAnmGldi4g47EsqtfDbGsJckckbTQQd2LAgmDPITUWSd51OkjHRFj6xHPEQxNN6u+tD3K2e3HYhbE4U0pUYwqjd2kt
@@ -43,3 +60,95 @@ https://www.kuwo.cn/api/v1/www/music/playUrl?mid=395500809&type=music&httpsStatu
Cookie: Hm_Iuvt_cdb524f42f23cer9b268564v7y735ewrq2324=eZCHRdwSSYkG4d5XRGYtXrMpAXmGE5mh
Secret: 460ac8ea43431f788d7ccbd67fde84755a88a8a36f88d17748d816dec3b308e402f768e8
+
+
+###
+http://c.migu.cn/003sST?ifrom=1d0582bb0148c334cfc5bdea0805ddd4
+
+
+## https://blog.csdn.net/panjiapengfly/article/details/103352409
+
+###
+#@no-cookie-jar
+https://h5.nf.migu.cn/app/v3/p/share/song/index.html?id=600913000007297943&ifrom=1d0582bb0148c334cfc5bdea0805ddd4
+
+
+###
+https://c.musicapp.migu.cn/MIGUM2.0/v1.0/content/resourceinfo.do?resourceId=600913000007297943&resourceType=1
+Host: c.migu.cn
+ua: Android_migu
+subchannel: 014000D
+channel: 014000D
+IMEI: h5page
+IMSI: h5page
+ogId: h5page[ac6c]
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+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
+Connection: keep-alive
+
+###
+https://music.migu.cn/v3/api/music/audioPlayer/songs?type=1©rightId=
+
+### 咪咕
+#@no-cookie-jar
+#@no-redirect
+https://freetyst.nf.migu.cn/public/product9th/product46/2024/09/2920/2024%E5%B9%B409%E6%9C%8829%E6%97%A515%E7%82%B949%E5%88%86%E7%B4%A7%E6%80%A5%E5%86%85%E5%AE%B9%E5%87%86%E5%85%A5%E7%A7%91%E5%A4%A7%E8%AE%AF%E9%A3%9E1%E9%A6%96915173/%E6%AD%8C%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/6326951FKBL200422.mp3?Key=8358490c98c0156f&Tim=1729584947949&channelid=00&msisdn=e29ddec7374448c7aa1086b783561949&CI=6326951FKBL2600929000000926999&F=000009
+
+###
+#@no-cookie-jar
+#@no-redirect
+https://freetyst.nf.migu.cn/public/ringmaker01/n3/Product/2010/12/2010%E5%B9%B411%E6%9C%8816%E6%97%A5%E9%A2%84%E5%AE%A1%E5%94%90%E7%BE%BD%E6%96%87%E5%8C%9612%E9%A6%96/%E5%85%A8%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_40_16_Stero/%E5%9F%8B%E8%91%AC%E5%86%AC%E5%A4%A9-%E6%B1%AA%E8%8B%8F%E6%B3%B7%2B%E9%98%BF%E6%82%84.mp3?Key=fce819d43d6876aa&Tim=1729585192341&channelid=00&msisdn=48a3433be88f44c8a3035b639d6ab6e1&CI=600787010992600902000008734476&F=000009
+
+###
+https://freetyst.nf.migu.cn/public/ringmaker01/n3/Product/2010/12/2010%E5%B9%B411%E6%9C%8816%E6%97%A5%E9%A2%84%E5%AE%A1%E5%94%90%E7%BE%BD%E6%96%87%E5%8C%9612%E9%A6%96/%E5%85%A8%E6%9B%B2%E4%B8%8B%E8%BD%BD/MP3_320_16_Stero/%E5%9F%8B%E8%91%AC%E5%86%AC%E5%A4%A9-%E6%B1%AA%E8%8B%8F%E6%B3%B7%2B%E9%98%BF%E6%82%84.mp3?Key=ab9f206abef3d9c6&Tim=1729585317592&channelid=00&msisdn=1969e2c2c1bf417087820aeef52517b2&CI=600787010992600902000008734476&F=020010
+
+
+###
+# curl 'https://music.migu.cn/v3/api/music/audioPlayer/getPlayInfo?dataType=2&data=U2FsdGVkX1%2FPz5AMzvLcNBppyNv%2FU5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0%3D&secKey=jRw3a%2BdcOiZzIy%2FUdr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK%2Bd2BrX%2FNp7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc%2FFPBicIWjki%2BUD%2F1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8%3D'
+# -H 'accept: application/json, text/plain, */*'
+# -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8'
+# -H 'cache-control: no-cache'
+# -H 'cookie: mgAppH5CookieId=1253704085-1rriorf89d9c3e8cd314ff4011d5e4-1729576539; migu_cookie_id=81932e99-6f88-400b-89e9-af6dd5121945-n41729577064410; mg_uem_user_id_9fbe6599400e43a4a58700a822fd57f8=9c30c042-164c-423d-8476-e6d6586c6849; cookieId=ywE9A06YDMgOkf7EmsHa86Fr8ALGCrE1729577075545; idmpauth=true@passport.migu.cn; migu_music_status=true; migu_music_uid=a9d3d76a-11c1-4c14-b851-0b8ae3fda0dd; migu_music_avatar=%252F%252Fpl.migu.cn%252Fgroup2%252FM00%252F00%252F0F%252FCrUBJGEWf42IbL_lAABuET5vDLsAAALgwLGksAAAG4p174.jpg; migu_music_nickname=%E5%8D%83%E7%99%BE%E5%BA%A6; migu_music_level=0; migu_music_credit_level=3; migu_music_platinum=0; migu_music_msisdn=WGFyKQr5ehr1A6YwwgLxVA%3D%3D; migu_music_email=; migu_music_passid=84433242749912; migu_music_sid=s%3AbnlUvPcL1CjGvW3SpgTHmdnUhZ1b02IS.uwi4h8%2FYo7zk3ypFW%2FK%2Frf5r2i6EixZWnskoTvsryJk; player_stop_open=0; playlist_adding=1; addplaylist_has=1; audioplayer_new=1; add_play_now=1; audioplayer_exist=1; playlist_change=0; WT_FPC=id=20722ce68560244cd4a1729576539758:lv=1729577748219:ss=1729576539758; audioplayer_open=1'
+# -H 'dnt: 1'
+# -H 'pragma: no-cache'
+# -H 'priority: u=1, i'
+# -H 'referer: https://music.migu.cn/v3/music/player/audio'
+# -H 'sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"'
+# -H 'sec-ch-ua-mobile: ?0'
+# -H 'sec-ch-ua-platform: "Windows"'
+# -H 'sec-fetch-dest: empty'
+# -H 'sec-fetch-mode: cors'
+# -H 'sec-fetch-site: same-origin'
+# -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
+#dataType: 2
+#data: U2FsdGVkX1/Pz5AMzvLcNBppyNv/U5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0=
+#secKey: jRw3a+dcOiZzIy/Udr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK+d2BrX/Np7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc/FPBicIWjki+UD/1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8=
+# auditionsFlag
+#:
+#0
+#copyrightId
+#:
+#"60078701099"
+#type
+#:
+#1
+GET https://music.migu.cn/v3/api/music/audioPlayer/getPlayInfo?dataType=2&data=U2FsdGVkX1%2FPz5AMzvLcNBppyNv%2FU5YkiRDE6M7BWD86KDZZv0U43iSMOPt8Ol5gvpGWDLCbi2O3ItIvdAG0PSNH6JxzPnN7Xxoo7rJ3mZ0%3D&secKey=jRw3a%2BdcOiZzIy%2FUdr2fHBHuBrkfP3AwhEpCOM92fZPHnjoFGlJK%2Bd2BrX%2FNp7mwtNwF8Bk7cCqwmD2eYYhnmUre7jwPrR33oVjT7B0FXXv7yc%2FFPBicIWjki%2BUD%2F1xBI5Hice5r6LaOXRO17luFV1ijw94s8iwEbWRJdnia2P8%3D
+accept: application/json, text/plain, */*
+accept-language: zh-CN,zh;q=0.9,en;q=0.8
+cache-control: no-cache
+cookie: mgAppH5CookieId=1253704085-1rriorf89d9c3e8cd314ff4011d5e4-1729576539; migu_cookie_id=81932e99-6f88-400b-89e9-af6dd5121945-n41729577064410; mg_uem_user_id_9fbe6599400e43a4a58700a822fd57f8=9c30c042-164c-423d-8476-e6d6586c6849; cookieId=ywE9A06YDMgOkf7EmsHa86Fr8ALGCrE1729577075545; idmpauth=true@passport.migu.cn; migu_music_status=true; migu_music_uid=a9d3d76a-11c1-4c14-b851-0b8ae3fda0dd; migu_music_avatar=%252F%252Fpl.migu.cn%252Fgroup2%252FM00%252F00%252F0F%252FCrUBJGEWf42IbL_lAABuET5vDLsAAALgwLGksAAAG4p174.jpg; migu_music_nickname=%E5%8D%83%E7%99%BE%E5%BA%A6; migu_music_level=0; migu_music_credit_level=3; migu_music_platinum=0; migu_music_msisdn=WGFyKQr5ehr1A6YwwgLxVA%3D%3D; migu_music_email=; migu_music_passid=84433242749912; migu_music_sid=s%3AbnlUvPcL1CjGvW3SpgTHmdnUhZ1b02IS.uwi4h8%2FYo7zk3ypFW%2FK%2Frf5r2i6EixZWnskoTvsryJk; player_stop_open=0; playlist_adding=1; addplaylist_has=1; audioplayer_new=1; add_play_now=1; audioplayer_exist=1; playlist_change=0; WT_FPC=id=20722ce68560244cd4a1729576539758:lv=1729577748219:ss=1729576539758; audioplayer_open=1
+dnt: 1
+pragma: no-cache
+priority: u=1, i
+referer: https://music.migu.cn/v3/music/player/audio
+sec-ch-ua: "Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
+sec-ch-ua-mobile: ?0
+sec-ch-ua-platform: "Windows"
+sec-fetch-dest: empty
+sec-fetch-mode: cors
+sec-fetch-site: same-origin
+user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
+
+###
+