// ==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 =================== */
});