百度网盘不限速下载-KubeDown

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

在您安装前,Greasy Fork 希望您知道此脚本声明其包含了一些负面功能。这些功能也许会使脚本作者获利,而不能给您带来任何直接的金钱收益。

您只有在参与某些事后才能使用脚本的全部功能,如加入某群组、订阅某频道或在某页点赞等。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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: `<input id="swal-input1" class="swal2-input" value="` + downloadlink + `"><input id="swal-input2" class="swal2-input" value="` + useragent + `"><a href='${`bc://http/${btoa(unescape(encodeURIComponent(`AA/${downloadlink.match(/&fin=(.*?)&/)[1]}/?url=${encodeURIComponent(downloadlink)}&user_agent=${useragent}ZZ`)))}`}'><button class="swal2-confirm swal2-styled">BitComet</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: "关闭",
            });
        }
    });

    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: "关闭",
                        });
                    },
                });
            },
        });
    });
})();