您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
统计百度盘文件(夹)数量大小. Thanks BaiduPanMD5Button
// ==UserScript== // @name BaiduPanFileList // @namespace https://greasyfork.org/scripts/5128-baidupanfilelist/code/BaiduPanFileList.user.js // @version 1.2.3 // @description 统计百度盘文件(夹)数量大小. Thanks BaiduPanMD5Button // @match https://pan.baidu.com/disk/home* // @include https://pan.baidu.com/disk/home* // @match https://pan.baidu.com/disk/main* // @include https://pan.baidu.com/disk/main* // @require http://libs.baidu.com/jquery/2.1.1/jquery.min.js // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @run-at document-end // @copyright 2014+, [email protected] // ==/UserScript== // %Path% = 文件路径 // %FileName% = 文件名 // %Tab% = Tab键 // %FileSize% = 可读文件大小(带单位保留两位小数,如:6.18 MiB) // %FileSizeInBytes% = 文件大小字节数(为一个非负整数) var _BaiduPanFileList_Pattern = "%Path%%Tab%%FileSize%(%FileSizeInBytes% Bytes)"; var url = document.URL; var BTN_WAITING_TEXT = "統計檔案"; var BTN_RUNNING_TEXT = "處理中..."; var BASE_URL_API = "https://pan.baidu.com/api/list?channel=chunlei&clienttype=0&web=1&dir="; // 按钮 var btn_curr = document.createElement("button"); btn_curr.type = "button"; btn_curr.style.cssText = 'margin: 0px 10px;height: 28px;'; btn_curr.innerHTML = BTN_WAITING_TEXT; btn_curr.id = BTN_WAITING_TEXT; btn_curr.disabled = false; btn_curr.waiting_text = BTN_WAITING_TEXT; btn_curr.running_text = BTN_RUNNING_TEXT; btn_curr.error = false; // 按钮单击 btn_curr.onclick = function(e){ e = e||window.event; if(e.ctrlKey){ showInfo(btn_curr, true); }else{ showInfo(btn_curr, false); } }; // 键盘, 确保在按钮添加失败时依旧可用 document.addEventListener("keydown", function(e){ e = e||window.event; var key = e.keyCode||e.charCode; if(key == 81||key == 113){ if(e.ctrlKey){ showInfo(btn_curr, true); }else{ showInfo(btn_curr, false); } } }, false); // 自己的网盘添加按钮 if (url.indexOf("http://pan.baidu.com/disk/home") != -1) { if(!document.getElementById(BTN_WAITING_TEXT)){ $("[style='position: absolute; top: 0px; padding-top: 11px; line-height: normal;']").append(btn_curr); } } // 处理按钮和快捷键 function showInfo(button, includeSubDir) { if(button.disabled||button.error){ return; } showBtn(false); url = document.URL; while (url.indexOf("%25") != -1) { url = url.replace("%25", "%"); } var listurl = BASE_URL_API; var folder_access_times = 0; var currentDir = ""; var checkedPath = new Array(); var str_alert = ""; var num_all_files = 0; var num_all_folder = 0; var num_jpg = 0; var num_original = 0; var name_all = new Array(); var size_all = 0; // 百度api // http://pan.baidu.com/api/list?channel=chunlei&clienttype=0&web=1&num=100&page=1&dir=<PATH>&order=time&desc=1&showempty=0&_=1404279060517&bdstoken=9c11ad34c365fb633fc249d71982968f&app_id=250528 // 测试url // http://pan.baidu.com/disk/home#dir/path=<PATH> // http://pan.baidu.com/disk/home#from=share_pan_logo&path=<PATH> // http://pan.baidu.com/disk/home#key=<KEY> // http://pan.baidu.com/disk/home#path=<PATH> // http://pan.baidu.com/disk/home // http://pan.baidu.com/disk/home#path=<PATH>&key=<KEY> if (url.indexOf("path=") == -1) { listurl += "%2F"; currentDir = "/"; getList(listurl); } else if(url.indexOf("path=") != -1){ var path = url.substring(url.indexOf("path=") + 5); if(path.indexOf("&") != -1){ path = path.substring(0, path.indexOf("&")); } listurl += path; currentDir = decodeURIComponent(path); getList(listurl); } // 保存选择文件(夹)路径 checkedPath = getCheckedPathArray(currentDir); // 请求数据 function getList(url) { if(button.error){ return; } GM_xmlhttpRequest({ method : 'GET', synchronous : false, url : url, timeout : 9999, onabort : function() { showError(decodeURIComponent(url.replace(BASE_URL_API, "")) + "\n\n意外终止, 请刷新重试"); }, onerror : function() { showError(decodeURIComponent(url.replace(BASE_URL_API, "")) + "\n\n未知错误, 请刷新重试"); }, ontimeout : function() { showError(decodeURIComponent(url.replace(BASE_URL_API, "")) + "\n\n请求超时, 请刷新重试"); }, onload : function(reText) { var JSONobj = JSON.parse(reText.responseText); if (JSONobj.errno != 0) { showError("读取目录: " + decodeURIComponent(url.replace(BASE_URL_API, "")) + " 失败, 错误码: " + JSONobj.errno); return; } var size_list = JSONobj.list.length; var curr_item = null; for ( var i = 0; i < size_list; i++) { curr_item = JSONobj.list[i]; if(listurl === url && checkedPath.length != 0 && !isArrayContains(checkedPath, curr_item.path)){ continue; } if (curr_item.isdir == 1) { num_all_folder++; name_all.push(curr_item.path); if (includeSubDir) { folder_access_times++; getList(BASE_URL_API + encodeURIComponent(curr_item.path)); } } else { num_all_files++; if (curr_item.server_filename.indexOf(" (JPG).zip") != -1) { num_jpg++; } else if (curr_item.server_filename.indexOf(".zip") != -1) { num_original++; } size_all += curr_item.size; if(typeof _BaiduPanFileList_Pattern == "string"){ name_all.push(_BaiduPanFileList_Pattern.replace("%FileName%", curr_item.server_filename).replace("%Path%", curr_item.path).replace("%FileSizeInBytes%", curr_item.size).replace("%Tab%", "\t").replace("%FileSize%", getReadableFileSizeString(curr_item.size))); }else{ name_all.push(curr_item.path + "\t" + getReadableFileSizeString(curr_item.size) + "(" + curr_item.size + " Bytes)"); } } } folder_access_times--; if (folder_access_times + 1 == 0) { var CTL = "\r\n"; str_alert = (checkedPath.length == 0 ? currentDir : checkedPath.join("\r\n")) + CTL + CTL + "files: " + num_all_files + ", folders: " + num_all_folder + CTL + "xxx (JPG).zip: " + num_jpg + CTL + "xxx.zip: " + num_original + CTL + "size: " + getReadableFileSizeString(size_all) + " ("+ size_all.toLocaleString() + " Bytes)" + CTL; GM_setClipboard(str_alert + CTL + CTL + name_all.sort().join("\r\n") + "\r\n"); alert(str_alert.replace(/\r\n/g, "\n")); showBtn(true); } } }); } // 错误提示 function showError(info){ if(!button.error){ button.error = true; alert(info); } } // 禁用启用按钮 function showBtn(isDisplay) { if (isDisplay === true) { button.innerHTML = button.waiting_text; button.disabled = false; } else { button.disabled = true; button.innerHTML = button.running_text; } } } // 转换可读文件大小 function getReadableFileSizeString(fileSizeInBytes) { var i = 0; var byteUnits = [ ' Bytes', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB', ' EiB', ' ZiB', ' YiB' ]; while (fileSizeInBytes >= 1024) { fileSizeInBytes = fileSizeInBytes / 1024; i++; } return fileSizeInBytes.toFixed(2) + byteUnits[i]; } // 得到选择项目,如果获取失败则返回空数组 function getCheckedPathArray(currentDir){ var re = new Array(); var items; try { items = getCheckItems(); for (var i = 0; i < items.length; i++) { if(items[i].server_filename == "我的应用数据"){ re.push("/apps"); }else{ re.push((currentDir == "/" ? currentDir : currentDir + "/") + items[i].server_filename); } } } catch (e) { // TODO: handle exception } return re; } // 判断是数组中是否还有指定元素 function isArrayContains(arr, obj) { var i = arr.length; while (i--) { if (arr[i] === obj) { return true; } } return false; } // ////////////////////////////////////////////////////////////////////// /* * === 说明 === * @作者:有一份田 * @官网:http://www.duoluohua.com/download/ * @Email:[email protected] * @Git:http://git.oschina.net/youyifentian * @转载重用请保留此信息 * * * modified by [email protected] */ function getCheckItems(){ var items=[]; var containerStyle = $('.list-view-container').attr("style"); var boxCss=(_isEmpty(containerStyle) || containerStyle == 'display: block;') ? 'module-list-view' : 'module-grid-view'; $('div.' + boxCss).find('.item-active').each(function(i,o){ var server_filename = $(o).find(".filename").attr('title'); if(!_isEmpty(server_filename)){ items.push({'server_filename':server_filename}); } }); return items; } function _isEmpty(e){ return e == undefined || e == null || e == ''; } /*function getCheckItems(){ var items=[],boxCss=$('.list-selected').length ? 'module-list-view' : 'module-grid-view'; $('div.' + boxCss).find('.item-active').each(function(i,o){ items.push(getListViewCheckedItemInfo(o)); }); return items; } function getListViewCheckedItemInfo(obj){ var o=$(obj),fs_id=o.attr('data-id'),category=o.attr('data-category'), isdir=o.attr('data-extname')=='dir' ? 1 : 0, server_filename=o.find('[node-type="name"]').attr('title'), dlink=o.attr('dlink') || ''; return {'fs_id':fs_id,'category':category,'isdir':isdir,'server_filename':server_filename,'dlink':dlink,'item':obj}; }*/