Greasy Fork is available in English.

MyAnimeList详情页 自动获取详情页动漫日文/英文名 发售时间复制 2020年8月23日

MyAnimeList详情页 自动获取详情页动漫日文/英文名 发售时间复制

// ==UserScript==
// @name          MyAnimeList详情页 自动获取详情页动漫日文/英文名 发售时间复制 2020年8月23日
// @version      0.0.1
// @description  MyAnimeList详情页 自动获取详情页动漫日文/英文名 发售时间复制
// @author       waecy
// @require      https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
// @include      *://myanimelist.net/anime/*
// @include      *://myanimelist.net/manga/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @run-at       document-start
// @license      MIT License
// @namespace https://greasyfork.org/users/28972
// ==/UserScript==
/*
  2020年8月23日开始写脚本
  2020年8月23日21:46:04写完
  2020年8月25日13:41:45 如果标题只有一个英文名,那么赋值
  2022年09月11日 20:50:05加判断如果是Top跳过
  2023年11月20日 19:30:16更改获取漫画日文主标题名和副标题名
 */
$(function() {
// $(document).ready(function() {
    console.time('测试');
      // 一键复制
    $('.h1-title').append('<button class="toCopy">全部复制</botton>');

    // 创建input,来复制
    $('.h1-title').append('<input type="text" id="searchInput">');

    // 设置为0隐藏
   $('#searchInput').css({
      'opacity' : 0
   })

    // 设置样式
    $('.toCopy').css({
        "margin-left": "10px",
        "color": "#fff",
        "line-height": "1.499",
        "position": "relative",
        "display": "inline-block",
        "font-weight": "400",
        "white-space": "nowrap",
        "text-align": "center",
        "background-image": "none",
        "border": "1px solid transparent",
        "-webkit-box-shadow": "0 2px 0 rgba(0, 0, 0, 0.015)",
        "box-shadow": "0 2px 0 rgba(0, 0, 0, 0.015)",
        "cursor": "pointer",
        "-webkit-transition": "all .3s cubic-bezier(.645, .045, .355, 1)",
        "transition": "all .3s cubic-bezier(.645, .045, .355, 1)",
        "-webkit-user-select": "none",
        "-moz-user-select": "none",
        "-ms-user-select": "none",
        "user-select": "none",
        "-ms-touch-action": "manipulation",
        "touch-action": "manipulation",
        "height": "32px",
        "padding": "0 15px",
        "font-size": "14px",
        "border-radius": "4px",
        // "border-color": "#d9d9d9",
        "border-color": "transparent",
        // "background-color": "#FF5A44",
        "background-color": "#4f74c8",
        "text-shadow": "0 -1px 0 rgba(0, 0, 0, 0.12)",
        "-webkit-box-shadow": "0 2px 0 rgba(0, 0, 0, 0.045)",
        "box-shadow": "0 2px 0 rgba(0, 0, 0, 0.045)"
    });
    // 设置按钮hover事件
    $('.toCopy').hover(function() {
        // hover时效果
        $(this).css({
            'background': '#2e51a2',
            "border": "1px solid transparent"
        });
    }, function() {
        //非 hover时效果
        $(this).css({
            "background-color": "#4f74c8"
        });
    });

    // 创建对象,存放数组
    var listObj = {
        English: [],
        Synonyms: [],
        Japanese: [],
        sum: [],
        data: [],
        EnglishFlag: false,
        SynonymsFlag: false,
        JapaneseFlag: false
    };


    // 循环遍历词条
    $('.spaceit_pad').each(function(index, ele) {debugger

       if (index > 3) {
           console.log(
              listObj
            );
            return false;
        }

        // 获取当前元素名
        var names = $(this).find('span').html();

        // 英文名
        var EnglishName = '';

        // 别名
        var SynonymsName = '';

        // 日文名
        var JapaneseNmae = '';

        // 如果不只一个别名的话
        var newArr = [];

        // 判断是否英文名
        var EnglishFlag = false;

        // 判断是否英文别名
        var SynonymsFlag = false;

        // 判断是否日文别名
        var JapaneseFlag = false;

          // 判断是否有英文名/别名/日文名
          if (names == "English:") {
              listObj['EnglishFlag'] = true;

              // 赋值
              EnglishName = $(this).text().replace(/(^\s*)|(\s*$)/g, "").substr(9);

              // 判断是否不只一个名称
              if (EnglishName.indexOf(',') != -1) {
                 EnglishFlag = true;
                 newArr = EnglishName.split(',');
              } else {
                  listObj['English'][0] = EnglishName;
              }

          } else if (names == "Synonyms:") {
            listObj['SynonymsFlag'] = true;

            // 赋值
            SynonymsName = $(this).text().replace(/(^\s*)|(\s*$)/g, "").substr(10);

            // 判断是否不只一个名称
            if (SynonymsName.indexOf(',') != -1) {
               SynonymsFlag = true;
               newArr = SynonymsName.split(',');
            } else {
                listObj['Synonyms'][0] = SynonymsName;
            }

          } else if (names == "Japanese:") {
            JapaneseFlag = true;
            listObj['JapaneseFlag'] = true;

            // 赋值
            JapaneseNmae = $(this).text().replace(/(^\s*)|(\s*$)/g, "").substr(10);

            // 判断是否不只一个名称
            if (SynonymsName.indexOf(',') != -1) {
               JapaneseFlag = true;
               newArr = JapaneseNmae.split(',');
            } else {
                listObj['Japanese'][0] = JapaneseNmae;
            }
          }

          // 如果别名不只一个
          if (newArr.length > 0)  {
            // 循环遍历
            for (var i = 0; i < newArr.length; i++) {
               // 如果符合条件进入判断
                if (EnglishFlag) {
                   listObj['English'][i] = trim(newArr[i]);
                } else if (SynonymsFlag) {
                   listObj['Synonyms'][i] = trim(newArr[i]);
                } else if (JapaneseFlag) {
                   listObj['Japanese'][i] = trim(newArr[i]);
                }
            }

          } else {
              if (listObj['Japanese'][0] ==  listObj['English'][0]) {
                  listObj['JapaneseFlag'] = false;
              }
          }
    })

    console.timeEnd('测试');




    // 点击【全部复制】按钮
    $('.toCopy').on('click', function() {debugger
        // 标题英文名
        var titleName = '';
        var text = '';

        // 获取漫画标题名
        var comicName =  trim($('span[itemprop="name"]').contents().eq(0).text());

        // 获取头部主标题名
        var topUpTitle =  $('.h1-title strong:eq(0)').text();

        // 获取头部副标题
        var topSubTitle =  $('.h1-title p:eq(0)').text() || $('span[itemprop="name"]')[0].lastChild.innerText;

        // 获取头部主标题名文本
        var topUpTitleTxt = trim(topUpTitle);

         // 获取头部副标题文本
        var topSubTitleTxt = topSubTitle != null ? trim(topSubTitle) : "";

          // 如果只有一个标题名,更改主标题名
          if (topUpTitleTxt.length >= 1 && topSubTitleTxt.length == 0) {
            // 赋值副标题英文名
            titleName = topUpTitleTxt;
          } else {

            // 如果标题名是空,说明是漫画标题名
            if (!titleName && comicName != "Top") {
                // 赋值主标题英文名
                titleName = comicName;
            } else {
                // 赋值副标题英文名
                titleName = topSubTitleTxt;
            }

          }

        // 判断如果标题名称有两个进入判断
     /*   if ($('.h1-title span:eq(0)').length == 1) {
          $('.h1-title span:eq(0)').contents().each(function(){
              if(this.nodeType === 3){
                  titleName += this.wholeText;
              }
          });
        }*/

         // 如果标题只有一个英文名,那么赋值
        /*if ($('.h1-title').find('h1').length == 1 && $('.h1-title strong:eq(0)').length == 0){
            if ($('.h1-title').find('h1').text() != titleName) {
              titleName = trim($('.h1-title').find('h1').text());
            }
        }*/


        // 英文名
        var EnglishName = '';

        // 别名
        var SynonymsName = '';

        // 日文名
        var JapaneseNmae = '';

        // 判断是否和标题英文名相同
        var EnglishFlag = false;

        // 判断是否和标题英文名相同
        var SynonymsFlag = false;

        // 判断是否和标题英文名相同
        var JapaneseFlag = false;

        // 最终返回结果
        var ret = '';

        // 判断是否有相关名
        if (listObj['EnglishFlag']  && listObj['SynonymsFlag'] && listObj['JapaneseFlag']) {
          // 英文名/别名/日文名全有

          if (listObj['English'].length == 1
            && listObj['Synonyms'] == 1
            && listObj['Japanese'] == 1 ) {
            // 判断是否和标题名一致
             if (listObj['Synonyms'][0] == titleName ||  listObj['English'][0] == titleName) {
                ret = '[' + listObj['Japanese'][0] + '][' + titleName + ']';
             } else {
              ret =  '[' + listObj['Japanese'][0] + ']' +
                     '[' + listObj['Synonyms'][0] + ']' +
                     '[' + listObj['English'][0] + '][' + titleName + ']';
             }
          } else {
            for (var i = 0; i < listObj['Japanese'].length; i++) {
                ret += '[' + listObj['Japanese'][i] + ']';
            }

            for (var i = 0; i < listObj['Synonyms'].length; i++) {
                ret += '[' + listObj['Synonyms'][i] + ']';
            }

            for (var i = 0; i < listObj['English'].length; i++) {
                ret += '[' + listObj['English'][i] + ']';
            }

          }

        } else if (!listObj['EnglishFlag']  && listObj['SynonymsFlag'] && listObj['JapaneseFlag']) {
          // 只有别名/日文名
           if (listObj['Japanese'].length == 1 && listObj['Synonyms'].length == 1) {
              // 判断别名和日文名是否相同
              if (listObj['Japanese'][0] == listObj['Synonyms'][0]) {
                   ret =  '[' + listObj['Japanese'][0] + ']';
              } else {
                  // 判断别名是否和标题英文名相同
                  if (listObj['Synonyms'][0] != titleName) {
                    ret =  '[' + listObj['Japanese'][0] + ']' + '[' + listObj['Synonyms'][0] + '][' + titleName + ']';
                  } else {
                    ret =  '[' + listObj['Japanese'][0] + ']' + '[' + listObj['Synonyms'][0] + ']';
                  }
              }
            } else {
              for (var i = 0; i < listObj['Japanese'].length; i++) {
                  ret += '[' + listObj['Japanese'][i] + ']';
              }

              for (var i = 0; i < listObj['Synonyms'].length; i++) {
                // 如果别名不等于标题名
                if (listObj['Synonyms'][i] != titleName) {
                  ret += '[' + listObj['Synonyms'][i] + ']';
                } else {
                  SynonymsFlag = true;
                }
              }

              // 如果别名不等于标题名
              if (!SynonymsFlag) {
                ret += '[' + titleName + ']';
              }


            }
        } else if (listObj['EnglishFlag']  && !listObj['SynonymsFlag'] && listObj['JapaneseFlag']) {
          // 只有英文名/日文名
           if (listObj['English'].length == 1 && listObj['Japanese'].length == 1) {
                // 判断英文名和日文名是否相同
                if (listObj['English'][0] ==  listObj['Japanese'][0]) {
                      ret =  '[' + listObj['Japanese'][0] + ']';
                } else {
                  // 判断英文名是否和标题英文名相同
                  if (listObj['English'][0] != titleName) {
                    ret =  '[' + listObj['Japanese'][0] + ']' + '[' + listObj['English'][0] + '][' + titleName + ']';
                  } else {
                    ret =  '[' + listObj['Japanese'][0] + ']' + '[' + listObj['English'][0] + ']';
                  }

                }
            } else {
              for (var i = 0; i < listObj['Japanese'].length; i++) {
                ret += '[' + listObj['Japanese'][i] + ']';
              }

              for (var i = 0; i < listObj['English'].length; i++) {
                ret += '[' + listObj['English'][i] + ']';
              }
            }
        } else if (listObj['EnglishFlag']  && listObj['SynonymsFlag'] && !listObj['JapaneseFlag']) {
           // 只有英文名/别名
            if (listObj['English'].length == 1 && listObj['Synonyms'].length == 1) {
                  // 判断英文名和别名是否相同
                  if (listObj['English'][0] == listObj['Synonyms'][0]) {
                    ret = '[' + listObj['English'][0] + ']';
                  } else {
                    // 判断英文名是否和标题英文名相同
                  if (listObj['English'][0] != titleName) {
                    ret =  '[' + listObj['Synonyms'][0] + ']' + '[' + listObj['English'][0] + '][' + titleName + ']';
                  } else {
                    ret =  '[' + listObj['Synonyms'][0] + ']' + '[' + listObj['English'][0] + ']';
                  }
                  }
            } else {

              for (var i = 0; i < listObj['Synonyms'].length; i++) {
                ret += '[' + listObj['Synonyms'][i] + ']';
              }

              for (var i = 0; i < listObj['English'].length; i++) {
                ret += '[' + listObj['English'][i] + ']';
              }

            }
        } else if (listObj['EnglishFlag']  && !listObj['SynonymsFlag'] && !listObj['JapaneseFlag']) {
          // 只有英文名
           if (listObj['English'].length == 1) {
               // 判断英文名是否和标题名一致
                if (listObj['English'][0] != titleName) {
                  ret =  '[' + listObj['English'][0] + '][' + titleName + ']';
                } else {
                  ret =  '[' + listObj['English'][0] + ']';
                }
            } else {
              for (var i = 0; i < listObj['English'].length; i++) {
                ret += '[' + listObj['English'][i] + ']';
              }
            }
          ret =  listObj['English'];
        } else if (!listObj['EnglishFlag']  && listObj['SynonymsFlag'] && !listObj['JapaneseFlag']) {
          // 只有别名
           if (listObj['Synonyms'].length == 1) {
                // 判断别名是否和标题名一致
                if (listObj['Synonyms'][0] != titleName) {
                  ret =  '[' + listObj['Synonyms'][0] + '][' + titleName + ']';
                } else {
                  ret =  '[' + listObj['Synonyms'][0] + ']';
                }
            } else {
              for (var i = 0; i < listObj['Synonyms'].length; i++) {
                ret += '[' + listObj['Synonyms'][i] + ']';
              }
            }
           ret =  listObj['Synonyms'];
        } else if (!listObj['EnglishFlag']  && !listObj['SynonymsFlag'] && listObj['JapaneseFlag']) {
            // 只有日文名
            if (listObj['Japanese'].length == 1) {
                // 判断日文名是否和标题名一致
                if (listObj['Japanese'][0] != titleName) {
                  ret =  '[' + listObj['Japanese'][0] + '][' + titleName + ']';
                } else {
                  ret =  '[' + listObj['Japanese'][0] + ']';
                }
              ret =  '[' + listObj['Japanese'][0] + '][' + titleName + ']';
            } else {
              for (var i = 0; i < listObj['Japanese'].length; i++) {
                ret += '[' + listObj['Japanese'][i] + ']';
              }
            }

        }


        // 最后[判断头标题
        if (topUpTitleTxt.length >= 1 && topSubTitleTxt.length >= 1) {
          ret += '[' + topUpTitleTxt + ']';
        }


        // 更改input内容
        $('#searchInput').val(ret);
        // 全选输入框内容
        $('#searchInput').select();
        // 执行浏览器自带的复制
        document.execCommand("Copy");
        // 清空输入框内容
        $('#searchInput').val('');

    })


/* ================== 监听键盘按下快捷键,来跳转或触发点击事件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 =================== */


        function trim(str) { //删除左右两端的空格

            return str.replace(/(^\s*)|(\s*$)/g, "");
        }
    /*    function ltrim(str) { //删除左边的空格

            return str.replace(/(^\s*)/g, "");
        }
        function rtrim(str) { //删除右边的空格

            return str.replace(/(\s*$)/g, "");
        }*/
      // 将相同的值相邻,然后遍历去除重复值
      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;
      }


});