// ==UserScript== // @name 迅雷云盘获取直链 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 获取迅雷云盘的直接下载链接,生成txt文件,可利用其他工具下载(如idman) // @author bleu // @icon https://img-vip-ssl.a.88cdn.com/img/xunleiadmin/5fb4b23888a05.png // @supportURL https://greasyfork.org/zh-CN/scripts/431256/feedback // @match https://pan.xunlei.com/* // @grant none // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js // @downloadURL none // ==/UserScript== (function () { 'use strict'; var local_path; const originFetch = fetch; var reqHeaders, filesURL; Object.defineProperty(window, "fetch", { configurable: true, enumerable: true, // writable: true, get() { return (url, options) => { if (url.indexOf('https://api-pan.xunlei.com/drive/v1/files?limit=100&') === 0) { filesURL = url; reqHeaders = options.headers; //console.log(reqHeaders) } return originFetch(url, options) } } }) var arryIndex; var fileArry; var filetxt; var temp_path; var running = { 'runStatus': false, 'successNum': 0, 'failNum': 0, 'exit': false } var $BleuButton var main = { addElements() { $BleuButton = $('
'); let inputValue = localStorage.getItem("local_path") || 'D:\\Downloads'; let $BleuInput = $(` `); $('div.pan-list-menu').prepend($BleuInput, $BleuButton); }, addButtonEvent() { $BleuButton.on('click', async function () { if (running.runStatus) { alert('正在生成文件中,稍后再试'); return } local_path = $('#bleu_inp').val();; localStorage.setItem("local_path", local_path); main.setInitValue(); await main.getFileSign(); if (running.exit) { running.exit = false; alert('请刷新页面重新尝试!'); return false; } $('li.pan-list-item').each((index, item) => { if (item.getAttribute('class') === 'pan-list-item') { delete(fileArry[0][index]); } }); await main.getAllFiles(fileArry[0]); if (running.successNum + running.failNum != 0) { alert(`获取链接:成功${running.successNum}条;失败${running.failNum}条,点击确定下载文件`) main.downloadFile(); } running.runStatus = false; }) }, setInitValue() { arryIndex = 0; fileArry = []; filetxt = []; temp_path = ''; running.runStatus = true; running.successNum = 0; running.failNum = 0; }, async getAllFiles(loopArry) { for (let index = 0; index < loopArry.length; index++) { if (loopArry[index]) { if (loopArry[index].kind === 'drive#file') { await main.getDirectLink(loopArry[index].id); } if (loopArry[index].kind === 'drive#folder') { temp_path += `\\${loopArry[index].name}`; await main.getFileSign(loopArry[index]); await main.getAllFiles(fileArry[arryIndex - 1]); } } } temp_path = temp_path.substring(0, temp_path.lastIndexOf('\\')); }, getFileSign(folder) { return new Promise((resolve, reject) => { let runURL; if (folder) { runURL = `https://api-pan.xunlei.com/drive/v1/files?limit=100&parent_id=${folder.id}&filters={"phase":{"eq":"${folder.phase}"},"trashed":{"eq":${folder.trashed}}}&with_audit=true`; runURL = encodeURI(runURL); } else { runURL = filesURL; } fileArry[arryIndex] = []; $.ajax({ type: "get", timeout: 10000, // 超时时间 10 秒 headers: reqHeaders, url: runURL, dataType: "json", success: function (data, textStatus) { data.files.forEach((item) => { let temp = { 'kind': item.kind, 'id': item.id, 'name': item.name, 'phase': item.phase, 'trashed': item.trashed }; fileArry[arryIndex].push(temp); }); arryIndex++; resolve(textStatus); }, error: function (err) { runURL === filesURL ? running.exit = true : running.exit = false; reject(err); } }); }); }, getDirectLink(sign) { return new Promise((resolve, reject) => { $.ajax({ type: "get", timeout: 10000, // 超时时间 10 秒 headers: reqHeaders, url: `https://api-pan.xunlei.com/drive/v1/files/${sign}`, dataType: "json", success: function (data, textStatus) { running.successNum++; let temp = { 'name': data.name, 'link': data.web_content_link, 'path': local_path + temp_path }; filetxt.push(temp); resolve(textStatus); }, error: function (err) { running.failNum++; reject(err); } }); }); }, _downFlie(fnmae, data) { var elementA = document.createElement('a'); elementA.download = fnmae; elementA.style.display = 'none'; var blob = new Blob([data]); elementA.href = URL.createObjectURL(blob); document.body.appendChild(elementA); elementA.click(); document.body.removeChild(elementA); }, downloadFile() { let idmDown = ''; let nameLink = ''; filetxt.forEach((item) => { idmDown += `idman /d "${item.link}" /p ${item.path} /f ${item.name.replace(' ','_')} /a&`; nameLink += `${item.name}\n${item.link}\n`; }); this._downFlie(`idm下载${(new Date()).valueOf()}.txt`, idmDown); this._downFlie(`迅雷直链${(new Date()).valueOf()}.txt`, nameLink); }, initUI() { let counter = 20; let listener = setInterval(function () { counter--; if (document.querySelector('.pan-list-item')) { clearInterval(listener); main.addElements(); main.addButtonEvent(); } counter === 0 && clearInterval(listener); }, 200); }, } main.initUI(); })();