// ==UserScript== // @id baidupan@ywzhaiqi@gmail.com // @name BaiduPanDownloadHelper // @version 3.5.8 // @namespace https://github.com/ywzhaiqi // @author ywzhaiqi@gmail.com // @description 批量导出百度盘的下载链接 // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_setClipboard // @grant GM_openInTab // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // homepageURL http://userscripts-mirror.org/scripts/show/162138 // updateURL http://userscripts-mirror.org/scripts/source/162138.meta.js // downloadURL https://userscripts-mirror.org/scripts/source/162138.user.js // @homepageURL https://greasyfork.org/scripts/294/ // @include *n.baidu.com/share/link* // @include *n.baidu.com/s/* // @include http*://yun.baidu.com/share/home* // @include http*://yun.baidu.com/pcloud/album/info* // @include http*://yun.baidu.com/pcloud/album/file* // @include http*://pan.baidu.com/disk/home* // @exclude http*://yun.baidu.com/share/home*&view=follow // @run-at document-end // @downloadURL https://update.greasyfork.icu/scripts/27886/BaiduPanDownloadHelper.user.js // @updateURL https://update.greasyfork.icu/scripts/27886/BaiduPanDownloadHelper.meta.js // ==/UserScript== // 参考 BaiduPanMD5Button http://userscripts-mirror.org/scripts/show/156906 /** * 百度盘代码解析,2013/07/22 * 文件:yun_home_speed_all.js * 函数:performSelectionDownload */ var $ = unsafeWindow.jQuery; var isChrome = !!this.chrome; var Config = { yunGuanjia: false, // 是否去掉云管家提示 debug: false, quickLinks: 'Books=/Books/网络小说\n小说=/Books/小说\n网络小说=/Books/网络小说', trim_titles: [ // Share Home 标题移除的文字广告 "[v.BDpan.COM]" ], aria2_jsonrpc: GM_getValue('aria2_jsonrpc') || 'http://localhost:6800/jsonrpc', YAAW_UA: "user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11", YAAW_REF: "Referer:http://pan.baidu.com/disk/home", lineBreak: isChrome ? '\r' : '\n', }; var TPLS = { normal: '{server_filename}' + Config.lineBreak + '{dlink}', aria2c: 'aria2c -c -x 10 -s 10 --out "{server_filename}" "{dlink}" --user-agent="netdisk" --header "Referer:http://pan.baidu.com/disk/home"', }; var debug = Config.debug ? console.debug.bind(console) : function() {}; var FileUtils = unsafeWindow.FileUtils, Utilities = unsafeWindow.Utilities, disk = unsafeWindow.disk, Page = unsafeWindow.Page; var Utils = { r1: function(reg, str) { var m = str.match(reg); return m ? m[1] : null; } }; var App = { fetchCount: 0, init: function() { this.allPageProcessor(); var path = location.pathname; switch (path) { case '/share/home': // this.shareHomePageProcessor(); break; case '/disk/home': this.diskHomePageProcessor(); break; case '/pcloud/album/info': this.albumPageProcessor(); break; case '/pcloud/album/file': this.albumOnePageProcessor(); break; default: if (path === '/share/link' || path.indexOf('/s/') !== -1) { if (document.getElementById('barCmdTransfer')) { // this.shareDirPageProcessor(); } else { this.shareOnePageProcessor(); } } break; } }, allPageProcessor: function() { GM_addStyle(Res.panelCSS); // 注册菜单 GM_registerMenuCommand('设置 Aria2 JSON-RPC Path', function(){ var newPath = prompt('Aria2 JSON-RPC Path', Config.aria2_jsonrpc); if (newPath) { GM_setValue('aria2_jsonrpc', Config.aria2_jsonrpc = newPath); } }); if (Config.yunGuanjia) { this.removeYunGuanjia(); } }, removeYunGuanjia: function() { // 去掉云管家提示,来自 Crack Url Wait Code Login For Chrome unsafeWindow.navigator.__defineGetter__('platform', function(){ return '' }); }, shareOnePageProcessor: function() { var data = null; // 获取链接,文件 viewshare_all.js,函数 _checkDownloadFile,2013-12-2 var url = disk.api.RestAPI.SHARE_GET_DLINK + "&uk=" + FileUtils.share_uk + "&shareid=" + FileUtils.share_id + "×tamp=" + FileUtils.share_timestamp + "&sign=" + FileUtils.share_sign; var data = { fid_list: "[" + disk.util.ViewShareUtils.fsId + "]" }; $.post(url, data, function(result) { if (result && result.errno == 0 && result.dlink) { $('#downFileButtom') .attr({ "href": result.dlink }) .find('b').css('color', 'red'); data = result; } else { console.error(result); $('#downFileButtom').click(); } }); // 增加 YAAW 按钮 $('') .css('padding', '0px 5px') .html('YAAW') .click(function(){ if (data) { App.addToYAAW(data); } else { App.useToast('正在获取链接,请等待'); } }) .insertAfter('#downFileButtom'); // 失效页面添加分享主页链接 if (document.title.match(/百度云 网盘-链接不存在/)) { var m = document.location.href.match(/uk=(\d+)/); if (m) { var homeUrl = "home?uk=" + m[1] + "#category/type=0"; $('') .attr('href', homeUrl) .attr('style', 'margin-left: 10px;') .text('个人主页') .appendTo('#share_nofound_des'); } } }, shareHomePageProcessor: function() { // http://yun.baidu.com/share/home?uk=53993635&view=share#category/type=0 var self = this; $('section.flag10-fns').attr('title', '双击复制所有链接') [0].addEventListener('dblclick', function(){ var urls = $.map($('.file-item, .sharegrid-des'), function(elem){ var url = $(elem).attr('_link') || $(elem).attr('_href'), title = $(elem).find('div[title], .sharegrid-des-title').attr('title'); if (url) { $.map(Config.trim_titles, function(s) { title = title.replace(s, ''); }); } return title + Config.lineBreak + url; }); App.copy(urls, false); }, false); return; // 批量保存 // 分享页面:http://yun.baidu.com/s/1mqxnN,查找 doTransferVideo,doTransferFiles 函数 var parseDirPath = function(path) { return path.substring(path.indexOf(":/") + 1); }; var doTransferVideo = function(urls) { var url = urls.shift(); if (!url) return; $.get(url, function(data) { var path = Utils.r1(/startTransferVideo\("(.*?)"\)/, data), share_uk = Utils.r1(/FileUtils.share_uk="(.*?)"/, data), // FileUtils.share_uk share_id = Utils.r1(/FileUtils.share_id="(.*?)"/, data); // FileUtils.share_id var postData = { path: "", filelist: $.stringify([parseDirPath(path)]), type: 1 }; // disk.api.RestAPI.TRANSFER $.post("/share/transfer?channel=chunlei&clienttype=0&web=1" + "&from=" + encodeURIComponent(share_uk) + "&shareid=" + share_id, postData, function(data) { var info = null; try { info = $.parseJSON(data); } catch (C) { info = null; } console.log(info); doTransferVideo(urls); }); }); }; setTimeout(function(){ $('#top_menu_other') .attr('id', 'mTransferVideos') .html('批量保存') .click(function(){ var urls = $.map($('.file-item, .sharegrid-des'), function(elem){ return $(elem).attr('_link') || $(elem).attr('_href'); }); doTransferVideo(urls); return false; }); }, 1000); }, albumPageProcessor: function() { var self = this; var _mAlbumId, _mUk, _mPage; _mAlbumId = (disk.ui.album.albuminfo && disk.ui.album.albuminfo.album_id) || disk.getParam("album_id"); _mUk = (disk.ui.album.uinfo && disk.ui.album.uinfo.uk) || disk.getParam("uk") || disk.getParam("query_uk"); _mPage = {count: 0,totalPage: 0,nowPage: 1,limit: 60, handle: false} var getList = function() { var nowPage = $('#albumPage .page-input-wrap > input').val(); _mPage.nowPage = parseInt(nowPage); var restUrl = "/pcloud/album/listfile?album_id=" + _mAlbumId + "&query_uk=" + _mUk + "&start=" + (_mPage.nowPage - 1) * 60 + "&limit=" + _mPage.limit; $.get(restUrl, function(result){ if (result && result.errno == 0 && result.list) { App.showPanel(result.list); App.toast.setVisible(false); } else { App.useToast("获取数据出错, " + restUrl); } }); } // 内容由 js 生成 var clicked = function(e){ var $quickFileSave = $('#quickFileSave'); if ($quickFileSave[0]) { $('\ 批量下载') .insertAfter($quickFileSave) [0].onclick = getList; $('body').unbind('click'); } }; $('body').bind('click', clicked); }, albumOnePageProcessor: function() { var data = { fid_list: "[" + disk.util.ViewShareUtils.fsId + "]" }; // 增加 YAAW 按钮 $('') .css('padding', '0px 5px') .html('YAAW') .click(function(){ if (data) { App.addToYAAW(data); } else { App.useToast('正在获取链接,请等待'); } }) .insertAfter('#downFileButtom'); }, shareDirPageProcessor: function() { var shareId, uk, self = this; // 添加批量下载按钮 $('批量下载') .appendTo('#file_action_buttons') [0].onclick = function(e) { self.downloadAll(); }; shareId = FileUtils.share_id || disk.getParam['shareid']; uk = FileUtils.sysUK || disk.getParam['uk']; this.API_URL = '/share/list?channel=chunlei&clienttype=0&web=1&page=1&shareid=' + shareId + '&uk=' + uk; // 添加右键 "复制" 菜单 var observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ for (var i = mutation.addedNodes.length - 1; i >= 0; i--) { if(mutation.addedNodes[i].id == "right-context-menu"){ self.addRightContextMenu(); observer.disconnect(); } } }); }); observer.observe(document.body, { childList: true }); }, diskHomePageProcessor: function() { // 个人主页 var self = this; this.API_URL = '/api/list?channel=chunlei&clienttype=0&web=1&num=100&order=time&desc=1'; // 添加批量下载按钮 $('批量下载') .insertAfter('#barCmdDownload') [0].onclick = function(e) { self.downloadAll(); }; // 读取设置 var quickLinks = GM_getValue('quickLinks'); if (quickLinks) Config.quickLinks = quickLinks; // 增加自定义快捷目录 var addQuickLinks = function() { $('#aside-menu > .quickLink').remove(); var html = ''; var lines = Config.quickLinks.split('\n'); lines.forEach(function(line){ var offset = line.indexOf('='); if (offset > 0) { var name = line.substr(0, offset).trim(), url = line.substr(offset + 1).trim(); html += '