Greasy Fork is available in English.
百度网盘不限速下载-KubeDown-Script
< 百度网盘不限速下载-KubeDownについてのフィードバック
很好的项目,要进tg群里看看什么时候能用什么时候不能用,作者都会发公告
在这里提供一个发送到aria2的版本,写法参照了unofficial-kubedown.js的代码(好像是叫这个
// ==UserScript== // @name 百度网盘不限速下载-KubeDown // @description 百度网盘不限速下载-KubeDown-Script // @version 2.2 // @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 // @connect 192.168.1.5 // @connect openapi.baidu.com // @namespace https://greasyfork.org/users/1057306 // ==/UserScript== // 上面的connect ip也要换成你的aria ip地址 const SETTINGS = { rpcDomain: "http://192.168.1.5", // 结尾不能有/,改成你aria地址 rpcPort: '6800', //rpc port rpcToken: '', // aria token rpcPath: '/jsonrpc', // 以/开头 }; (() => { if (window.location.pathname === "/disk/home") { window.location.replace("./main"); } async function GMFetch(url, method = "GET", data = null, headers = {}) { return new Promise((resolve, reject) => { if (GM) { return GM.xmlHttpRequest({ method, url, headers, data, onload: resolve, onerror: reject, }); } else { return GM_xmlhttpRequest({ method, url, headers, data, onload: resolve, onerror: reject, }); } }) } async function sendRPC(downUrl, userAgent, fileName) { let rpcUrl = `${SETTINGS.rpcDomain}:${SETTINGS.rpcPort}${SETTINGS.rpcPath}`; let rpcData = { id: new Date().getTime(), jsonrpc: '2.0', method: 'aria2.addUri', params: [`token:${SETTINGS.rpcToken}`, [downUrl], { out: fileName, header: [`User-Agent: ${userAgent}`] }] }; const run = await GMFetch(rpcUrl, "POST", JSON.stringify(rpcData)); if (run.statusText === "OK") { swal.fire({ icon: "info", title: "aria2发送结果", text: "成功发送", confirmButtonText: "关闭" }) } else{ swal.fire({ icon: "error", title: "aria2发送结果", text: "发送失败, "+ run.statusText, confirmButtonText: "关闭" }) } // run(); // console.log(await GMFetch(rpcUrl, "POST", JSON.stringify(rpcData))); } 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); } else { setTimeout(() => { AddElement(); }, 100); } } // GetNotify(); 注释掉广告通知 function GetNotify() { GM_xmlhttpRequest({ method: "GET", url: "http://dns.alidns.com/resolve?type=TXT&name=notify.kubedown.com", onload: function (response) { try { const jsondata = JSON.parse(response.responseText); const base64 = jsondata.Answer[0].data.replace(`"`, "").replace(`"`, ""); const text = decodeURIComponent(escape(atob(base64))); if (text !== "") { Swal.fire({ icon: "info", title: "KubeDown - 通知", text: text, confirmButtonText: "关闭", }); } } catch (e) { console.log(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({ Status: false, 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({ Status: false, 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({ Status: false, icon: "error", title: "获取下载地址错误", confirmButtonText: "关闭", }); } else { var formdata = new FormData(); // sendRPC(jsondata.list[0].dlink, "netdisk"); var fileName = jsondata.list[0].filename; GM_xmlhttpRequest({ method: "POST", url: jsondata.list[0].dlink.replace("d.pcs.baidu.com", "api.kubedown.com").replace("http://", "https://"), data: formdata, onload: (response) => { console.log(response.responseText); 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 { async function RPCfuntion(){ return sendRPC(downloadlink, useragent, fileName); } Swal.fire({ icon: "success", title: "获取下载地址成功", // sendRPC(downUrl, userAgent, fileName), didOpen: () => { const qaq = Swal.getHtmlContainer().querySelector('qaq') qaq.textContent = "发送到aria2rpc" qaq.addEventListener("click", RPCfuntion); }, html: `<input id="swal-input1" class="swal2-input" value="` + downloadlink + `"><input id="swal-input2" class="swal2-input" value="` + useragent + `"><a id='sendrpc'><button class="swal2-confirm swal2-styled"><qaq></qaq></button></a>`, }); } } 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: "关闭", }); } }); })();
谢谢支持,请推广本脚本
返信を投稿するにはログインしてください。
很好的项目,要进tg群里看看什么时候能用什么时候不能用,作者都会发公告
在这里提供一个发送到aria2的版本,写法参照了unofficial-kubedown.js的代码(好像是叫这个