// ==UserScript==
// @name 百度网盘SVIP解析高速下载-度娘加速
// @namespace momoz
// @version 2.4
// @author momo
// @description 百度网盘SVIP解析高速下载,24小时维护100%可以用!使用IDM下载更加稳定IDM UA设置:LogStatistic Chrome浏览器一定打开开发者模式才能正常显示出来!
// @antifeature ads
// @antifeature tracking
// @antifeature membership
// @license MIT
// @icon https://nd-static.bdstatic.com/m-static/v20-main/home/img/icon-home-new.b4083345.png
// @match *://pan.baidu.com/*
// @match *://yun.baidu.com/*
// @match *://pan.baidu.com/disk/home*
// @match *://yun.baidu.com/disk/home*
// @match *://pan.baidu.com/disk/main*
// @match *://yun.baidu.com/disk/main*
// @match *://pan.baidu.com/s/*
// @match *://yun.baidu.com/s/*
// @match *://pan.baidu.com/share/*
// @match *://yun.baidu.com/share/*
// @match http://127.0.0.1:5500/*
// @connect baidu.com
// @connect 127.0.0.1
// @connect ty.shzxkq.com
// @grant GM_addStyle
// @grant GM_getResourceText
// @run-at document-idle
// @require https://lib.baomitu.com/layui/2.9.3/layui.min.js
// ==/UserScript==
(function () {
addStylesheet('https://lib.baomitu.com/layui/2.9.3/css/layui.css');
var config = {
gonggao: "每8小时8次200G大文件解析,40次1.5G左右小文件解析,小文件解析等待时间1到19分钟左右!IDM UA设置:LogStatistic",
host_list: {
"1": "https://bdb.shzxkq.com",
"2": "https://ty.shzxkq.com",
"3": ""
},
bd_password: "asdf",
title_name: "度娘加速",
file_name:"",
savePath: 'D:\\',
jsonrpc: 'http://localhost:6800/jsonrpc',
username: "",
tab_id: "1",
ua: "netdisk;",
window_height: 525, //界面高度
workdata: {},
dropdown: null,
file_size:0
}
config.main_url = config.host_list['1'];
config.main_img_url = config.host_list['1'] + '/xcx.jpg';
function addStylesheet(url) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
link.type = 'text/css';
document.head.appendChild(link);
}
function setdropdown_off_on(state = false) {
let dom = document.querySelector(`#tab${config.tab_id} .demo-dropdown-on`);
if (state) {
dom.setAttribute("disabled", "");
dom.classList.add('layui-btn-disabled');
dom.classList.remove('demo-dropdown-on_ondisabled');
} else {
dom.removeAttribute("disabled");
dom.classList.remove('layui-btn-disabled');
dom.classList.add('demo-dropdown-on_ondisabled');
}
}
layui.use(['layer'], async function () {
var layer = layui.layer, $ = layui.$, element = layui.element;
var dropdown = layui.dropdown;
await Promise.resolve(new Promise((resolve) => setTimeout(resolve, 888)));
if (location.href.startsWith("https://pan.baidu.com/s/")) {
//分享界面加按钮
$('.x-button-box').prepend('' + config.title_name + '');
} else {
// 其他界面加按钮
if ($('.tcuLAu').is('*')) {
//旧版
$('.tcuLAu').prepend('' + config.title_name + '');
} else {
//新版
$('.wp-s-agile-tool-bar__header.is-header-tool').prepend('
');
}
}
$('#downbtn_share').click(function () {
my_alert("提示:请先保存到自己的网盘后,从网盘里解析!");
return false;
});
$('#downbtn_main').click(function () {
let xuanzhe_list = get_xuanzhe_list();
let xuanzhe_list2 = Object.keys(xuanzhe_list);
if (xuanzhe_list2.length == 0) {
my_alert("提示:请先选择一个文件");
return false;
} else if (xuanzhe_list2.length > 1) {
my_alert("提示:目前仅支持一个文件解析");
return false;
} else if (xuanzhe_list[xuanzhe_list2[0]].isdir == 1) {
my_alert("提示:目前不支持文件夹解析!");
return false;
}
let file_info_obj = xuanzhe_list[xuanzhe_list2[0]];
config.file_size = file_info_obj.size;
let html_code = `
`;
function tab_html(tabid) {
config.workdata[String(tabid)] = [];
return `
当前文件名:
扫描二维码获取解析密码后,点击解析按钮
`;
}
html_code += `
- 大文件解析
- 2G左右小文件解析
- 筹建中03
- 联系我们
${tab_html(1)}
${tab_html(2)}
${tab_html(3)}
TG: https://t.me/xiaomozycc
`;
// 渲染
layer.open({
type: 1,
title: false,
closeBtn: 1,
shadeClose: true,
// shade: 0.9, // 遮罩透明度
// area: ['500px', '367px'],//宽 高
area: ['500px', config.window_height + 'px'],//宽 高
content: html_code,
success: function (layero, index) {
let data_json = {};
config.tab_id = 1;
config.workdata = {};
config.main_url = config.host_list[config.tab_id];
document.querySelector(`#tab${ config.tab_id} #code_img`).src = config.main_url + "/xcx.jpg";
try {
data_json = $("html").html().match(/(?<=locals\.mset\()(.*?)(?=\);)/)[0];
data_json = JSON.parse(data_json);
config.username = data_json.username;
} catch (e) {
data_json = $("html").html().match(/(?<=window\.locals\s=\s)(.*?)(?=;)/)[0];
data_json = JSON.parse(data_json);
config.username = data_json.userInfo.username;
}
config.data_json = data_json;
dropdown.render({
elem: '.demo-dropdown-on', // 绑定元素选择器,此处指向 class 可同时绑定多个元素
data: [],
disabled: true,
templet: function (d) {
state_dict = ["layui-icon-lock","layui-icon-loading-1","layui-icon-success"];
icon_class = d.workstate >= 3?"layui-icon-question":state_dict[d.workstate];
if (d.workstate == 2) {
if (String(d.download_url).indexOf("http") == -1) {
icon_class = "layui-icon-error";
icon_color = "red";
} else {
icon_color = "green";
}
} else {
icon_color = "red";
}
return ``;
},
click: function (obj) {
// alert(obj.title);
if (String(obj.download_url).indexOf("http") == -1) {
layer.msg("排队解析中,请耐心等待1到5分钟后查询直链!!!!");
return false;
}
var textarea = document.createElement('textarea');
textarea.style.position = 'fixed';
textarea.style.opacity = 0;
textarea.value = obj.download_url;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
layer.msg(obj.title + '的下载直链已复制');
}
});
config.dropdown = dropdown;
config.dropdown.reloadData(`dropdown_tab${config.tab_id}`, { 'data': set_dropdown_data() })
// 监听Tab切换
element.on('tab(demo)', function (data) {
var $this = $(this);
console.log($this, data)
// 获取当前激活的Tab的lay-id属性值
var tabId = data.elem.context.attributes['lay-id'].value;
config.tab_id = tabId;
config.dropdown.reloadData(`dropdown_tab${config.tab_id}`, { 'data': set_dropdown_data() })
if (tabId === 'help') {
// $this.text('重新加载的内容:help');
console.log(config)
} else {
config.main_url = config.host_list[tabId];
document.querySelector(`#tab${tabId} #code_img`).src = config.main_url + "/xcx.jpg";
}
});
$(".my_setting").click(function () {
//作废
// alert("设置")
let promptI = layer.prompt({ title: '输入下载路径', formType: 0, value: config.savePath }, function (value, index) {
layer.close(promptI);
config.savePath = value;
layer.msg("下载路径设置完成:" + config.savePath);
});
})
config.file_name = file_info_obj.server_filename;
$(".server_filename").text("当前文件名:" + file_info_obj.server_filename);
$('.main_start_query').click(function () {
get_all_down_url();
})
$('.main_start').click(function () {
// $('.copy').addClass('layui-btn-disabled').removeAttr('down-url');
// $('.pusharia').addClass('layui-btn-disabled').removeAttr('down-url');
if (get_parse_key_value(config.tab_id) && get_parse_key_time(config.tab_id) && new Date().getTime() < Number(get_parse_key_time(config.tab_id))) {
layer.load(2, {
shade: [0.3, '#FFF'],
});
share_one_baidu();
} else {
let promptI = layer.prompt({ title: '密码已重置,请重新输入', formType: 1 }, function (value, index) {
layer.close(promptI);
//layer.msg("密码输入完成");
set_parse_key(config.tab_id, value)
layer.load(2, { shade: [0.3, '#FFF'], });
share_one_baidu();
});
}
});
$('.copy').click(function () {
//作废
if (!$(this).hasClass('layui-btn-disabled')) {
var textarea = document.createElement('textarea');
textarea.style.position = 'fixed';
textarea.style.opacity = 0;
textarea.value = $(this).attr('down-url');
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
layer.msg('链接复制成功');
}
});
$('.pusharia').click(function () {
//作废
if (!$(this).hasClass('layui-btn-disabled')) {
var url = $(this).attr('down-url');
sendAria2(url, $('.server_filename').text().replace("当前文件名:", ""));
// sendAria2(url, file_info_obj.server_filename);
layer.msg('推送成功');
}
});
},
});
});
});
function set_parse_key(tabid, value) {
// localStorage.my_password = value;
// localStorage.my_password_end = get_endTime();
localStorage['my_password_' + tabid] = value;
localStorage['my_password_' + tabid + "_end"] = get_endTime();
}
function get_parse_key_value(tabid) {
return localStorage['my_password_' + tabid];
}
function get_parse_key_time(tabid) {
return localStorage['my_password_' + tabid + "_end"];
}
function set_dropdown_data() {
dropdown_temp_data = config["workdata"][config.tab_id];
dropdown_data = [];
for (let o in dropdown_temp_data) {
dropdown_data.push({
title: dropdown_temp_data[o].filename,
download_url: dropdown_temp_data[o].download_url,
workid: dropdown_temp_data[o].workid,
file_id: dropdown_temp_data[o].file_id,
download_endtime: dropdown_temp_data[o].download_endtime,
workstate: dropdown_temp_data[o].workstate,
download_endtime_timestamp: dropdown_temp_data[o].download_endtime_timestamp,
})
}
console.log(dropdown_data);
return dropdown_data;
}
function formatBytes(a, b = 2) {
if (0 === a) return "0 Bytes";
const c = 0 > b ? 0 : b,
d = Math.floor(Math.log(a) / Math.log(1024));
return parseFloat((a / Math.pow(1024, d)).toFixed(c)) + " " + ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][d]
}
function formatDate(time, format = 'YY-MM-DD hh:mm:ss') {
if (time == undefined) return "--";
time = Number(time + "000");
var date = new Date(time);
var year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),
hour = date.getHours(),
min = date.getMinutes(),
sec = date.getSeconds();
var preArr = Array.apply(null, Array(10)).map(function (elem, index) {
return '0' + index;
});
var newTime = format.replace(/YY/g, year)
.replace(/MM/g, preArr[month] || month)
.replace(/DD/g, preArr[day] || day)
.replace(/hh/g, preArr[hour] || hour)
.replace(/mm/g, preArr[min] || min)
.replace(/ss/g, preArr[sec] || sec);
return newTime;
}
function get_endTime() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var on_30min = Number(new Date(year + "-" + month + "-" + day + " " + hours + ":30:00"));
if (new Date().getTime() < on_30min) {
result_time = on_30min;
} else {
result_time = on_30min + 30 * 60 * 1000;
}
return result_time;
}
function my_alert(text_value = "") {
layui.layer.open({
type: 1,
title: false,
closeBtn: 1,
shadeClose: true,
skin: 'yourclass',
content: `
${text_value}
`
});
}
function sendAria2(url, out_filename, ua) {
//作废
var Aria2_config = {
"jsonrpc": "2.0",
"method": "aria2.addUri",
"id": 1,
"params": [
[url],
{
"header": [`User-Agent: ${config.ua}`],
"out": out_filename,
"dir": config.savePath,
"pause": "false",//是否暂停下载
"max-connection-per-server": "15",
"seed-ratio": "0",
"continue": 'true',
"user-agent": "LogStatistic"
}]
}
$.ajax({
url: config.jsonrpc,
data: JSON.stringify(Aria2_config),
type: "post",
//async: false,//false为同步
dataType: "json",
success: function (obj) {
console.log(obj)
}
});
}
function get_xuanzhe_list() {
// return {
// "1051603260599775": {
// isdir: 0
// }
// }
var xuanzhe_list = {};
var xuanxiang = [];
try {
xuanxiang = require('system-core:context/context.js').instanceForSystem.list.getSelected();
} catch (e) {
xuanxiang = document.querySelector('.wp-s-core-pan').__vue__.selectedList;
}
xuanxiang.forEach(element => {
xuanzhe_list[element.fs_id] = element;
});
return xuanzhe_list;
}
function share_one_baidu() {
let xuanzhe_list = Object.keys(get_xuanzhe_list());
let bdstoken = "";
let data_json = {};
try {
data_json = $("html").html().match(/(?<=locals\.mset\()(.*?)(?=\);)/)[0];
data_json = JSON.parse(data_json);
config.username = data_json.username;
bdstoken = data_json.bdstoken;
} catch (e) {
data_json = $("html").html().match(/(?<=window\.locals\s=\s)(.*?)(?=;)/)[0];
data_json = JSON.parse(data_json);
config.username = data_json.userInfo.username;
bdstoken = data_json.userInfo.bdstoken;
}
config.data_json = data_json;
$.ajax({
type: 'GET',
url: "https://pan.baidu.com/share/set",
async: true,
data: {
bdstoken: bdstoken,
period: 1,
pwd: config.bd_password,
eflag_disable: true,
channel_list: "%5B%5D",
schannel: 4,
fid_list: JSON.stringify(xuanzhe_list)
},
dataType: 'json',
success: function (res) {
console.log(res)
if (res.show_msg.indexOf("禁止") > -1) {
layer.closeAll('loading');
my_alert("该文件禁止分享");
return false;
} else {
let shorturl = "";
try {
shorturl = res.link.split("/").pop();
} catch (error) {
layer.closeAll('loading');
my_alert("错误:初始化准备失败!");
return false;
}
get_down_list(shorturl, config.bd_password);
layer.closeAll('loading');
}
},
error: function (res) {
my_alert("错误:初始化准备请求访问失败");
layer.closeAll('loading');
},
})
}
function get_down_url() {
//作废
server_filename_dom = document.querySelector(`#tab${config.tab_id} .server_filename`);
t_parsekey = server_filename_dom.getAttribute("parsekey");
t_workid = server_filename_dom.getAttribute("workid");
let down_url = `${config.main_url}/querywork.php?workid=${t_workid}&parsekey=${t_parsekey}&username=${config.username}`;
$.ajax({
url: down_url,
method: 'GET',
error: function (params) {
console.error(2, params);
my_alert("请重新解析尝试");
layer.closeAll('loading');
},
success: function (json) {
// json = JSON.parse(params);
console.log(3, json);
if (json.code == 0 && json.workstate == 2) {
// ddd = json.data;
// console.log("待下载文件详情", ddd);
// Size = formatBytes(ddd.filesize);
// Time = formatDate(ddd.filectime, 'YY/MM/DD hh:mm:ss');
config.ua = json.ua;
let downlink = json.download_url;
if (downlink.indexOf("http") >= 0) {
server_filename_dom = document.querySelector(`#tab${config.tab_id} .server_filename`)
for (let i of ['filename', 'workstate', "workid", "shorturl", "password", "parsekey", "creattime"]) { server_filename_dom.removeAttribute(i) }
layer.closeAll('loading');
my_alert("成功:解析成功");
$('.copy').removeClass('layui-btn-disabled').attr('down-url', downlink);
$('.pusharia').removeClass('layui-btn-disabled').attr('down-url', downlink);
} else {
layer.closeAll('loading');
my_alert("错误:下载链接解析异常【" + json.msg + "】");
}
} else {
my_alert(json.msg + ",状态: " + json.workstate_msg);
layer.closeAll('loading');
return false;
}
}
});
}
function get_all_down_url() {
config["workdata"][config.tab_id] = [];
config.dropdown.reloadData(`dropdown_tab${config.tab_id}`, { 'data': set_dropdown_data() })
setdropdown_off_on(true);
server_filename_dom = document.querySelector(`#tab${config.tab_id} .server_filename`);
t_parsekey = server_filename_dom.getAttribute("parsekey");
t_workid = server_filename_dom.getAttribute("workid");
let down_url = `${config.main_url}/querywork_all.php?username=${config.username}`;
config["workdata"][config.tab_id] = [];
$.ajax({
url: down_url,
method: 'GET',
error: function (params) {
console.error(2, params);
my_alert("请尝试重新查询");
layer.closeAll('loading');
},
success: function (json) {
// json = JSON.parse(params);
console.log(3, json);
if (json.code == 0) {
data_list = json.data;
config.ua = json.ua;
config["workdata"][config.tab_id] = [];
jiexi_ok_count = 0;
for (let obj of data_list) {
console.log(obj)
config["workdata"][config.tab_id].push(obj);
if (obj.code == 0 && obj.workstate == 2) {
downlink = obj.download_url;
if (downlink.indexOf("http") >= 0) {
jiexi_ok_count++;
// config["workdata"][config.tab_id].push(obj);
} else {
// my_alert("错误:下载链接解析异常【" + json.msg + "】");
}
}
}
layer.closeAll('loading');
setdropdown_off_on(false);
console.log("eeeee",config.tab_id,config["workdata"][config.tab_id])
config.dropdown.reloadData(`dropdown_tab${config.tab_id}`, { 'data': set_dropdown_data() })
my_alert("查询成功:已解析成功任务 " + jiexi_ok_count + " 个");
} else {
my_alert("失败:" + json.msg);
layer.closeAll('loading');
return false;
}
},
});
}
function get_down_list(shorturl, password) {
let parse_key = get_parse_key_value(config.tab_id)
let xuanzhe_list = Object.keys(get_xuanzhe_list());
//let filename_text = document.querySelector(".server_filename").textContent;
let filename_text = config.file_name;
let url = `${config.main_url}/addwork.php`;
$.ajax({
type: 'POST',
url: url,
async: true,
data: {
"filename":encodeURIComponent(filename_text),
"username":config.username,
"baidu_fileid":xuanzhe_list[0],
"size":config.file_size,
"shorturl":shorturl,
"password":password,
"parsekey":parse_key,
},
dataType: 'json',
success: function (res) {
console.log(res)
if (res.code == 0 || res.code == 13) {
req_data = res.data;
console.log(2, req_data);
server_filename_dom = document.querySelector(`#tab${config.tab_id} .server_filename`);
for (let i in req_data) {
if (i in ['filename', 'workstate']) {
continue;
}
server_filename_dom.setAttribute(i, req_data[i])
}
t = {
0: "任务创建完成",
13: "任务已存在请勿重复提交"
}
my_alert(`成功:${t[res.code]},任务id为:` + req_data["workid"]);
} else {
if (res.code == 104) {
//重置密码
set_parse_key(config.tab_id, "")
layer.closeAll('loading');
my_alert("密码错误(可能密码超出有效期),请重新提交");
return false;
} else {
my_alert("失败:" + res.msg);
layer.closeAll('loading');
return false;
}
}
},
error: function (res) {
my_alert("错误:初始解析请求访问失败,重新提交");
layer.closeAll('loading');
},
});
}
})()