feat: first commit
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
// 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
|
||||
};
|
||||
Reference in New Issue
Block a user