Skip to content

Commit 827495a

Browse files
author
Taois
committed
feat: 优化夸克
1 parent f075389 commit 827495a

File tree

1 file changed

+125
-50
lines changed

1 file changed

+125
-50
lines changed

utils/pan/quark.js

Lines changed: 125 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* @since 1.0.0
1818
*/
1919

20-
import req from '../req.js';
20+
import {reqs} from '../req.js';
2121
import {ENV} from '../env.js';
2222
import COOKIE from '../cookieManager.js';
2323
import CryptoJS from "crypto-js";
@@ -143,16 +143,16 @@ class QuarkHandler {
143143
* @returns {Promise<void>}
144144
*/
145145
async initQuark() {
146-
if (this.token) {
147-
let exp = JSON.parse(CryptoJS.enc.Base64.parse(this.token.split('.')[1]).toString(CryptoJS.enc.Utf8))
148-
let now = Math.floor(Date.now() / 1000)
149-
if (exp.exp < now) {
150-
console.log('登录状态已过期,重新登录,请及时更换Token')
151-
} else {
152-
console.log('登录成功,继续使用,可使用时间截止到:' + (new Date(exp.exp * 1000)).toLocaleString())
153-
console.log('QuarkTV token获取成功:' + this.token)
154-
}
155-
}
146+
// if(this.token){
147+
// let exp = JSON.parse(CryptoJS.enc.Base64.parse(this.token.split('.')[1]).toString(CryptoJS.enc.Utf8))
148+
// let now = Math.floor(Date.now() / 1000)
149+
// if (exp.exp < now) {
150+
// console.log('登录状态已过期,重新登录,请及时更换Token')
151+
// } else {
152+
// console.log('登录成功,继续使用,可使用时间截止到:' + (new Date(exp.exp * 1000)).toLocaleString())
153+
// console.log('QuarkTV token获取成功:' + this.token)
154+
// }
155+
// }
156156
if (this.cookie) {
157157
console.log("cookie 获取成功");
158158
} else {
@@ -335,12 +335,12 @@ class QuarkHandler {
335335
let link = `${this.apiUrl}/${url}`
336336
// 发送请求 - 根据方法类型选择GET或POST请求
337337
const resp =
338-
method === 'get' ? await req.get(link, {
338+
method === 'get' ? await reqs.get(link, {
339339
headers: headers,
340340
}).catch((err) => {
341341
console.error(err.message);
342342
return err.response || {status: 500, data: {}};
343-
}) : await req.post(link, data, {
343+
}) : await reqs.post(link, data, {
344344
headers: headers,
345345
}).catch((err) => {
346346
console.error(err.message);
@@ -650,7 +650,6 @@ class QuarkHandler {
650650
const resCookie = cookieResDataSelf['set-cookie'];
651651
if (!resCookie) {
652652
console.log(`${from}自动更新夸克 cookie: 没返回新的cookie`);
653-
654653
return
655654
}
656655
const cookieObject = COOKIE.parse(resCookie);
@@ -719,40 +718,43 @@ class QuarkHandler {
719718
return CryptoJS.SHA256(data).toString();
720719
}
721720

722-
async refreshToken() {
723-
let data = JSON.stringify({
724-
"req_id": reqId,
725-
"app_ver": this.conf.appVer,
726-
"device_id": deviceID,
727-
"device_brand": "OPPO",
728-
"platform": "tv",
729-
"device_name": "PCRT00",
730-
"device_model": "PCRT00",
731-
"build_device": "aosp",
732-
"build_product": "PCRT00",
733-
"device_gpu": "Adreno%20(TM)%20640",
734-
"activity_rect": "%7B%7D",
735-
"channel": this.conf.channel,
736-
"refresh_token": this.token
737-
});
738-
let config = {
739-
method: 'POST',
740-
url: 'http://api.extscreen.com/quarkdrive',
741-
headers: {
742-
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; PCRT00 Build/N2G47O) AppleWebKit/533.1 (KHTML, like Gecko) Mobile Safari/533.1',
743-
'Connection': 'Keep-Alive',
744-
'Accept-Encoding': 'gzip',
745-
'Content-Type': 'application/json',
746-
'Cookie': 'sl-session=VIaxTAKF8mdJBhU2uda0zA=='
747-
},
748-
data: data
749-
};
750-
let req = await axios.request(config);
751-
if (req.status === 200) {
752-
ENV.set('uc_token_cookie', req.data.data.refresh_token)
753-
return await this.getDownload(shareId, stoken, fileId, fileToken, clean)
754-
}
755-
}
721+
// async refreshToken(shareId, stoken, fileId, fileToken, clean){
722+
// const timestamp = Math.floor(Date.now() / 1000).toString() + '000'; // 13位时间戳需调整
723+
// const deviceID = this.Addition.DeviceID || this.generateDeviceID(timestamp);
724+
// const reqId = this.generateReqId(deviceID, timestamp);
725+
// let data = JSON.stringify({
726+
// "req_id": reqId,
727+
// "app_ver": this.conf.appVer,
728+
// "device_id": deviceID,
729+
// "device_brand": "OPPO",
730+
// "platform": "tv",
731+
// "device_name": "PCRT00",
732+
// "device_model": "PCRT00",
733+
// "build_device": "aosp",
734+
// "build_product": "PCRT00",
735+
// "device_gpu": "Adreno%20(TM)%20640",
736+
// "activity_rect": "%7B%7D",
737+
// "channel": this.conf.channel,
738+
// "refresh_token": this.token
739+
// });
740+
// let config = {
741+
// method: 'POST',
742+
// url: 'http://api.extscreen.com/quarkdrive',
743+
// headers: {
744+
// 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; PCRT00 Build/N2G47O) AppleWebKit/533.1 (KHTML, like Gecko) Mobile Safari/533.1',
745+
// 'Connection': 'Keep-Alive',
746+
// 'Accept-Encoding': 'gzip',
747+
// 'Content-Type': 'application/json',
748+
// 'Cookie': 'sl-session=VIaxTAKF8mdJBhU2uda0zA=='
749+
// },
750+
// data: data
751+
// };
752+
// let req = await axios.request(config);
753+
// if(req.status === 200) {
754+
// ENV.set('quark_token_cookie',req.data.data.refresh_token)
755+
// return await this.getDownload(shareId, stoken, fileId, fileToken, clean)
756+
// }
757+
// }
756758

757759
async getDownload(shareId, stoken, fileId, fileToken, clean) {
758760
await this.initQuark()
@@ -1000,10 +1002,83 @@ class QuarkHandler {
10001002

10011003
}
10021004

1005+
async getToken() {
1006+
let t = Math.floor(new Date().getTime() / 1e3)
1007+
1008+
let data = JSON.stringify({
1009+
"conversation_id": "300000" + t,
1010+
"conversation_type": 3,
1011+
"msg_id": t + "000"
1012+
});
1013+
1014+
let config = {
1015+
method: 'POST',
1016+
url: 'https://drive-social-api.quark.cn/1/clouddrive/chat/conv/file/acquire_dl_token?pr=ucpro&fr=pc&sys=darwin&ve=3.19',
1017+
headers: {
1018+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.23.2 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch',
1019+
'Connection': 'keep-alive',
1020+
'Accept': 'application/json, text/plain, */*',
1021+
'Accept-Encoding': 'gzip, deflate, br',
1022+
'Content-Type': 'application/json',
1023+
'accept-language': 'zh-CN',
1024+
'origin': 'https://pan.quark.cn',
1025+
'sec-fetch-dest': 'empty',
1026+
'sec-fetch-mode': 'cors',
1027+
'sec-fetch-site': 'cross-site',
1028+
'sec-ch-ua': '"Not:A-Brand";v="99", "Chromium";v="112"',
1029+
'sec-ch-ua-mobile': '?0',
1030+
'sec-ch-ua-platform': '"Windows"',
1031+
'referer': 'https://pan.quark.cn/',
1032+
'Cookie': '_UP_A4A_11_=wb9ce1f8a7f74209b248cb5877a6a876; _UP_D_=pc; tfstk=gy2rZY6dQTBPmYbgblDFQOhX71M-pv7_ZJgIxkqnV40oVYZ3gkZN2Da7x2PEoyIJFYbJK2qTkbguRYTFLrko97gIP2kUvPSf5O6_2uHKEN_1C6GsZ4kK-9MhGxcbeD-R5O6_quHKKN__NjmeBVnnK0co-Ejq2qmoxy0oiEmZXv03-yj4mqnnK24nKirmkDDn-ycsi2063cllqNA0iO9nAbugqqJU2-ooaQEoupv33dGrSyg2Kp2q2kJ_DBpNOVVtPfguot9rLomUufNP7LzUxlFngJ8lVP40TymYMwRE7Wq76-GXxG0geo2tnj6Gbo2YPue4AHXncPg028DFIGHrE4DqDJ_vE2P0t8G-pUbEJ-r0EWSz_enc4z2LaeAEZmnq5iSVbveZi_88v3Rp9bFx0VsR2BdKZmnq5iS29BhoDmu10i5..; __uid=AARfyLe8Bke3UGL2FjhvNQn6; __sdid=AATHIp7rA8mvfKhhMvPnt0milUEzXi1ReJN0CjChc4LeUA6qYUdYA32jmaL/Lk2AA4s=; __pus=bd604e2725229c945e994c227de77f1cAASVpc7pXsTooap3JBI0XiJI9JU/JUngO9SJCOIRNOLXngLdOfozAiiwF9CnY/xOiEgE8NvKDDg1ZAwX7nVqe9H2ib5aMTAi+a2DfaPE6/6Won1vUOAfKCNELRmJOeYhVn3/eQUYx6B9EIw9HCYjQoKVh76daPI2lnp3QBTK/5zWGya9rVul08y86xpY3APre7I=; __kp=eb241d80-1ee6-11f1-85bf-6167dfcf1acd; __kuus=NenaSYNIw/O9SzABV2HtnjTDoH5aJthk7nOgDdt9pHeaJmMkCD/TY+jVFIrCn+WeFaQVR9h+E/YoStTBZAtB9va0ghzlZCgNuddki8Z8WOnYug==; __puus=2baf96cce907422be5e242bb1d280977AATi54Q/fKnsA5nM/iG/TZHL12hYZj/ELuUFbEwO/2jIXaSGwmvXppDKCITu73rdsZ1hRR0cY2QRpWdM0o+nFv65fCf5ZwPIaGHvUK9BOg3653jTngpTAj41u8kq5vTIDnPDPGWlYPYiUehDbyYBwxKYl12BFSjonkfKybr3Fpc2TYQcm566OQTrPzsupcOkOoa8CQllYvsoVyEBF2ZpiX/5'
1033+
},
1034+
data: data
1035+
};
1036+
let html = await axios.request(config)
1037+
if (html.status === 200) {
1038+
return html.data.data.token
1039+
}
1040+
}
1041+
1042+
//伪造token实现无限不转存
1043+
async getUrl(shareId, stoken, fileId, fileToken) {
1044+
await this.initQuark()
1045+
let token = await this.getToken()
1046+
let data = JSON.stringify({
1047+
"fids": [fileId],
1048+
"fids_token": [fileToken],
1049+
"pwd_id": shareId,
1050+
"stoken": stoken,
1051+
"speedup_session": "",
1052+
"token": token
1053+
});
1054+
let config = {
1055+
method: 'POST',
1056+
url: 'https://drive-pc.quark.cn/1/clouddrive/file/download?pr=ucpro&fr=pc',
1057+
headers: {
1058+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/3.20.0 Chrome/112.0.5615.165 Electron/24.1.3.8 Safari/537.36 Channel/pckk_other_ch',
1059+
'Connection': 'keep-alive',
1060+
'Accept': '*/*,application/json;charset=utf-8',
1061+
'Accept-Encoding': 'gzip, deflate, br, zstd',
1062+
'Content-Type': 'application/json',
1063+
'Cookie': 'b-user-id=7a421e0c-2ff4-1251-4069-cdfbfedcaf8d; _UP_A4A_11_=wb9cf15ce78d47ed921a9fab3faa85e8; xlly_s=1; __sdid=AAQCvlprpJtHMDSTmliW7CTXaxFJONVhZZyKc8NgJ6Y+XH4iO1v3Q8gYFeEi2hqeV4U=; _UP_D_=pc; __pus=97012d074b8d70d6eeaeb7dbe3fcb05dAAQB4QUahCaghYFA9y/NYud63QbrjWpcO/mp4OgGcA2UZ5O+VMUlfCpacaDzbRBV2O/DK9y9iAFBUL7iPmzdj2d9; __kp=ea759a90-1ed1-11f1-8f67-e7e56f2ee996; __kps=AARfyLe8Bke3UGL2FjhvNQn6; __ktd=axb8KS+96BcSmmEd+gddqg==; __uid=AARfyLe8Bke3UGL2FjhvNQn6; __puus=c6ca8123ab4024f139092c58678de061AATi54Q/fKnsA5nM/iG/TZHLzf8buD1i2D3OKKcgKFxmYvTq9ypLK3mbAQlXFlJz6zEGV7aROE4eXsRbMGviOH4EpwIMv8HZ3UUDPfRoIVsx+mV9xMqXujCxpQR96l9Alpe2B15pFBZl94/lBMSORn+M/cocX9mAe2wX82JvYhQYO46JRC1evvevyyyzaai9ItKcf72BRC6QzioBIic/XHI8; isg=BDg4TjMppS-k-Mk0_qdGtZTlCebKoZwrBz4YK3KgQXMmjdJ3GrWXu63lQY093VQD; tfstk=gTJiuT2wCC5_fZaEErWsOziN8jlKBO6X3EeAktQqTw7Ckctv0ty2knBOgVtv-Z7F2SJA0f_cTUs7_CCZSemDWnwA7NpAns8RR5Rx5qtFmULRuiSqcMkeuUYcGc_AuZYv0CnKeYK6ft62o4H-emTk0mLcbsyaLmScDPod_tj5i4Wqy4HL9k5sWt-TUIxGLH7CmiyNuEWULi7Ubl8V76zFqg6VuE8VTWSRcGPN7N-UTwsV3Z8V3DXFRiXVuEWqxHllpf763pJErkLuNeO_cCsGsa-N7nKvLPWT1nQ33-JHt1brQw243pjM09gPi8cAzQ_Owa8EpRXDYiYhwC0uIEx2VI5HnPo9zeRDuMOIoSbkghdWp6E4_HvcS_JNtoiJ4hs2usAIr8IGBBfkICib8h8RSQW6Du09x_AhNM5Um5W9w3pfadkgPwC5mefJs42MzglbT7y5t-sEDpPbG1SCxapyAdOShopf3Dm3am1NAG_-xDVbG1SCxannx7kf_Ms1y'
1064+
},
1065+
data: data
1066+
};
1067+
let html = await axios.request(config).catch(e => e)
1068+
if (html.status === 200) {
1069+
return html.data.data.map(it => {
1070+
return {
1071+
name: it.video_max_resolution,
1072+
url: it.download_url
1073+
}
1074+
})
1075+
}
1076+
}
1077+
10031078

10041079
async testSupport(url, headers) {
10051080

1006-
const resp = await req
1081+
const resp = await reqs
10071082

10081083
.get(url, {
10091084

@@ -1236,7 +1311,7 @@ class QuarkHandler {
12361311

12371312
console.log(inReq.id, chunkIdx);
12381313

1239-
const dlResp = await req.get(url, {
1314+
const dlResp = await reqs.get(url, {
12401315

12411316
responseType: 'stream',
12421317

0 commit comments

Comments
 (0)