// ==UserScript==
// @name javdb添加跳转在线观看网站
// @version 0.00020.1
// @description 在影片详情页显示跳转到在线观看网站的按钮,并检查对应是否存在资源,如果对应网站上存在该资源则为绿色,否则显示红色。
// @author misssion522
// @match https://javdb.com/*
// @include /^https:\/\/(\w*\.)?javdb(\d)*\.com.*$/
// @icon https://www.google.com/s2/favicons?domain=javdb.com
// @license MIT
// @connect jable.tv
// @connect javhhh.com
// @connect netflav.com
// @connect javbus.com
// @connect avgle.com
// @connect translate.google.cn
// @connect *
// @grant GM_xmlhttpRequest
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @require https://cdn.bootcss.com/qs/6.7.0/qs.min.js
// @namespace http://tampermonkey.net/
// ==/UserScript==
'use strict';
// document.querySelectorAll('img').forEach((item) => {
// item.style.display = 'none';
// });
// 网站列表
let site = [
{ id: '0', name: 'Jable', hostname: 'jable.tv', url: 'https://jable.tv/videos/(code)/', search: 'false', domQuery: /reg/ },
{
id: '1',
name: 'JAVHHH',
hostname: 'javhhh.com',
url: 'https://javhhh.com/v/?wd=(code)',
search: 'search',
domQuery: { linkQuery: '.typelist>.i-container>a[href]', titleQuery: '.typelist>.i-container>a[href]' },
},
{
id: '2',
name: 'NETFLAV',
hostname: 'netflav.com',
url: 'https://netflav.com/search?type=title&keyword=(code)',
search: 'search',
domQuery: { linkQuery: '.grid_cell>a', titleQuery: '.grid_cell>a>.grid_title' },
},
{
id: '3',
name: 'Avgle',
hostname: 'avgle.com',
url: 'https://avgle.com/search/videos?search_query=(code)&search_type=videos',
search: 'search',
domQuery: { linkQuery: '.container>.row .row .well>a[href]', titleQuery: '.container>.row .row .well .video-title' },
},
{ id: '4', name: 'JavBus', hostname: 'javbus.com', url: 'https://javbus.com/(code)', search: 'false', domQuery: /reg/ },
// { id: '99', hostname: 'test.com', url: 'https://adgfajffkasj.com/', search: 'false', domQuery: /reg/ },
];
let curLocation = location.pathname;
if (document.querySelector('.tabs.is-boxed')) {
console.log('mainPage');
// mainPage();
} else if (curLocation.includes('/v/') && document.querySelector('h2')) {
console.log('vPage');
vPage();
}
// function mainPage() {
// let items = document.querySelectorAll('.grid-item.column>a');
// items.forEach((item) => {
// getScore(item.href);
// });
// }
function vPage() {
translateTitle(document.querySelector('h2.title.is-4').innerHTML);
site.forEach((item) => {
getWebsite(item);
});
}
//获取分数, 不写了
// function getScore(link) {
// GM_xmlhttpRequest({
// method: 'GET',
// url: link,
// headers: {
// 'Content-type': 'application/x-www-form-urlencoded',
// },
// onload: function (result) {
// console.dir(result.responseText);
// },
// });
// }
//传入网站,处理网站
function getWebsite(site) {
let videoCode = document.querySelector('[data-clipboard-text]').attributes[2].value;
let xhrResult = '';
let siteUrl = site.url.replace('(code)', videoCode);
// let siteReg = site.reg;
// let siteReg = new RegExp(site.reg.replace('(code)', videoCode), 'gim');
const buttonG = document.createElement('a');
document.querySelectorAll('.panel-block div.buttons')[1].appendChild(buttonG);
buttonG.classList.add('button', 'is-info', 'is-outlined', 'button-g');
buttonG.innerHTML = site.name;
buttonG.setAttribute('target', '_blank');
buttonG.href = siteUrl;
function setbuttonGColor(color) {
buttonG.style.color = color;
buttonG.style.borderColor = color;
}
// 获取xhr状态函数,立即执行
(function xhr() {
GM_xmlhttpRequest({
method: 'GET',
url: siteUrl,
onload: function (result) {
xhrResult = result.status;
console.log(`---${site.name} onload,${xhrResult},-${siteUrl}`);
// 默认search=’false‘,不用任何搜索,直接200 显示绿色
if (site.search == 'search') {
let domNew = new DOMParser().parseFromString(result.responseText, 'text/html');
let linkElement = domNew.querySelectorAll(site.domQuery.linkQuery)[0];
let titleElement = domNew.querySelectorAll(site.domQuery.titleQuery)[0];
// console.dir(titleElement);
// console.dir(linkElement);
if (linkElement != undefined && titleElement.outerHTML.includes(videoCode)) {
// buttonG.href = `https://${site.hostname}${element.pathname}${element.search}`;
buttonG.href = linkElement.href.replace(linkElement.hostname, site.hostname);
} else {
console.log('undefined');
xhrResult = 404;
}
}
xhrResult == 404 ? setbuttonGColor('red') : setbuttonGColor('green');
},
onerror: function (result) {
// xhrResult = false;
console.log(`---${site.hostname} onerror`, xhrResult);
console.log(result);
setbuttonGColor('red');
},
});
})();
}
//谷歌翻译
function translateTitle(query) {
const ButtonT = document.createElement('h2');
let h2title = document.querySelector('h2.title.is-4');
h2title.appendChild(ButtonT);
ButtonT.classList.add('title', 'is-6');
ButtonT.innerHTML = '翻译';
ButtonT.style.display = 'none';
ButtonT.style.background = '#EEEEEB';
ButtonT.style.padding = '.5em 0';
ButtonT.style.cursor = 'pointer';
h2title.addEventListener('mouseover', () => {
ButtonT.style.display = 'block';
});
h2title.addEventListener('mouseout', () => {
ButtonT.style.display = 'none';
});
ButtonT.addEventListener('click', getTranslate);
let data = {
client: 'gtx',
dt: 't',
dj: 1,
ie: 'UTF-8',
sl: 'auto', //目的类型
tl: 'zh-CN', //目标语言
q: query,
};
let requestUrl = 'https://translate.google.cn/translate_a/single?' + Qs.stringify(data);
let flag = true;
function getTranslate() {
if (!flag) {
return;
}
GM_xmlhttpRequest({
method: 'GET',
url: requestUrl,
onload: function (res) {
console.log('tarnslateXHR');
let json = JSON.parse(res.responseText);
// console.log(json.sentences[0].trans);
ButtonT.innerHTML = json.sentences[0].trans;
flag = false;
},
});
}
}