// ==UserScript==
// @name 根据番号快速搜索
// @version 0.9.6
// @description 标记网页上的所有番号, 在相关网站快速方便的进行搜索
// @author XiJinPing
// @exclude *://www.52pojie.cn/*
// @exclude *://meta.appinn.net/*
// @exclude *://v2ex.com/*
// @exclude *://greasyfork.org/*
// @exclude *://bilibili.com/*
// @exclude *://www.douyin.com/*
// @exclude *.1688.com/*
// @exclude *.taobao.com/*
// @exclude *.jd.com/*
// @exclude *.smzdm.com/*
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
var timer;
var avInfo = {}; // 临时存储相关信息
var localInfo = {}; // 从本地获取到的番号信息
var Trans = { // 临时存储翻译的相关信息
id:"",
transText:"",
trans:[]
}
var allHTML = document.querySelector("body");
// 对于一些网站,可能需要第二种正则来匹配
var oregExp = /(?-1){
return otext;
}
if(otemp<0){ // 没有横杠
if(oSpecial>-1){ // 匹配到 特殊的单词, 直接返回
return otext;
}else if(oOnlyNum.length==3 && oSpecial<0){ // 未匹配到特殊的单词,并且数字的个数为3 将其视为番号, 添加横杠
var oindex = otext.search(/\d/);
otext = otext.slice(0,oindex) + "-" + otext.slice(oindex)
} else { // 如果数字的个数是2个或者4个,不是番号的可能性更大些,直接返回。
return otext;
}
}
odiv.dataset.av = otext;
odiv.innerHTML = otext;
return odiv;
}
});
}
findAndReplaceDOMTextFun();
var findFun = setInterval(findAndReplaceDOMTextFun,1000);
function createPattenr(id){
var linkJavbusPage = "https://www.javbus.com/" + id;
var linkJavbus = "https://www.javbus.com/search/" + id;
var linkJavLib = "http://www.javlibrary.com/cn/vl_searchbyid.php?keyword=" + id;
var linkbtsow = "https://btsow.com/search/" +id;
var aPattern = "" +
"javbus 页面" +
"" +
"javbus 搜索" +
"" +
"javLib 搜索" +
"" +
"btsow 搜索" +
"";
var ofloat = document.createElement("avdiv")
ofloat.classList.add("av-float");
ofloat.innerHTML=aPattern;
return ofloat;
}
// 点击番号复制
document.onclick=function(e){
if(e.target.dataset.av){
GM_setClipboard(e.target.dataset.av)
}
}
// 鼠标划过显示信息
document.onmouseover = function(e){
if(e.target.className=="avclass"){
var avid = e.target.dataset.av;
if(document.querySelector(".av-float")){
console.log("已存在");
}else{
var oPosition = e.target.getBoundingClientRect()
var odiv = createPattenr(e.target.dataset.av)
document.body.appendChild(odiv);
odiv.style.left = oPosition.x + "px";
odiv.style.top = oPosition.y + oPosition.height + "px";
avInfo = {};
localInfo = GM_getValue("avInfo");
if(!localInfo){
GM_setValue("avInfo",{});
localInfo = {};
}
if(localInfo[avid]){
console.log("老司机共浏览了" + Object.keys(localInfo).length + "个番号!");
avInfo = localInfo[avid];
timer = setTimeout(() => {
console.log("停留超过1.5s, 重新加载图片");
getInfo(avid,true);
settingPostion(); //重置位置
}, 1500);
} else{
console.log("需要从网络获取");
getInfo(e.target.dataset.av);
}
var otherInfo = document.createElement('avdivs');
otherInfo.innerHTML=addOtherInfo();
odiv.appendChild(otherInfo);
settingPostion(); //重置位置
}
}else if(e.target.className=="av-float" || e.target.className=="avclass"|| e.target.className=="av-floatdiv" || e.target.nodeName == "avdiv" ||e.target.nodeName =="IMG"){
// console.log("这是一条没有意义的消息");
;
}else{
var odiv = document.querySelector(".av-float")
if(odiv){
odiv.parentNode.removeChild(odiv)
// console.log("移除");
}
clearTimeout(timer);
}
}
// 调整距离底部的距离,以防越界
function settingPostion(){
var odiv = document.querySelector(".av-float");
if(!odiv) return;
var oClient = odiv.getBoundingClientRect()
var oTop = oClient.top;
var oHeight = oClient.height;
var winHeight = document.documentElement.clientHeight;
if(oTop + oHeight > winHeight){
// console.log("越界");
odiv.style.top = "unset";
odiv.style.bottom = 0;
}
}
function getInfo(avID,oReload){
// console.log("函数:getInfo(avID,oReload)");
GM_xmlhttpRequest({
method: 'get',
url: 'https://www.javbus.com/' + avID,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
data: "",
onload: function (data) {
var parser=new DOMParser();
var htmlDoc=parser.parseFromString(data.responseText, "text/html");
// 番号
avInfo.id = avID;
// 标题
avInfo.title = htmlDoc.title.replace(avID,"").replace(" - JavBus","");
// 获取演员名字
var starNameList = htmlDoc.querySelectorAll(".star-name");
var starName = [];
for(var i=0;i {
clearInterval(interval)
}, 2000)
return;
}
// console.log("获取到的所有信息: ");
// console.log(avInfo);
// console.log("------------------");
var otherInfo = document.createElement('avdivs');
otherInfo.innerHTML = addOtherInfo()
otherInfo.appendChild(image);
document.querySelector(".av-float").appendChild(otherInfo);
settingPostion(); //重置位置
}
});
}
function addOtherInfo(){
// console.log("函数: addOtherInfo()");
// console.log(avInfo.starName);
var actors = ""
var str = "";
if(avInfo.starName && avInfo.starName.length>0){
for(var i=0;i"+ avInfo.starName[i] + ", ";
}
actors = actors.slice(0,actors.length-2);
str += "演员: " + actors + ""
}
if(avInfo.titleTrans){
str += ""
}else if(avInfo.title){
str += ""
}
if(avInfo.tags && avInfo.tags.length>0){
str += "标签: " + avInfo.tags + ""
}
if(avInfo.series){
str += "" + avInfo.series + ""
}
if(avInfo.date){
str += "" + avInfo.date + ""
}
return str;
}
// 翻译函数取自于作者 Johnny Li 的脚本 “网页翻译助手” version:1.2.9, https://greasyfork.org/zh-CN/scripts/389784 许可协议MIT
// 作者 Johnny Li
// 脚本 “网页翻译助手”
// version:1.2.9,
// https://greasyfork.org/zh-CN/scripts/389784
// 许可协议 MIT
function googleTrans() {
var h_url = "";
var googleTransApi = "https://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&sl=auto&tl=zh-CN&hl=zh-CN";
h_url = googleTransApi + "&q=" + encodeURIComponent(Trans.transText);
GM_xmlhttpRequest({
method: "GET",
url: h_url,
onload: function (r) {
setTimeout(function () {
var data = JSON.parse(r.responseText);
var trans = [];
for (var i = 0; i < data.sentences.length; i++) {
var getransCont = data.sentences[i];
trans.push(getransCont.trans);
}
Trans.trans = trans;
// console.log("翻译结果:");
// console.log(trans);
localInfo[Trans.id].titleTrans = trans;
GM_setValue("avInfo",localInfo);
document.querySelector("#searchAVMenuTitle").innerHTML = "标题(译): " + trans;
}, 300);
},
onerror: function (e) {
console.error(e);
}
});
}
function getActorInfo(acterName){
console.log("函数: getActorInfo(acterName");
// https://xslist.org/search?query=%E3%81%95%E3%81%A4%E3%81%8D%E8%8A%BD%E8%A1%A3&lg=zh
var actor_url = 'https://xslist.org/search?query=' + acterName + "&lg=zh";
console.log(actor_url);
GM_xmlhttpRequest({
method: 'GET',
url: actor_url,
onload: function (data) {
setTimeout(function () {
console.log("这是获取到的演员信息");
console.log(data.responseXML);
var parser=new DOMParser();
var htmlDoc=parser.parseFromString(data.responseText, "text/html");
var avActorLink = htmlDoc.querySelector("a");
console.log(avActorLink);
}, 300);
},
onerror: function (e) {
console.error(e);
}
});
}
GM_addStyle(".av-float{" +
"position: fixed;" +
"display: block;" +
"color: #000;" +
"background:rgba(255,255,255,.8);" +
"backdrop-filter: blur(5px);" +
"border:1px solid #fff;" +
"border-radius: 4px;" +
"padding:6px;" +
"margin-top: -2px; " +
"z-index: 99999; " +
"font-size: 14px;" +
"}" +
"avdiv{" +
"display:block;" +
"}" +
".av-float img{" +
"max-width: 100%;" +
"}" +
".av-float a:link," +
".av-float a:visited{" +
"color: #000" +
"}" +
"");
})();