231 lines
10 KiB
JavaScript
231 lines
10 KiB
JavaScript
// const.ts
|
|
var accessTokenInfo = {
|
|
"expires_in": 31536e3,
|
|
"access_token": "24.e7f0cd92f73198efe99b8ccb4466f045.2592000.1744250279.282335-23610200",
|
|
"session_secret": "",
|
|
"session_key": "",
|
|
"scope": "basic netdisk"
|
|
};
|
|
var getUrlParams = (params) => {
|
|
const body = new URLSearchParams();
|
|
for (const [key, value] of Object.entries(params)) {
|
|
body.append(key, value);
|
|
}
|
|
return body;
|
|
};
|
|
var const_default = accessTokenInfo;
|
|
|
|
// cookieUtil.ts
|
|
var CookieUtil = class _CookieUtil {
|
|
// 静态属性,用于存储单例实例
|
|
static instance = null;
|
|
accessTokenInfo = {
|
|
"expires_in": 31536e3,
|
|
"access_token": "24.e7f0cd92f73198efe99b8ccb4466f045.2592000.1744250279.282335-23610200",
|
|
"session_secret": "",
|
|
"session_key": "",
|
|
"scope": "basic netdisk",
|
|
app_id: "250528",
|
|
cookie: `BIDUPSID=B6F89C8A6AD149BCDC6FF40289C98EEA; PSTM=1719579347; PANWEB=1; Hm_lvt_7a3960b6f067eb0085b7f96ff5e660b0=1719583693,1719754941; BAIDUID=10DC30A9D8497854D8275A9855AA40A6:SL=0:NR=10:FG=1; H_WISE_SIDS_BFESS=60447_60575_60600; csrfToken=UG2bfMChS2_3SL_SPVH_hKvy; Hm_lvt_fa0277816200010a74ab7d2895df481b=1741096444; Hm_lpvt_fa0277816200010a74ab7d2895df481b=1741096444; HMACCOUNT=EDFC1163C2009122; H_PS_PSSID=61027_62277_62325_62336_62347_62372_62243_62390_62420_62423_62474_62484_62499_62493_62522_62457_62455_62453_62451_62568_62610; BDSFRCVID=EB-OJexroGWT0gjJdKLdMO_dgSNbUdrTDYrEjGc3VtzSGYLVd4SGEG0Pts1-dEub6j30ogKKLmOTHpKF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFsXTblB2Q-XPoO3M3xSlv4y4b8j4-kyhOk2M5f5mkf3fbgy4op8P3y0bb2DUA1y4vp-Jo7bmTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPr9Qgbj_43Jtq4KO4bGQq5lDIuTXqO30ptJ06nhVn0MBCK0hD89DjKKD6PVKgTa54cbb4o2WbCQQnC28pcN2b5oQp-734RHBtJqBC74aPbwahQbeq06-lOUWJDkXpJvQnJjt2JxaqRCbtj1fq5jDh3MKToDb-oteltHB2Oy0hvcBn6cShnxjJJjDx7XylOt0ljPt-jr24bS3U8MEtbIe-t2XjQhDNL8q6_qJbCsQnj8HJoHjJbGq4bohjPkLmc9BtQO-DOx-M-M5bckehvsbMccBP0s0PTaL43HQgnkQq5_3b85S4bu0UJZXhKOjbbx0x-jLTneo66e345DMRFRD-nJyUPThtnnBnOi3H8HL4nv2JcJbM5m3x6qLTKkQN3T-PKO5bRu_CcJ-J8XMK8mjTjP; newlogin=1; Hm_lvt_182d6d59474cf78db37e0b2248640ea5=1742211139; H_WISE_SIDS=61027_62277_62325_62336_62347_62372_62243_62390_62420_62423_62474_62484_62499_62493_62522_62457_62455_62453_62451_62568_62610; BDUSS=HB1TDFqeGVLTWZhcURSM015WmJrVi1XaWdqbkdSUWVmaH5mc2daSzJIeG5aUUJvSVFBQUFBJCQAAAAAAAAAAAEAAAAmJicXaG5qaWFuYW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfY2Gdn2NhnZ; BDUSS_BFESS=HB1TDFqeGVLTWZhcURSM015WmJrVi1XaWdqbkdSUWVmaH5mc2daSzJIeG5aUUJvSVFBQUFBJCQAAAAAAAAAAAEAAAAmJicXaG5qaWFuYW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfY2Gdn2NhnZ; STOKEN=4b412d30af62a38ce1b769718dbf216cbd0ed032e38e2ab282aea36707e93a20; Hm_lvt_bc5920843408306f8b6fc088319384ce=1742264429; Hm_lpvt_bc5920843408306f8b6fc088319384ce=1742264434; BAIDUID_BFESS=10DC30A9D8497854D8275A9855AA40A6:SL=0:NR=10:FG=1; BDSFRCVID_BFESS=EB-OJexroGWT0gjJdKLdMO_dgSNbUdrTDYrEjGc3VtzSGYLVd4SGEG0Pts1-dEub6j30ogKKLmOTHpKF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFsXTblB2Q-XPoO3M3xSlv4y4b8j4-kyhOk2M5f5mkf3fbgy4op8P3y0bb2DUA1y4vp-Jo7bmTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPr9Qgbj_43Jtq4KO4bGQq5lDIuTXqO30ptJ06nhVn0MBCK0hD89DjKKD6PVKgTa54cbb4o2WbCQQnC28pcN2b5oQp-734RHBtJqBC74aPbwahQbeq06-lOUWJDkXpJvQnJjt2JxaqRCbtj1fq5jDh3MKToDb-oteltHB2Oy0hvcBn6cShnxjJJjDx7XylOt0ljPt-jr24bS3U8MEtbIe-t2XjQhDNL8q6_qJbCsQnj8HJoHjJbGq4bohjPkLmc9BtQO-DOx-M-M5bckehvsbMccBP0s0PTaL43HQgnkQq5_3b85S4bu0UJZXhKOjbbx0x-jLTneo66e345DMRFRD-nJyUPThtnnBnOi3H8HL4nv2JcJbM5m3x6qLTKkQN3T-PKO5bRu_CcJ-J8XMK8mjTjP; ndut_fmt=4AED84C3D5C763CC7467C0BD21B7059718FB121D7685531B0B05A7947CD6E542; ab_sr=1.0.1_MWQ5NTY4MTE4YTU1OTJiNmI0YmUxMDAzNWY1NTkyZjkzZGNkYzBjNDg2NWYxODdhNTM0Zjk4NDNlNzIwNmJhNWFjNTVmYzlhMjllZDQ1YzBhODZkMjFkZjNmODk1YWRkYjU4ZWI4OGQ5ZTY5Yzg1YjU0YTEyNzE4ZTZmZGYyOWYzZTYzZWYwYmFiODVhOWIwMWZjMjUyMDg1ZjExYWE0Y2QzNDU0MWY3MGRiOGQ0NDk2MjZlYWY3NDM2YmI4NmNlNzUxMmEzYjEyOWY5MDI5NDNkMmY4YWUxZDJkNDUwNGI=; PANPSC=12091468029218708382%3AAuI6D6iGxsvfqD2oGDJz%2FlcS2d9ns3O52KR9sgxqNvJDnBUTmlU39wjHRUw%2FZR6kz81ttRoL0tCAzpMjKfHvSrz7Cgwm46ULLjHyseP5LOc2jyb7JodIivKBB5%2BWSCTpbaC532AuNi3w0iRW66wpcaOpfVD7rGCOIND%2Ba86tsPJVcd75GMrlL3ggdH3Ht58%2BGZF3KerqQjL6l%2B17QGFqtw%3D%3D; Hm_lpvt_182d6d59474cf78db37e0b2248640ea5=1742385365`
|
|
};
|
|
constructor() {
|
|
if (_CookieUtil.instance) {
|
|
return _CookieUtil.instance;
|
|
}
|
|
_CookieUtil.instance = this;
|
|
}
|
|
// 静态方法,用于获取单例实例
|
|
static getInstance() {
|
|
if (!_CookieUtil.instance) {
|
|
_CookieUtil.instance = new _CookieUtil();
|
|
}
|
|
return _CookieUtil.instance;
|
|
}
|
|
getHeaders = () => {
|
|
return {
|
|
"Content-Type": "application/x-www-form-urlencoded",
|
|
Host: "pan.baidu.com",
|
|
Origin: "https://pan.baidu.com",
|
|
Referer: "https://pan.baidu.com/disk/main",
|
|
"User-Agent": " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
|
|
"Sec-Fetch-Dest": "empty",
|
|
"Sec-Fetch-Mode": "cors",
|
|
"Sec-Fetch-Site": "same-origin",
|
|
"X-Requested-With": "XMLHttpRequest",
|
|
"sec-ch-ua": `"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"`,
|
|
"sec-ch-ua-mobile": "?0",
|
|
"sec-ch-ua-platform": "Windows",
|
|
"Cookie": this.accessTokenInfo.cookie
|
|
};
|
|
};
|
|
setCookie = ({ cookie: cookie2, accessToken }) => {
|
|
this.accessTokenInfo.access_token = accessToken;
|
|
this.accessTokenInfo.cookie = cookie2;
|
|
};
|
|
};
|
|
|
|
// getBdstoken.ts
|
|
var url = `http://pan.baidu.com/api/gettemplatevariable?clienttype=0&app_id=250528&web=1&fields=[%22bdstoken%22]`;
|
|
async function getInfo() {
|
|
const cookieUtilInstance = CookieUtil.getInstance();
|
|
const headers = cookieUtilInstance.getHeaders();
|
|
const res = await fetch(url, { headers });
|
|
const data = await res.json();
|
|
return data?.result?.bdstoken;
|
|
}
|
|
|
|
// getDpLogId.ts
|
|
var DpLogIdUtil = class _DpLogIdUtil {
|
|
// 静态属性,用于存储单例实例
|
|
static instance = null;
|
|
// 实例属性
|
|
sessionId = 0;
|
|
// 会话ID,用于标识当前会话
|
|
userId = "";
|
|
// 用户ID,用于标识用户
|
|
_countId = 0;
|
|
// 计数器ID,用于生成唯一的日志ID
|
|
client = "";
|
|
// 客户端标识
|
|
// 私有化构造函数,防止外部直接实例化
|
|
constructor() {
|
|
if (_DpLogIdUtil.instance) {
|
|
return _DpLogIdUtil.instance;
|
|
}
|
|
this.sessionId = this.getRandomInt(6);
|
|
this.userId = "00" + this.getRandomInt(8);
|
|
this._countId = 0;
|
|
this.client = "";
|
|
_DpLogIdUtil.instance = this;
|
|
}
|
|
// 静态方法,用于获取单例实例
|
|
static getInstance() {
|
|
if (!_DpLogIdUtil.instance) {
|
|
_DpLogIdUtil.instance = new _DpLogIdUtil();
|
|
}
|
|
return _DpLogIdUtil.instance;
|
|
}
|
|
// 生成指定位数的随机整数
|
|
getRandomInt = function(t) {
|
|
return Math.floor((9 * Math.random() + 1) * Math.pow(10, t - 1));
|
|
};
|
|
// 将数字补足指定位数,不足部分用0填充
|
|
prefixInteger = function(t, e) {
|
|
t += "";
|
|
for (var n = new Array(e - t.length), i = n.length, r = 0; r < i; r++)
|
|
n[r] = "0";
|
|
return n.join("") + t;
|
|
};
|
|
// 获取并递增计数器ID,确保ID在0到9999之间循环
|
|
getCountId = function() {
|
|
return this._countId < 9999 ? this._countId += 1 : this._countId = 0, this.prefixInteger(this._countId, 4);
|
|
};
|
|
// 验证用户ID是否为10位
|
|
validateUk = function(t) {
|
|
return 10 === (t + "").length;
|
|
};
|
|
// 生成完整的日志ID
|
|
getDpLogId = function() {
|
|
var e = this.userId;
|
|
return "" + this.client + this.sessionId + e + this.getCountId();
|
|
};
|
|
// 从URL中提取日志ID,如果不存在则生成一个新的日志ID
|
|
getDpLogIdByUrl = function(t) {
|
|
var e = t.match(/dp-logid=(\d+)/);
|
|
return e && e[1] ? e[1] : this.getDpLogId();
|
|
};
|
|
// 向URL中添加日志ID参数
|
|
addDpLogId = function(t, e, n) {
|
|
if (/dp-logid=\d+/.test(t))
|
|
return t;
|
|
var i = n || this.getDpLogId(e);
|
|
return t += /\?/.test(t) ? "&" : "?", t + "dp-logid=" + i;
|
|
};
|
|
};
|
|
|
|
// queryMagnetinfo.ts
|
|
var { access_token } = const_default;
|
|
async function getMagnetInfo(link, savePath) {
|
|
let bdstoken2 = await getInfo();
|
|
let dpLogId2 = DpLogIdUtil.getInstance().getDpLogId();
|
|
const url2 = `https://pan.baidu.com/rest/2.0/services/cloud_dl?clienttype=0&app_id=250528&web=1&dp-logid=${dpLogId2}&bdstoken=${bdstoken2}`;
|
|
const cookieUtilInstance = CookieUtil.getInstance();
|
|
const headers = cookieUtilInstance.getHeaders();
|
|
const params = {
|
|
method: "query_magnetinfo",
|
|
app_id: 250528,
|
|
save_path: savePath,
|
|
type: 4,
|
|
source_url: link
|
|
};
|
|
const res = await fetch(url2, {
|
|
method: "POST",
|
|
headers,
|
|
body: getUrlParams(params)
|
|
});
|
|
const data = await res.json();
|
|
return data?.total || 0;
|
|
}
|
|
|
|
// offDown.ts
|
|
var bdstoken = "";
|
|
var dpLogId = "";
|
|
var dpLogIdUtil = DpLogIdUtil.getInstance();
|
|
function generateSelectedIdx(total) {
|
|
return [...Array(total).keys()].map((i) => i + 1);
|
|
}
|
|
function getRandomNumberBetween(min, max) {
|
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
}
|
|
function randomDelay(min = 2e3, max = 4e3) {
|
|
const delay = getRandomNumberBetween(min, max);
|
|
console.log(`\u7B49\u5F85 ${delay} \u6BEB\u79D2...`);
|
|
return sleep(delay);
|
|
}
|
|
function sleep(ms) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
async function down(link, savePath = "/movie/2025") {
|
|
const cookieUtilInstance = CookieUtil.getInstance();
|
|
bdstoken = await getInfo();
|
|
dpLogId = dpLogIdUtil?.getDpLogId();
|
|
const url2 = `https://pan.baidu.com/rest/2.0/services/cloud_dl?clienttype=0&app_id=250528&web=1&dp-logid=${dpLogId}&bdstoken=${bdstoken}`;
|
|
const headers = cookieUtilInstance.getHeaders();
|
|
const fileTotal = await getMagnetInfo(link, savePath);
|
|
randomDelay(2e3, 4e3);
|
|
const params = {
|
|
method: "add_task",
|
|
app_id: 250528,
|
|
save_path: savePath,
|
|
selected_idx: generateSelectedIdx(fileTotal).join(","),
|
|
task_from: 0,
|
|
t: (/* @__PURE__ */ new Date()).getTime(),
|
|
type: 4,
|
|
source_url: link
|
|
};
|
|
console.log(params);
|
|
try {
|
|
const res = await fetch(url2, {
|
|
method: "POST",
|
|
headers,
|
|
body: getUrlParams(params)
|
|
});
|
|
if (!res.ok) {
|
|
throw new Error(`HTTP error! status: ${res.status}`);
|
|
}
|
|
const data = await res.json();
|
|
console.log(data);
|
|
return data;
|
|
} catch (error) {
|
|
console.error("Fetch error:", error);
|
|
}
|
|
}
|
|
var offDown_default = {
|
|
down,
|
|
CookieUtil,
|
|
randomDelay
|
|
};
|
|
export {
|
|
offDown_default as default
|
|
};
|