Greasy Fork is available in English.

AniDB自动获取详情页动漫英文/日文名 跳转动漫花园/Nyaa等BT站和字幕站

AniDB自动获取详情页动漫英文/日文名 跳转动漫花园/Nyaa等BT站和字幕站点

// ==UserScript==
// @name         AniDB自动获取详情页动漫英文/日文名 跳转动漫花园/Nyaa等BT站和字幕站
// @version      0.0.3
// @description  AniDB自动获取详情页动漫英文/日文名 跳转动漫花园/Nyaa等BT站和字幕站点
// @author       waecy
// @require      https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
// @include      *://anidb.net/anime/*
// @include      *://anidb.net/perl-bin/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @run-at       document-start
// @license      MIT License
// @namespace https://greasyfork.org/users/28972
// ==/UserScript==
/*
  2020年6月15日20:56:07编写
  2021年7月15日21:33:33 更改html()为text(),html()会获取某些垃圾文本,比如&成&
  2023年11月23日 13:18:55判断如果有18提示,说明是里番词条,跳转Nyaa里站,没有的话就跳转表站,搭配以下脚本使用
    AniDB搜索页/详情页显示18+词条并标红 (AniDB.net status icons next to titles)
    https://greasyfork.org/zh-CN/scripts/27285
 */
$(function() {
    // $(function () {
    // 判断当前是否为详情页
    if (location.pathname != "/anime/") {
        console.time('测试');
        // 存放数组
        var listAry = [];
        // 循环遍历词条
        $('.field').each(function(index, ele) {
                // 循环制定次数,提高加载速度
                if (index > 7) {
                    return false;
                }
                // 循环遍历标题
                var selfText = $(this).text();
                // 添加名称
                var addName = '';
                // 主要标题英文
                if (selfText == "Main Title") {
                    addName = $(this).parent().find('span').text();
                    listAry.push(addName)
                } else if (selfText == 'Official Title' || selfText == 'Title Card') {
                    addName = $(this).parent().find('label').text();
                    listAry.push(addName)
                } else if (selfText == 'Type') {
                    return false;
                    // 获取别名名称
                    // var OfficialTitle = $(this).eq(index).parent().find('td').html();
                    // 截取前三位字符串
                    // var interceptStr = OfficialTitle.substr(0, 3);
                    // 判断是否是OVA,Movie,Web
                    // if (interceptStr == 'TV ') {}
                }
                console.log(listAry);
            })
            // $('#tabbed_pane').append('<ul><li>22<li>></ul>')
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toCopy">全部复制</botton>');
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toCopy2">复制主英文名</botton>');
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toCopy3">复制副英文名</botton>');
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toCopy4">复制日文名</botton>');
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toBtUrl">跳转动漫花园/Nyaa</botton>');
        $('.g_section.info div.edit_actions').eq(0).append('<button class="toSubUrl">跳转U2字幕/VCB-S论坛</botton>');

        // 点击【全部复制】按钮
        $('.toCopy').on('click', function() {debugger
                // 最终复制的名称
                var ret = '';

                // 创建新数组
                var newArr = [];

                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    // 去重
                    newArr = unique4(listAry);

                    // 判断去重后是否长度等于2
                    if (newArr.length == 2) {
                      ret = '[' + newArr[1] + ']' + '[' + newArr[0] + ']';
                    } else if (newArr.length == 1) {
                       ret = '[' + newArr[0] + ']';
                    } else {
                      ret = '[' + newArr[2] + ']' + '[' + newArr[1] + ']' + '[' + newArr[0] + ']';
                    }

                } else {
                    // 去重
                    newArr = unique4(listAry);


                    for (var i = newArr.length - 1; i >= 0; i--) {
                        ret += '[' + newArr[i] + ']';
                    }

                }

                // 复制文件名
                copyFn('#layout-searchbox', ret);
          })

            // 点击【主英文名】按钮
        $('.toCopy2').on('click', function() {
                // 最终复制的名称
                var ret = '';
                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    ret = listAry[0];
                } else {
                    ret = listAry[0];
                }
                // 复制文件名
                copyFn('#layout-searchbox', ret);
            })
            // 点击【副英文名】按钮
        $('.toCopy3').on('click', function() {
                // 最终复制的名称
                var ret = '';
                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    ret = listAry[1];
                } else {
                    ret = listAry[1];
                }
                // 复制文件名
                copyFn('#layout-searchbox', ret);
            })
            // 点击【日文名】按钮
        $('.toCopy4').on('click', function() {
                // 最终复制的名称
                var ret = '';
                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    ret = listAry[2];
                }
                // 复制文件名
                copyFn('#layout-searchbox', ret);
            })
            // 点击跳转动漫花园/Nyaa
        $('.toBtUrl').on('click', function() {
                // 最终复制的名称
                var ret = '';
                var ret2 = '';
                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    ret = listAry[0];
                } else {
                    ret = listAry[0];
                }
                // 拼接字符串
                ret = 'https://share.dmhy.org/topics/list?keyword=' + ret;
                window.open(ret, '_blank');

                // 如果有18提示,说明是里番词条
                if ($('h1.anime div > span').text().indexOf('18') != -1) {
                    // 拼接字符串
                    ret2 = 'https://sukebei.nyaa.si/?f=0&c=1_1&q=' + listAry[0];
                } else {
                    // 拼接字符串
                    ret2 = 'https://nyaa.si/?f=0&c=1_4&q=' + listAry[0];
                }
                window.open(ret2, '_blank');
            })
            // 点击跳转跳转U2字幕/VCB-S论坛
        $('.toSubUrl').on('click', function() {
                // 最终复制的名称
                var ret = '';
                var ret2 = '';
                // 判断长度,是否有两个英文别名是TV版,小于则是OVA,Movie,Web
                if (listAry.length == 3) {
                    ret = listAry[0];
                } else {
                    ret = listAry[0];
                }
                // 拼接字符串
                ret = 'https://u2.dmhy.org/subtitles.php?search=' + ret;
                window.open(ret, '_blank');
                // 拼接字符串
                ret2 = 'https://bbs.acgrip.com/search.php?mod=forum&adv=yes&srchtxt=' + listAry[0];
                window.open(ret2, '_blank');
            })

        // 封装复制函数
        function copyFn(ele, copyText) {
            // 更改input内容
            $(ele).val(copyText)
                // 全选输入框内容
            $(ele).select();
            // 执行浏览器自带的复制
            document.execCommand("Copy");
            // 清空输入框内容
            $(ele).val('')
        }

         // 将相同的值相邻,然后遍历去除重复值
        function unique4(array) {
            // array.sort();
            var re = [array[0]];
            for (var i = 1; i < array.length; i++) {
                if (array[i] !== re[re.length - 1]) {
                    re.push(array[i]);
                }
            }
            return re;
        }

        /*unction unique4(arr) {
            var array = arr;
            var tmpObj = {};
            var result = [];
            array.forEach(function(a) {
                var key = (typeof a) + a;
                if (!tmpObj[key]) {
                    tmpObj[key] = true;
                    result.push(a);
                }
            });
            return result;
        }*/
        console.timeEnd('测试');
    }


