破除网盘限速,成就你的体验,无视任何黑号,加速你的下载!灵感来源于KDown,经作者同意,发布本脚本给各位网友体验!
// ==UserScript==// @name 🔥【百度网盘加速】33Down 网盘解析 🔥// @namespace https://www.33down.top// @description 破除网盘限速,成就你的体验,无视任何黑号,加速你的下载!灵感来源于KDown,经作者同意,发布本脚本给各位网友体验!// @version 1.0.0// @author// @license MIT// @icon https://cdn-static.33down.top/assets/logo.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// @grant GM_addStyle// @grant GM_setClipboard// @grant GM_getValue// @grant GM_setValue// @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/*// @connect 33down.top// @connect staticfile.org// @connect baidu.com// @connect 127.0.0.1// @connect localhost// ==/UserScript==(() => {// 在页面加载时立即调用GetNotify函数GetNotify();if (window.location.pathname === "/disk/home") {window.location.replace("./main");}AddElement();function GetNotify() {GM_xmlhttpRequest({method: "GET",url: "https://api.33down.top/api/isok",onload: function(response) {try {const jsondata = JSON.parse(response.responseText);const { code, message, open, gg } = jsondata;// 确保公告是打开状态if (open === 1 && code === 200) {Swal.fire({icon: "info",title: gg, // 使用公告标题text: message, // 使用公告信息confirmButtonText: "关闭",});}} catch (e) {console.error("Error fetching announcement:", e);}},});}function AddElement() {if (document.getElementById("33Down") === null) {const toolbar = document.querySelector("div.wp-s-agile-tool-bar__header");if (toolbar) {const newButton = document.createElement("button");newButton.id = "33Down";newButton.className = "u-button nd-file-list-toolbar-action-item u-button--primary";newButton.style.marginRight = "8px";newButton.innerText = "33Down";toolbar.prepend(newButton);const statusButton = document.createElement("button");statusButton.id = "33DownStatus";statusButton.className = "u-button nd-file-list-toolbar-action-item u-button--primary";statusButton.style.marginRight = "8px";statusButton.innerText = "33Down Status";toolbar.prepend(statusButton);const settingsButton = document.createElement("button");settingsButton.id = "aria2SettingsButton";settingsButton.className = "u-button nd-file-list-toolbar-action-item u-button--primary";settingsButton.style.marginRight = "8px";settingsButton.innerText = "Aria2 设置";settingsButton.onclick = openAria2Settings;toolbar.prepend(settingsButton);newButton.addEventListener("click", handleDownClick);statusButton.addEventListener("click", handleDownStatusClick);} else {setTimeout(AddElement, 100);}} else {console.log("33Down button already added.");}}async function handleDownClick() {let selectedElements = document.querySelectorAll(".wp-s-pan-table__body-row.mouse-choose-item.selected, .wp-s-file-grid-list__item.text-center.cursor-p.mouse-choose-item.is-checked, .wp-s-file-contain-list__item.text-center.cursor-p.mouse-choose-item.is-checked");let selectedIds = Array.from(selectedElements).map(item => item.getAttribute("data-id"));if (selectedIds.length === 0) {Swal.fire({showConfirmButton: true,title: '系统提示',text: '请选择需要下载的文件',icon: 'error'});return;}if (selectedIds.length > 1) {Swal.fire({showConfirmButton: true,title: '系统提示',text: '暂时只能下载一个文件',icon: 'error'});return;}const { value: password } = await Swal.fire({title: '输入密码',input: 'password',inputLabel: '新版体验,免任何密码,输入:33Down即可',inputPlaceholder: '新版体验!免密码!输入:33Down即可',inputAttributes: {maxlength: 30,autocapitalize: 'off',autocorrect: 'off'}});if (!password) {Swal.fire("提示", "需要密码来继续", "info");return;}Swal.fire({title: "正在获取下载链接...",onBeforeOpen: () => {Swal.showLoading();}});const bdstoken = await getBdsToken();if (!bdstoken) {Swal.fire("错误", "无法获取bdstoken", "error");return;}const bdpassword = "zzzz";const shareResponse = await shareFiles(bdstoken, selectedIds, bdpassword);const apiResponse = await getDownloadLinkFromApi(shareResponse.link, password);if (apiResponse && apiResponse.error && Object.keys(apiResponse).length === 1) {Swal.update({icon: 'error',title: '错误',text: apiResponse.error});} else if (apiResponse && apiResponse.dlink && apiResponse.server_filename) {const dlink = apiResponse.dlink;Swal.fire({icon: 'success',title: '下载链接获取成功',html: `文件名: ${apiResponse.server_filename}<br>链接: <input type="text" id="downloadLink" value="${dlink}" style="width: 100%;" readonly><br>用户代理(UA): <textarea id="userAgent" readonly style="width: 100%; height: 60px; resize: none;">33Down;Links;33down.top</textarea><button id="copyButton" class="swal2-confirm swal2-styled">复制链接</button><button id="sendToAria2Button" class="swal2-confirm swal2-styled" style="margin-top: 10px;">发送到 Aria2</button>`,didOpen: () => {const copyButton = document.getElementById("copyButton");copyButton.addEventListener("click", async () => {const downloadLinkInput = document.getElementById("downloadLink");try {await navigator.clipboard.writeText(downloadLinkInput.value);Swal.fire("已复制", "下载链接已复制到剪贴板", "success");} catch (err) {console.error("Failed to copy: ", err);Swal.fire("复制失败", "无法将链接复制到剪贴板", "error");}});const sendToAria2Button = document.getElementById("sendToAria2Button");sendToAria2Button.addEventListener("click", () => {const downloadLink = document.getElementById("downloadLink").value;sendToAria2(downloadLink, apiResponse.server_filename);});},preConfirm: () => {return { dlink: apiResponse.dlink };}});}}function handleDownStatusClick() {Swal.fire("检查中...", "正在检查服务器状态,请稍候...", "info");GM_xmlhttpRequest({method: "GET",url: "https://api.33down.top/api/status",onload: function(response) {try {const data = JSON.parse(response.responseText);const { code, message } = data;if (code === 200) {Swal.fire({icon: "success",title: "服务器状态",text: message,});} else if (code === 201) {Swal.fire({icon: "error",title: "服务器状态",text: message,});} else {Swal.fire({icon: "warning",title: "服务器状态",text: "未知状态",});}} catch (error) {Swal.fire("错误", "无法获取服务器状态", "error");}},onerror: function() {Swal.fire("错误", "无法连接到服务器", "error");},});}function openAria2Settings() {const aria2RpcUrl = GM_getValue('aria2RpcUrl', 'http://localhost:6800/jsonrpc');const aria2Token = GM_getValue('aria2Token', '');Swal.fire({title: '配置 Aria2 设置',html: `<input type="text" id="aria2RpcUrl" value="${aria2RpcUrl}" class="swal2-input" placeholder="输入 Aria2 RPC URL"><input type="text" id="aria2Token" value="${aria2Token}" class="swal2-input" placeholder="输入 Aria2 Token">`,focusConfirm: false,showCancelButton: true,confirmButtonText: '保存',cancelButtonText: '取消',preConfirm: () => {const rpcUrl = document.getElementById('aria2RpcUrl').value;const token = document.getElementById('aria2Token').value;GM_setValue('aria2RpcUrl', rpcUrl);GM_setValue('aria2Token', token);}}).then((r###lt) => {if (r###lt.isConfirmed) {Swal.fire('设置已保存', '', 'success');}});}function sendToAria2(downloadLink, filename) {const aria2RpcUrl = GM_getValue('aria2RpcUrl', 'http://localhost:6800/jsonrpc');const aria2Token = GM_getValue('aria2Token', '');const requestPayload = {jsonrpc: '2.0',method: 'aria2.addUri',id: new Date().getTime(),params: [[`${downloadLink}`],{'out': filename,'header': ['User-Agent: 33Down;Links;33down.top'],}]};if (aria2Token) {requestPayload.params.unshift(`token:${aria2Token}`);}GM_xmlhttpRequest({method: "POST",url: aria2RpcUrl,data: JSON.stringify(requestPayload),headers: {'Content-Type': 'application/json',},onload: function(response) {const data = JSON.parse(response.responseText);if (data && data.r###lt) {Swal.fire('已发送', '下载链接已成功发送到 Aria2', 'success');} else {Swal.fire('发送失败', '无法将下载链接发送到 Aria2', 'error');}},onerror: function() {Swal.fire('发送失败', '无法连接到 Aria2 服务器', 'error');}});}async function getBdsToken() {var htmlString = $("html").html();var regex = /"bdstoken":"(\w+)"/;var match = regex.exec(htmlString);return match ? match[1] : null;}async function shareFiles(bdstoken, selectedIds, bdpassword) {return $.post("https://pan.baidu.com/share/set?channel=chunlei&bdstoken=" + bdstoken, {period: 1,pwd: bdpassword,eflag_disable: true,channel_list: "[]",schannel: 4,fid_list: JSON.stringify(selectedIds)}).then(response => response);}function getDownloadLinkFromApi(link, password) {// 清理密码以移除非字母数字字符const cleanedPassword = password.replace(/[^a-zA-Z0-9_]/g, '');// 创建请求数据const requestData = {url: link,dir: '/',password: cleanedPassword};return new Promise((resolve, reject) => {GM_xmlhttpRequest({method: "POST",url: "https://api.33down.top/api/download_post",data: JSON.stringify(requestData),headers: {'Content-Type': 'application/json'},onload: function(response) {if (response.status >= 200 && response.status < 300) {const data = JSON.parse(response.responseText);resolve(data);} else {reject({status: response.status,statusText: response.statusText});}},onerror: function(response) {reject({status: response.status,statusText: "Network error"});}});});}})();