// ==UserScript== // @name 阿里云盘-批量修改文件名-剧集刮削 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 用于阿里云盘批量修改文件名,主要为剧集刮削准备 // @author You // @match https://www.aliyundrive.com/drive/folder/* // @icon https://www.google.com/s2/favicons?sz=64&domain=aliyundrive.com // @grant none // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @run-at document-body // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; var $ = $ || window.$; var obj = { files: [], randomFillParam: -1, url: location.href }; obj.reset = function () { obj.files = []; obj.randomFillParam = -1; obj.url = location.href; }; obj.initBatchButton = function () { if ($(".button--batch").length) { return; } if ($("#root header").length) { var html = ''; html += '
'; $("#root header:eq(0)").append(html); $(".button--batch").on("click", obj.showModifyPage); }else { setTimeout(obj.initBatchButton, 1000); } }; obj.init = function () { var send = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function(data) { this.addEventListener("load", function(event) { if(this.readyState == 4 && this.status == 200) { var response = this.response, responseURL = this.responseURL; try { response = JSON.parse(response) } catch (error) { }; if (responseURL.endsWith("/file/get_path")) { //设置路径名 if (response instanceof Object && response.items) { obj.path = "/"; var items = response.items; for(var i=items.length-1; i>=0; i--) { obj.path += items[i].name+"/"; } } }else if (responseURL.indexOf("/file/list") > 0) { if (document.querySelector(".ant-modal-mask")) { //排除【保存 移动 等行为触发】 return; } if (response && response.items) { if(obj.url && obj.url == location.href) { obj.files = obj.files.concat(response.items); }else { obj.reset(); obj.files = response.items; } } } } }, false); send.apply(this, arguments); }; }; obj.showModifyPage = function() { var html = `
`; $("body").append(html); $(".ant-modal-batch-modify .icon-wrapper--3dbbo").one("click", function () { $(".ant-modal-batch-modify").remove(); }); $(".ant-modal-batch-modify .ant-modal-wrap").on("click", function (event) { if ($(event.target).closest(".ant-modal-content").length == 0) { $(".ant-modal-batch-modify").remove(); } }); $(".batch-path").val(obj.path); $(".batch-clear").on("click", obj.clear); $(".batch-modify").on("click", obj.batchModify); $(".batch-randomFill").on("click", obj.randomFill); }; obj.clear = function() { $(".batch-before").val(""); $(".batch-after").val(""); $(".batch-after-suff").val(""); }; obj.disableButton = function() { $(".batch-randomFill").attr('disabled',true); $(".batch-clear").attr('disabled',true); $(".batch-modify").attr('disabled',true); }; obj.enableButton = function() { $(".batch-randomFill").attr('disabled',false); $(".batch-clear").attr('disabled',false); $(".batch-modify").attr('disabled',false); }; obj.batchModify = function() { obj.disableButton(); //滚动到底,自动获取所有文件 obj.pageScroll(); var nameBefore = $(".batch-before").val(); var nameAfter = $(".batch-after").val(); var suff = $(".batch-after-suff").val(); if(isBlank(nameBefore) || isBlank(nameAfter)) { alert("修改名字不能为空!"); obj.enableButton(); return; } if(nameBefore === nameAfter) { alert("修改前后名字不能一样!"); obj.enableButton(); return; } if(!obj.files) { alert("当前路径文件为空!"); obj.enableButton(); return; } //检查集数标记 var pos = []; var cnt = 0; for(var i=0; i " + newName); } $(".ant-modal-batch-modify").remove(); alert("完成修改【"+count+"】个文件"); setTimeout(function() {window.location.reload()}, 500); } obj.ajaxModify = function(file, newName, token) { $.ajax({ type: "post", url: "https://api.aliyundrive.com/v3/file/update", data: JSON.stringify({ "drive_id": file.drive_id, "file_id": file.file_id, "name": newName, "check_name_mode": "refuse" }), headers: { "authority": "api.aliyundrive.com", "authorization": token, "content-type": "application/json;charset=UTF-8" }, async: false, //批量修改文件多时,无法预估请求时间,关闭异步保证所有文件修改成功 success: function (response) { file.name = newName; }, error: function (error) { console.error("modify error", error); } }); } function isBlank(str) { if(str == null || str === '') return true; else if(str.trim() === '') return true; else return false; } obj.randomFill = function() { if(!obj.files) { alert("当前路径文件为空!"); return; } var flag = true; for(var i=0; i