/* ================== 监听键盘按下快捷键,来跳转或触发点击事件Start =================== */
 // 获取键盘码
    function getKeyCode(str) {
        // 获取当前字符串
        var getKey = str.toLocaleLowerCase();
        // 返回结果
        var ret = '';
        // 键码表
        var keyCode = {
                key: {
                    /* 字母和数字键的键码值 */
                    'a': 65,
                    'b': 66,
                    'c': 67,
                    'd': 68,
                    'e': 69,
                    'f': 70,
                    'g': 71,
                    'h': 72,
                    'i': 73,
                    'j': 74,
                    'k': 75,
                    'l': 76,
                    'm': 77,
                    'n': 78,
                    'o': 79,
                    'p': 80,
                    'q': 81,
                    'r': 82,
                    's': 83,
                    't': 84,
                    'u': 85,
                    'v': 86,
                    'w': 87,
                    'x': 88,
                    'y': 89,
                    'z': 90,
                    '0': 48,
                    '1': 49,
                    '2': 50,
                    '3': 51,
                    '4': 52,
                    '5': 53,
                    '6': 54,
                    '7': 55,
                    '8': 56,
                    '9': 57,
                    /* 数字键盘上的键的键码值 后面加_和主键盘数字键 区分开 */
                    '0_': 96,
                    '1_': 97,
                    '2_': 98,
                    '3_': 99,
                    '4_': 100,
                    '5_': 101,
                    '6_': 102,
                    '7_': 103,
                    '8_': 104,
                    '9_': 105,
                    '*': 106,
                    '+_': 107,
                    'enter1': 108,
                    '-': 109,
                    '.': 110,
                    '/': 111,
                    /* 功能键键码值 */
                    'f1': 112,
                    'f2': 113,
                    'f3': 114,
                    'f4': 115,
                    'f5': 116,
                    'f6': 117,
                    'f7': 118,
                    'f8': 119,
                    'f9': 120,
                    'f10': 121,
                    'f11': 122,
                    'f12': 123,
                    /* 控制键键码值 */
                    'backspace': 8,
                    'tab': 9,
                    'clear': 12,
                    'enter': 13,
                    'shift': 16,
                    'ctrl': 17,
                    'control': 17,
                    'alt': 19,
                    'cape lock': 20,
                    'esc': 27,
                    'spacebar': 32,
                    'page up': 33,
                    'page down': 34,
                    'end': 35,
                    'home': 36,
                    'left arrow': 37,
                    'up arrow': 38,
                    'right arrow': 39,
                    'down arrow': 40,
                    'insert': 45,
                    'delete': 46,
                    'num lock': 144,
                    ';': 186,
                    ':': 186,
                    '=': 187,
                    '+': 187,
                    '-': 189,
                    '_': 189,
                    '.': 190,
                    '>': 190,
                    '/': 191,
                    '?': 191,
                    '`': 192,
                    '~': 192,
                    '[': 219,
                    '{': 219,
                    '/': 220,
                    '|': 220,
                    ']': 221,
                    '}': 221
                }
            }
            // 循环遍历
        for (var i in keyCode['key']) {
            // 判断是否有当前key值
            if (i == getKey) {
                // 返回结果
                ret = keyCode['key'][i];
            }
        }
        return ret;
    }
    // 监听鼠标按下事件
    $(document).keydown(function(e){
            /*  console.log(
                e
              );*/
            // 获取键盘控制键
            var keyCode = e.keyCode || e.which || e.charCode;
            // 获取Ctrl键,返回true和false
            var ctrlKey = e.ctrlKey || e.metaKey;
            // 获取Shift键,返回true和false
            var shiftKey = e.shiftKey || e.metaKey;
            // 获取Alt键,返回true和false
            var altKey = e.altKey || e.metaKey;
            /* ========= 判断按下Ctrl + Shift  + Alt + 英文字母/数字快捷键 ============*/
            if (ctrlKey && shiftKey && altKey && keyCode == getKeyCode('X')) {
                toUrl(['动漫花园', 'Nyaa表站'], 1);
                console.log('Ctrl + Shift + Alt + X');
            } else if (ctrlKey && shiftKey && keyCode == getKeyCode('X')) {
                /* ========= 判断按下Ctrl + Shift  + 英文字母/数字快捷键 ============*/
                toUrl('动漫花园', 0);
                console.log('Ctrl + Shift + X');
            } else if (ctrlKey && altKey && keyCode == getKeyCode('X')) {
                /* ========= 判断按下Ctrl + Alt  + 英文字母/数字快捷键 ============*/
                console.log('Ctrl + Alt + X');
            } else if (shiftKey && altKey && keyCode == getKeyCode('X')) {
                /* ========= 判断按下Shift + Alt  + 英文字母/数字快捷键 ============*/
                console.log('Shift + Alt + X');
            } else if (ctrlKey && keyCode == getKeyCode('x')) {
                /* ========= 判断按下Ctrl + 英文字母/数字快捷键 ============*/
                console.log('Ctrl +  x');
            } else if (shiftKey && keyCode == getKeyCode('C')) {
                /* ========= 判断按下Shift + 英文字母/数字快捷键 ============*/
                // 点击一键复制按钮
                $('.toCopy').click();

                console.log('Shift +  C');
            } else if (altKey && keyCode == getKeyCode('X')) {
                /* ========= 判断按下Alt + 英文字母/数字快捷键 ============*/
                console.log('Alt +  X');
            } /*else if (keyCode) {
                // 如果是单个键的话
                // 判断选择哪个快捷键,动态获取哪个页面
                switch (keyCode) {
                    case getKeyCode('F1'):
                        console.log('F1');
                        break;
                    case getKeyCode('F2'):
                        console.log('F2');
                        break;
                }
            }*/
            // 阻止默认事件
            // e.preventDefault();
            // return false;
            return;
        })
        //跳转url
        // 第一个参数可用字符串,也可以用数组,如果是字符串,单独跳转,如果是数组格式,同时跳转
        // 第二个参数是用中文名跳转,还是用日文名跳转,0是中文,1是日文
    function toUrl(toUrlNames, nameType) {
        // 跳转url
        var toUrls = {
                '动漫花园': 'https://share.dmhy.org/topics/list?keyword=',
                'Nyaa表站': 'https://nyaa.si/?f=0&c=1_4&q=',
                'Nyaa里站': 'https://sukebei.nyaa.si/?f=0&c=1_1&q='
            }
            // 获取url
        var getToUrl = toUrlNames;
        // 判断拼接名称类型
        var nameType = nameType;
        // 获取标题日文名
        var titleName = $('.nameSingle a').html();

            // 0的话用中文名跳转
        /*if (nameType == 0) {
            // 赋值
            nameType = listObj['zhName'];
        } else if (nameType == 1) {
            // 赋值
            nameType = titleName;
        }*/
        // 判断是否是字符串格式,否则就是数组格式
        if (toString.call(toUrlNames) == "[object String]") {
            // 跳转页面
            window.open(toUrls[getToUrl] + nameType, "_blank");
        } else if (toString.call(toUrlNames) == "[object Array]") {
            // 创建新数组
            var ret = [];
            // 循环变量
            for (var i = 0; i < getToUrl.length; i++) {
                window.open(toUrls[getToUrl[i]] + nameType, "_blank");
            }
        }
    }


    /* ================== 监听键盘按下快捷键,来跳转或触发点击事件End =================== */

});