// ==UserScript== // @name 一键复制美剧链接 // @version 1.7.0 // @description 识别常用网址的美剧链接,美剧天堂添加跳转豆瓣、IMDB、subscene、rarbg、piratebay入口,原始匹配网站云盘可以直接进入,可识别用户匹配网站中的链接。附本人写的字幕翻译程序,下载地址在附加信息中。 // @author bleu // @compatible edge Tampermonkey // @license MIT // @icon https://fastly.jsdelivr.net/gh/Bleu404/PRPO@latest/png/magent.png // @supportURL https://greasyfork.org/zh-CN/scripts/430126-一键复制美剧链接/feedback // @match https://*.meijutt.tv/content/* // @match https://www.kpkuang.com/* // @match https://91mjw.com/* // @match https://www.bd2020.com/* // @match https://www.ttmeijuvip.com/* // @match https://www.xl720.com/* // @match https://pan.xunlei.com/s/* // @match https://pan.baidu.com/share/* // @match https://115.com/s/* // @grant GM_setClipboard // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_openInTab // @grant GM_xmlhttpRequest // @grant GM_info // @run-at document-end // @require https://fastly.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js // @require https://fastly.jsdelivr.net/npm/sweetalert2@11.1.0/dist/sweetalert2.all.min.js /* globals jQuery, $, waitForKeyElements , swal,Swal */ // @namespace http://tampermonkey.net/ // @downloadURL none // ==/UserScript== (function () { 'use strict'; const webName = ['meijutt', '91mjw', 'kpkuang', 'ttmeijuvip', 'xl720']; const panArry = ['xunlei', 'baidu', '115']; const pageURL = window.location.href; let sign; let floatSign = false; let cssStyle; let BleuButton; let buttParent; let openMark = 0; let oldParent = null; let panType = null; let toolbox = { addNewStyle() { if (sign === 'cloudPan') { return 0; } cssStyle = [ '.btn_bleu{padding: 10px 25px;font-size: 16px;cursor: pointer;text-align: center; text-decoration: none;outline: none;color: #fff;background-color: #008CBA;border: none;border-radius: 14px;display:block;margin:0 auto}', '.btn_bleu:hover{background-color: #008CEA}', '.btn_bleu:active{background-color: #008CEA;box-shadow: 0 5px #666;transform: translateY(4px);}', '.floatButton {position: fixed;bottom: 10%;left:46%;right: 0;margin:0 auto;z-index:9999}', ]; BleuButton = '
'; cssStyle.forEach(function (value) { GM_addStyle(value); }); }, getURLsign() { let nameFU = GM_info.script.options.override.use_matches; nameFU.length != 0 && nameFU.forEach(function (value) { if (pageURL.match(value)) { sign = value } }) webName.forEach(function (value) { if (pageURL.match(value)) { sign = value } }) if (sign == undefined) { //云盘界面 sign = 'cloudPan'; } }, getButtonParent() { //公众号屏蔽 let adshow = $("div.widget-weixin"); if (adshow.length != 0) { adshow.remove(); } let box; switch (sign) { case 'meijutt': $("div.widget-weixin").remove(); box = pageURL.match("m.meijutt.tv")?$(".arconix-toggle-content.fn-clear"):$("div.o_cn_r_box"); break; case '91mjw': box = $(".down-list"); break; case 'kpkuang': box = $(".fed-down-item.fed-drop-item.fed-visible"); break; case 'ttmeijuvip': box = $("div.box_bor3"); break; case 'rrdyw': box = $(".movie-txt"); break; case 'xl720': box = $(".entry-content"); break; default: floatSign = true; box = $("body"); break; } return box; }, arryDel(arrold) { var arr = []; arrold.forEach(function (value) { if (arr.indexOf(value) == -1) { if (sign == 'kpkuang') { value = decodeURIComponent(escape(window.atob(value.replace('data-clipboard-text="', '')))); if (arr.indexOf(value) == -1) { arr.push(value); } return; } arr.push(value); } }) if (sign == 'kpkuang') { let end; let nm = $(".uk-width-expand.uk-first-column").text(); nm = nm.match(/第\d*集/)[0]; nm = nm.replace('第', '').replace('集', ''); end = arr.length / Math.ceil(arr.length / nm); arr = arr.slice(0, end); } return arr; }, getDownloadText() { let ulstr = buttParent.innerHTML; let reg = /magnet\:\?[^"]*|ed2k\:\/\/[^"]*|thunder\:\/\/[^"]*|data-clipboard-text="[^"]*/g; let s = ulstr.match(reg); return s == null ? s : this.arryDel(s); }, findLinknode(buttdiv) { buttParent = buttdiv if (sign == "meijutt"||sign == "ttmeijuvip") { for (let tabs of document.getElementsByClassName('tabs-list')) { if (tabs.getAttribute('style') == 'display: block;' || tabs.getAttribute('style') == null) { return tabs; } } } return buttParent; }, noneLinkfunc(button) { openMark++; if (sign === "meijutt") { $(button).attr('value', '打开全部链接'); if (openMark === 1 || (openMark === 2 && oldParent != buttParent)) { openMark = 1 alert("确定打开所有链接吗?共有" + $(buttParent).find('li').length + "条\r\n 再次点击确认"); oldParent = buttParent; } if (openMark === 2 && oldParent === buttParent) { //确定是同一标签下 openMark = 0; if ($(buttParent).find("input")) { $(buttParent).find("input").each(function () { this.click(); }) }; if ($(buttParent).find("a")) { $(buttParent).find("a").each(function () { let href = $(this).attr('href'); href.indexOf("http") < 0 ? href = "https://www.meijutt.tv/" + href : href; GM_openInTab(href, { active: true, insert: true, setParent: true }); }); }; } } else { alert("没有复制任何链接"); } }, sleep(time) { return new Promise((resolve) => setTimeout(resolve, time)); }, isHidden(el) { try { return el.offsetParent === null; } catch (e) { return false; } }, getHash(linkAddress) { //处理迅雷百度云分享链接 if (linkAddress == null) { return 0 } if (!(linkAddress.search("xunlei") >= 0 || linkAddress.search("baidu") >= 0)) { return 0 } let hashRex = /\/s\/[^?]*|surl=[^?]*/; let res = linkAddress.match(hashRex)[0].replace('surl=', ''); if (linkAddress.search("baidu") >= 0 && res.search("\/s\/") >= 0) { res = res.replace('\/s\/', '').substr(1); } return res.replace('\/s\/', ''); }, getPanType() { panArry.forEach(function (value) { if (pageURL.search(value) >= 0) { panType = value } }) }, getButtSec(linkText) { let bleuButtSec = ''; for (let key in linkText) { if (key === "magnet" && linkText[key].length > 0) { bleuButtSec = bleuButtSec + ``; } if (key === "ed2k" && linkText[key].length > 0) { bleuButtSec = bleuButtSec + ``; } if (key === "thunder" && linkText[key].length > 0) { bleuButtSec = bleuButtSec + ``; } if (key === "http" && linkText[key].length > 0) { bleuButtSec = bleuButtSec + ``; } } bleuButtSec = bleuButtSec + ''; return bleuButtSec; }, } let linkHandler = { webWithPanLink() { let hash = '', linkParent = '', pswd = ''; if (pageURL.indexOf('bd2020') >= 0) { localStorage.setItem("openid", 'omcj56pIE_ssXEG7s04uZ9saaa'); //去二维码 let hide = document.querySelector('.layui-icon.layui-icon-down'); hide ? hide.click() : 1; linkParent = document.querySelectorAll('.option.copybtn.alert'); linkParent.forEach((value) => { hash = toolbox.getHash($(value).find('a')[0].getAttribute('href')); pswd = $(value).find('span')[0].innerHTML; GM_setValue(hash, pswd); }); } }, panListener(panInputSign, panBttonSign) { let asda = toolbox.getHash(pageURL); let password = GM_getValue(asda); let maxTime = 10; if (password == undefined) { return 0 } let listener = setInterval(async () => { maxTime--; let panInput = document.querySelector(panInputSign); let panBtton = document.querySelector(panBttonSign); if (panInput && !toolbox.isHidden(panInput)) { clearInterval(listener); let lastValue = panInput.value; panInput.value = password; //Vue & React 触发 input 事件===》 可行 /*let event = new Event('input', {bubbles: true}); let tracker = panInput._valueTracker; if (tracker) { tracker.setValue(lastValue); } panInput.dispatchEvent(event);*/ //js原生触发===》可行 var evt = document.createEvent('HTMLEvents') evt.initEvent('input', true, true) panInput.dispatchEvent(evt) //jquery触发===》不可行 //$(panInput).bind('input propertychange', function() {$(this).val(lastValue);}); await toolbox.sleep(500); //1秒后点击按钮 panBtton.click(); } else { maxTime === 0 && clearInterval(listener); } }, 800); }, clickPanButton(panBttonSign) { let maxTime = 10; let listener = setInterval(async () => { maxTime--; let panBtton = document.querySelector(panBttonSign); if (panBtton && !toolbox.isHidden(panBtton)) { clearInterval(listener); await toolbox.sleep(500); //1秒后点击按钮 panBtton.click(); } else { maxTime === 0 && clearInterval(listener); } }, 800); }, autoOpenPan() { if (sign != 'cloudPan') { return 0; } let panInput, panBtton; if (panType === 'xunlei') { panInput = '.pass-input-wrap .td-input__inner'; panBtton = '.pass-input-wrap .td-button'; } if (panType === 'baidu') { panInput = '#accessCode'; panBtton = '#submitBtn'; } if (panType === '115') { panBtton = '.button.btn-large'; } panInput && panBtton ? linkHandler.panListener(panInput, panBtton) : linkHandler.clickPanButton(panBtton); }, fixPanButton() { if (sign != "meijutt") { return 0; } let option = { active: true, insert: true, setParent: true }; $('.copy-pw').each(function () { $(this).attr('value', '点击进入'); $(this).attr('href', $(this).next().attr('href')); $(this).next().remove(); }) $('.copy-pw').on('click', function () { GM_setClipboard($(this).attr('data'), 'text'); let hash = toolbox.getHash($(this).attr('href')); GM_setValue(hash, $(this).attr('data')); GM_openInTab($(this).attr('href'), option); }) }, organizeLink(linkArry) { let linkType = [0, 0, 0, 0]; let linkText = { 'magnet': [], 'ed2k': [], 'thunder': [], 'http': [], }; linkArry.forEach((value) => { if (value.search("magnet") >= 0) { linkText.magnet.push(value); linkType[0] = 1; return; } if (value.search("ed2k") >= 0) { linkText.ed2k.push(value); linkType[1] = 1; return; } if (value.search("thunder") >= 0) { linkText.thunder.push(value); linkType[2] = 1; return; } if (value.search("http") >= 0) { linkText.http.push(value); linkType[3] = 1; return; } }) if (linkType[0] + linkType[1] + linkType[2] + linkType[3] === 1) { let arrytxt = linkArry.toString().replace(/,/g, "\n"); GM_setClipboard(arrytxt, 'text'); } else { Swal.fire({ html: toolbox.getButtSec(linkText), width: 400 + 'px', showConfirmButton: false, //showCloseButton: true, }) } $('.btn_bleu.sec').on("click", function () { let arrytxt; let attr = $(this).attr("linktype"); if (attr != "all") { arrytxt = linkText[attr].toString().replace(/,/g, "\n"); } else { let arry = []; arry.push(linkText.magnet, linkText.ed2k, linkText.thunder, linkText.http); arrytxt = arry.toString().replace(/,/g, "\n"); } GM_setClipboard(arrytxt, 'text'); }); }, ButtonAddEvent() { $('.btn_bleu').on("click", function () { buttParent = toolbox.findLinknode(this.parentNode.parentNode); let arryAll = toolbox.getDownloadText(); arryAll == null ? toolbox.noneLinkfunc(this) : linkHandler.organizeLink(arryAll); }); }, processButton() { let BleuButton1 = ''; if (sign === 'cloudPan') { return 0; } buttParent = toolbox.getButtonParent(); //buttParent.append(BleuButton); if (floatSign) { buttParent.append(BleuButton1); } else { buttParent.append(BleuButton); } this.ButtonAddEvent(); this.fixPanButton(); //适配meijutt网站 }, addDBicon() { if (!(sign === "meijutt"||sign === "ttmeijuvip")) { return } let OriginalName = $('.o_r_contact').find('li')[1].outerText.replace('原名:', '').replace(/^\s*/, "").toLowerCase(); let name = $('h1').html(); let IMDB, douban; let firstID; let icon = ''; GM_addStyle('.ico_bleu{display: inline-flex;vertical-align: middle;margin: inherit;margin-left: 10px;}'); GM_addStyle('.ico_bleu:active{box-shadow: 0 5px #666;transform: translateY(4px);}'); let icon1 = '