// ==UserScript== // @name 百度网盘不限速下载-KubeDown // @description 百度网盘不限速下载-KubeDown-Script // @version 2.4 // @author KubeDown // @antifeature membership // @license AGPL-3.0 // @icon https://p1.meituan.net/csc/6a347940f064146525be36b80541490124528.png // @resource https://cdn.staticfile.org/limonte-sweetalert2/11.7.1/sweetalert2.min.css // @require https://cdn.staticfile.org/limonte-sweetalert2/11.7.1/sweetalert2.all.min.js // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @grant GM_xmlhttpRequest // @match *://pan.baidu.com/* // @connect kubedown.com // @connect meituan.net // @connect staticfile.org // @connect baidu.com // @connect alidns.com // @namespace https://greasyfork.org/users/1057306 // ==/UserScript== (() => { if (window.location.pathname === "/disk/home") { window.location.replace("./main"); } AddElement(); function AddElement() { if (document.getElementById("KubeDown") === null) { { const newbutton = document.createElement("button"); newbutton.id = "KubeDown"; newbutton.className = "u-button nd-file-list-toolbar-action-item u-button--primary"; newbutton.style.marginRight = "8px"; newbutton.innerText = "KubeDown"; document.querySelector("div.wp-s-agile-tool-bar__header").prepend(newbutton); } { const newbutton = document.createElement("button"); newbutton.id = "KubeDownStatus"; newbutton.className = "u-button nd-file-list-toolbar-action-item u-button--primary"; newbutton.style.marginRight = "8px"; newbutton.innerText = "KubeDown Status"; document.querySelector("div.wp-s-agile-tool-bar__header").prepend(newbutton); } } else { setTimeout(() => { AddElement(); }, 100); } } GetNotify(); function GetNotify() { GM_xmlhttpRequest({ method: "GET", url: "https://dns.alidns.com/resolve?type=TXT&name=notify.kubedown.com", onload: function (response) { try { const jsondata = JSON.parse(response.responseText); let base64 = jsondata.Answer[0].data; for (let i = 0; i < 100; i++) { base64 = base64.replace(`\"`, "").replace(`"`, "").replace(" ", ""); } const text = decodeURIComponent(escape(atob(base64))); if (text !== "") { Swal.fire({ icon: "info", title: "KubeDown - 通知", text: text, confirmButtonText: "关闭", }); } } catch (e) {} }, }); } document.getElementById("KubeDown").addEventListener("click", () => { let list = document.getElementsByClassName("wp-s-pan-table__body-row mouse-choose-item selected"); if (list.length === 0) { list = document.getElementsByClassName("wp-s-file-grid-list__item text-center cursor-p mouse-choose-item is-checked"); if (list.length === 0) { list = document.getElementsByClassName("wp-s-file-contain-list__item text-center cursor-p mouse-choose-item is-checked"); if (list.length === 0) { Swal.fire({ icon: "info", title: "请选择一个文件", confirmButtonText: "关闭", }); } } } if (list.length === 1) { const fileid = list[0].getAttribute("data-id"); if (fileid === "" || fileid === null) { Swal.fire({ icon: "error", title: "获取文件ID错误", confirmButtonText: "关闭", }); return; } Swal.fire({ title: "text", title: "正在获取下载链接", allowOutsideClick: false, didOpen: () => { Swal.showLoading(); const Token = localStorage.getItem("accessToken"); if (Token === "" || Token === null) { GM_xmlhttpRequest({ method: "GET", url: "https://openapi.baidu.com/oauth/2.0/authorize?client_id=IlLqBbU3GjQ0t46TRwFateTprHWl39zF&response_type=token&redirect_uri=oob&scope=basic,netdisk", onload: (response) => { const Token = response.finalUrl.match(/access_token=([^&]+)/)?.[1]; if (Token === "" || Token === null || Token === undefined) { Swal.fire({ icon: "error", title: "获取百度网盘授权错误", text: "请手动复制 “https://openapi.baidu.com/oauth/2.0/authorize?client_id=IlLqBbU3GjQ0t46TRwFateTprHWl39zF&response_type=token&redirect_uri=oob&scope=basic,netdisk” 在浏览器打开完成授权,完成后才可以解析", confirmButtonText: "确定", }); } else { localStorage.setItem("accessToken", Token); window.location.reload(); } }, onerror: () => { Swal.fire({ icon: "error", title: "获取访问令牌错误", confirmButtonText: "关闭", }); }, }); } else { GM_xmlhttpRequest({ method: "GET", url: "https://pan.baidu.com/rest/2.0/xpan/multimedia?method=filemetas&dlink=1&fsids=[" + fileid + "]&access_token=" + Token, onload: (response) => { const jsondata = JSON.parse(response.responseText); if (jsondata.list === undefined || jsondata.list.length === 0 || jsondata.list[0].dlink === undefined || jsondata.list[0].dlink === "") { Swal.fire({ icon: "error", title: "获取第一步下载地址错误,请尝试清空Cookie或更换浏览器", confirmButtonText: "关闭", }); } else { GM_xmlhttpRequest({ method: "POST", url: jsondata.list[0].dlink.replace("d.pcs.baidu.com", "api.kubedown.com").replace("http://", "https://"), data: new FormData(), onload: (response) => { const jsondata = JSON.parse(response.responseText); const status = jsondata.status; const downloadlink = jsondata.downloadlink; const useragent = jsondata.useragent; if (status) { if (downloadlink === "" || downloadlink === undefined || useragent === "" || useragent === undefined) { Swal.fire({ icon: "error", title: "数据异常", confirmButtonText: "关闭", }); } else { Swal.fire({ icon: "success", title: "获取下载地址成功", html: ``, }); } } else { let error = jsondata.error; if (error === "" || error === undefined) { error = ""; } Swal.fire({ icon: "error", title: "解析下载地址错误", text: error, confirmButtonText: "关闭", }); } }, onerror: () => { Swal.fire({ icon: "error", title: "请求解析下载地址错误", confirmButtonText: "关闭", }); }, }); } }, onerror: () => { Swal.fire({ icon: "error", title: "请求生成下载地址错误", confirmButtonText: "关闭", }); }, }); } }, }); } else if (list.length > 1) { Swal.fire({ icon: "error", title: "只可以一次解析一个文件", confirmButtonText: "关闭", }); } }); document.getElementById("KubeDownStatus").addEventListener("click", () => { Swal.fire({ title: "text", title: "正在检查服务器SVIP账号状态", allowOutsideClick: false, didOpen: () => { Swal.showLoading(); GM_xmlhttpRequest({ method: "GET", url: "https://api.kubedown.com/status.php", onload: (response) => { const jsondata = JSON.parse(response.responseText); if (jsondata.svipcookiestatus === true) { Swal.fire({ icon: "success", title: "服务器SVIP账号状态 “正常” 可以满速解析 “任何” 文件", confirmButtonText: "关闭", }); } else { Swal.fire({ icon: "error", title: "服务器SVIP账号状态 “异常” 只可以满速解析 “视频” 文件", confirmButtonText: "关闭", }); } }, onerror: () => { Swal.fire({ icon: "error", title: "请求生成下载地址错误", confirmButtonText: "关闭", }); }, }); }, }); }); })();