百度网盘不限速下载-KubeDown

百度网盘不限速下载-KubeDown-Script

< Feedback on 百度网盘不限速下载-KubeDown

Review: Good - script works

§
Posted: 25 September 2023

很好的项目,要进tg群里看看什么时候能用什么时候不能用,作者都会发公告

在这里提供一个发送到aria2的版本,写法参照了unofficial-kubedown.js的代码(好像是叫这个

  • 使用前请修改@connect中的ip和SETTINGS中的内容
// ==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: "关闭",
            });
        }
    });
})();
KubeDownLoadPembuat
§
Posted: 20 Oktober 2023

谢谢支持,请推广本脚本

Post reply

Sign in to post a reply.