- // ==UserScript==
- // @name 115Rename2024
- // @namespace http://tampermonkey.net/
- // @version 0.12
- // @description 115改名称(根据现有的文件名<番号>查询并修改文件名)
- // @author db117 wusuowei
- // @include https://115.com/*
- // @domain javbus.com
- // @domain avmoo.host
- // @domain avsox.host
- // @grant GM_notification
- // @grant GM_xmlhttpRequest
- // @license MIT
- // ==/UserScript==
-
- (function () {
- // 按钮
- let rename_list = `
- <li id="rename_list">
- <a id="rename_all_javbus" class="mark" href="javascript:;">改名javbus</a>
- <a id="rename_all_javbus_date" class="mark" href="javascript:;">改名javbus_时间</a>
- <a id="rename_all_avmoo" class="mark" href="javascript:;">改名avmoo</a>
- <a id="rename_all_avmoo_date" class="mark" href="javascript:;">改名avmoo_时间</a>
- </li>
- `;
- /**
- * 添加按钮的定时任务
- */
- let interval = setInterval(buttonInterval, 1000);
-
- // javbus
- let javbusBase = "https://www.javbus.com/";
- // 有码
- let javbusSearch = javbusBase + "search/";
- // 无码
- let javbusUncensoredSearch = javbusBase + "uncensored/search/";
-
- // avmoo
- // 有码
- let avmooSearch = "https://avmoo.host/cn/search/";
- // 无码
- let avmooUncensoredSearch = "https://avsox.host/cn/search/";
- 'use strict';
-
- /**
- * 添加按钮定时任务(检测到可以添加时添加按钮)
- */
- function buttonInterval() {
- let open_dir = $("div#js_float_content li[val='open_dir']");
- if (open_dir.length !== 0 && $("li#rename_list").length === 0) {
- open_dir.before(rename_list);
- $("a#rename_all_javbus").click(
- function () {
- rename(rename_javbus, false);
- });
- $("a#rename_all_javbus_date").click(
- function () {
- rename(rename_javbus, true);
- });
- $("a#rename_all_avmoo").click(
- function () {
- rename(rename_avmoo, false);
- });
- $("a#rename_all_avmoo_date").click(
- function () {
- rename(rename_avmoo, true);
- });
- console.log("添加按钮");
- // 结束定时任务
- clearInterval(interval);
- }
- }
-
- /**
- * 执行改名方法
- * @param call 回调函数
- * @param addDate 是否添加时间
- */
- function rename(call, addDate) {
- // 获取所有已选择的文件
- let list = $("iframe[rel='wangpan']")
- .contents()
- .find("li.selected")
- .each(function (index, v) {
- let $item = $(v);
- // 原文件名称
- let file_name = $item.attr("title");
- // 文件类型
- let file_type = $item.attr("file_type");
-
- // 文件id
- let fid;
- // 后缀名
- let suffix;
- if (file_type === "0") {
- // 文件夹
- fid = $item.attr("cate_id");
- } else {
- // 文件
- fid = $item.attr("file_id");
- // 处理后缀
- let lastIndexOf = file_name.lastIndexOf('.');
- if (lastIndexOf !== -1) {
- suffix = file_name.substr(lastIndexOf, file_name.length);
- }
- }
-
- if (fid && file_name) {
- let fh = getVideoCode(file_name);
- if (fh) {
- // 校验是否是中文字幕
- let chineseCaptions = checkChineseCaptions(fh, file_name);
- let Uncensored = checkUncensored (fh, file_name);
- // 执行查询
- call(fid, fh, suffix, chineseCaptions,Uncensored,addDate);
- }
- }
- });
-
- }
-
- /**
- * 通过javbus进行查询
- */
- function rename_javbus(fid, fh, suffix, chineseCaptions, Uncensored,addDate) {
- requestJavbus(fid, fh, suffix, chineseCaptions,Uncensored, addDate, javbusSearch);
- }
-
- /**
- * 请求javbus,并请求115进行改名
- * @param fid 文件id
- * @param fh 番号
- * @param suffix 后缀
- * @param chineseCaptions 是否有中文字幕
- * @param url 请求地址
- * @param addDate 是否添加时间
- */
- function requestJavbus(fid, fh, suffix, chineseCaptions,Uncensored, addDate, url) {
- GM_xmlhttpRequest({
- method: "GET",
- url: url + fh,
- onload: xhr => {
- // 匹配标题
- let response = $(xhr.responseText);
-
- // 标题
- let title = response
- .find("div.photo-frame img")
- .attr("title");
-
- // 时间
- let date = response
- .find("div.photo-info date:last")
- .html();
-
- if (title) {
- // 构建新名称
- let newName = buildNewName(fh, suffix, chineseCaptions,Uncensored,title);
-
- // 添加时间
- if (addDate && date) {
- newName = date + "_" + newName;
- }
-
- if (newName) {
- // 修改名称
- send_115(fid, newName, fh);
- }
- } else if (url !== javbusUncensoredSearch) {
- // 进行无码重查询
- requestJavbus(fid, fh, suffix, chineseCaptions, addDate, javbusUncensoredSearch);
- }
- }
- })
- }
-
- /**
- * 通过avmoo进行查询
- */
- function rename_avmoo(fid, fh, suffix, chineseCaptions,Uncensored, addDate) {
- requestAvmoo(fid, fh, suffix, chineseCaptions,Uncensored, addDate, avmooSearch);
- }
-
- /**
- * 请求avmoo,并请求115进行改名
- * @param fid 文件id
- * @param fh 番号
- * @param suffix 后缀
- * @param chineseCaptions 是否有中文字幕
- * @param addDate 是否带时间
- * @param url 请求地址
- */
- function requestAvmoo(fid, fh, suffix, chineseCaptions,Uncensored, addDate, url) {
- GM_xmlhttpRequest({
- method: "GET",
- url: url + fh,
- onload: xhr => {
- // 匹配标题
- let response = $(xhr.responseText);
- if (!(response.find("div.alert").length)) {
- let title = response
- .find("div.photo-frame img")
- .attr("title");
-
- // 时间
- let date = response
- .find("div.photo-info date:last")
- .html();
-
- if (title) {
- // 构建新名称
- let newName = buildNewName(fh, suffix, chineseCaptions,Uncensored, title);
-
- // 添加时间
- if (addDate && date) {
- newName = date + "_" + newName;
- }
-
- if (newName) {
- // 修改名称
- send_115(fid, newName, fh);
- }
- }
- } else if (url !== avmooUncensoredSearch) {
- // 进行无码查询
- requestAvmoo(fid, fh, suffix, chineseCaptions, addDate, avmooUncensoredSearch);
- }
- }
- })
- }
-
- /**
- * 构建新名称
- * @param fh 番号
- * @param suffix 后缀
- * @param chineseCaptions 是否有中文字幕
- * @param title 番号标题
- * @returns {string} 新名称
- */
- function buildNewName(fh, suffix, chineseCaptions,Uncensored, title) {
- if (title) {
- let newName = String(fh);
- // 有中文字幕
- if (chineseCaptions) {
- newName = newName + "【中文字幕】";
- }
- // 有无码
- if (Uncensored) {
- newName = newName + "【无码】";
- }
- // 拼接标题
- newName = newName + " " + title;
- if (suffix) {
- // 文件保存后缀名
- newName = newName + suffix;
- }
- return newName;
- }
- }
-
- /**
- * 请求115接口
- * @param id 文件id
- * @param name 要修改的名称
- * @param fh 番号
- */
- function send_115(id, name, fh) {
-
- let file_name = stringStandard(name);
- $.post("https://webapi.115.com/files/edit", {
- fid: id,
- file_name: file_name
- },
- function (data, status) {
- let result = JSON.parse(data);
- if (!result.state) {
- GM_notification(getDetails(fh, "修改失败"));
- console.log("请求115接口异常: " + unescape(result.error
- .replace(/\\(u[0-9a-fA-F]{4})/gm, '%$1')));
- } else {
- GM_notification(getDetails(fh, "修改成功"));
- console.log("修改文件名称,fh:" + fh, "name:" + file_name);
- }
- }
- );
- }
-
- /**
- * 通知参数
- * @param text 内容
- * @param title 标题
- * @returns {{text: *, title: *, timeout: number}}
- */
- function getDetails(text, title) {
- return {
- text: text,
- title: title,
- timeout: 1000
- };
- }
-
- /**
- * 115名称不接受(\/:*?\"<>|)
- * @param name
- */
- function stringStandard(name) {
- return name.replace(/\\/g, "")
- .replace(/\//g, " ")
- .replace(/:/g, " ")
- .replace(/\?/g, " ")
- .replace(/"/g, " ")
- .replace(/</g, " ")
- .replace(/>/g, " ")
- .replace(/\|/g, "")
- .replace(/\*/g, " ");
- }
-
- /**
- * 校验是否为中文字幕
- * @param fh 番号
- * @param title 标题
- */
- function checkChineseCaptions(fh, title) {
- if (title.indexOf("中文") !== -1) {
- return true;
- }
- let regExp = new RegExp(fh + "[_-](UC|C)");
- let match = title.toUpperCase().match(regExp);
- if (match) {
- return true;
- }
- }
- /**
- * 校验是否为无码
- * @param fh 番号
- * @param title 标题
- */
- function checkUncensored(fh, title) {
- if (title.indexOf("无码") !== -1) {
- return true;
- }
- let regExp = new RegExp(fh + "[_-](UC|U)");
- let match = title.toUpperCase().match(regExp);
- if (match) {
- return true; // 如果标题中包含 "-U" 或 "_U",则返回 true,表示为无码
- }
- return false; // 默认情况下,返回 false,表示不是无码
- }
- /**
- * 获取番号
- * @param title 源标题
- * @returns {string} 提取的番号
- */
- function getVideoCode(title) {
- title = title.toUpperCase().replace("SIS001", "")
- .replace("1080P", "")
- .replace("720P", "");
-
- let t = title.match(/T28[\-_]\d{3,4}/);
- // 一本道
- if (!t) {
- t = title.match(/1PONDO[\-_]\d{6}[\-_]\d{2,4}/);
- if (t) {
- t = t.toString().replace("1PONDO_", "")
- .replace("1PONDO-", "");
- }
- }
- if (!t) {
- t = title.match(/HEYZO[\-_]?\d{4}/);
- }
- if (!t) {
- // 加勒比
- t = title.match(/CARIB[\-_]\d{6}[\-_]\d{3}/);
- if (t) {
- t = t.toString().replace("CARIB-", "")
- .replace("CARIB_", "");
- }
- }
- if (!t) {
- // 东京热
- t = title.match(/N[-_]\d{4}/);
- }
- if (!t) {
- // Jukujo-Club | 熟女俱乐部
- t = title.match(/JUKUJO[-_]\d{4}/);
- }
- // 通用
- if (!t) {
- t = title.match(/[A-Z]{2,5}[-_]\d{3,5}/);
- }
- if (!t) {
- t = title.match(/\d{6}[\-_]\d{2,4}/);
- }
- if (!t) {
- t = title.match(/[A-Z]+\d{3,5}/);
- }
- if (!t) {
- t = title.match(/[A-Za-z]+[-_]?\d+/);
- }
- if (!t) {
- t = title.match(/\d+[-_]?\d+/);
- }
- if (!t) {
- t = title;
- }
- if (t) {
- t = t.toString().replace("_", "-");
- console.log("找到番号:" + t);
- return t;
- }
- }
- })();