PC浏览器上各VIP视频解析插件

PC浏览器上各VIP视频解析插件

现在现在各大视频网站都是会员制的,很多VIP视频都没法看,对于广大有些只是偶尔看看电视剧的盆友可能觉得开个会员有点不值得,今天爱游就分享一个在电脑浏览器就可以直接看VIP视频的插件,插件需要先安装油猴插件,UC浏览器直接可以复制脚本添加。 脚本如下...

现在现在各大视频网站都是会员制的,很多VIP视频都没法看,对于广大有些只是偶尔看看电视剧的盆友可能觉得开个会员有点不值得,今天爱游就分享一个在电脑浏览器就可以直接看VIP视频的插件,插件需要先安装油猴插件,UC浏览器直接可以复制脚本添加。

脚本如下:

[wechat key=1642 reply=679]

  1. // ==UserScript==
  2. // @name     破解VIP会员视频集合
  3. // @namespace  https://greasyfork.org/zh-CN/users/104201
  4. // @version    4.2.5
  5. // @description  一键破解[优酷|腾讯|乐视|爱奇艺|芒果|AB站|音悦台]等VIP或会员视频,解析接口贵精不贵多,绝对够用。详细方法看说明和图片。包含了[一键VIP视频解析、去广告(全网) xxxx-xx-xx 可用▶mark zhang][VIP视频在线解析破解去广告(全网)xx.xx.xx更新可用▶sonimei134][破解全网VIP视频会员-去广告▶ttmsjx][VIP会员视频解析▶龙轩][酷绘-破解VIP会员视频▶ahuiabc2003]以及[VIP视频破解▶hoothin]的部分接口。[Tampermonkey | Violentmonkey | Greasymonkey 4.0+]
  6. // @author     黄盐
  7. // require  https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
  8. // @noframes
  9. // @match    *://*.iqiyi.com/*
  10. // @match    *://*.youku.com/*
  11. // @match    *://*.le.com/*
  12. // @match    *://*.letv.com/*
  13. // @match    *://v.qq.com/*
  14. // @match    *://*.tudou.com/*
  15. // @match    *://*.mgtv.com/*
  16. // @match    *://film.sohu.com/*
  17. // @match    *://tv.sohu.com/*
  18. // @match    *://*.acfun.cn/v/*
  19. // @match    *://*.bilibili.com/*
  20. // @match    *://vip.1905.com/play/*
  21. // @match    *://*.pptv.com/*
  22. // @match    *://v.yinyuetai.com/video/*
  23. // @match    *://v.yinyuetai.com/playlist/*
  24. // @match    *://*.fun.tv/vplay/*
  25. // @match    *://*.wasu.cn/Play/show/*
  26. // @match    *://*.56.com/*
  27. // @exclude  *://*.bilibili.com/blackboard/*
  28. // @grant    GM.getValue
  29. // @grant    GM.setValue
  30. // @grant    GM_getValue
  31. // @grant    GM_setValue
  32. // @grant    unsafeWindow
  33. // @grant    GM_xmlhttpRequest
  34. // @grant    GM.xmlHttpRequest
  35. // @grant    GM_openInTab
  36. // @grant    GM.openInTab
  37. // ==/UserScript==
  38. (() => {
  39.   ‘use strict’;
  40.   const YoukuIcon = ‘<svg width=“1.2em” height=“1.2em” viewbox=“0 0 72 72”><defs><circle id=“youkuC1” r=“5.5” style=“stroke:none;;fill:#0B9BFF;”></circle><path id=“youkuArow” d=“m0,10 a5,5 0,0,1 0,-10 h20 a5,5 0,0,1 0,10z” style=“fill:#FF4242;”></path></defs><circle cx=“36” cy=“36” r=“30.5” style=“stroke:#30B4FF;stroke-width:11;fill:none;”></circle><use x=“10.5” y=“19” xlink:href=“#youkuC1”/><use x=“61.5” y=“53” xlink:href=“#youkuC1”/><use x=“39” y=“1” transform=“rotate(30)” xlink:href=“#youkuArow”/><use x=“-1” y=“52” transform=“rotate(-35)” xlink:href=“#youkuArow”/></svg>’;
  41.   const VQQIcon = ‘<svg height=“1.2em” width=“1.2em” viewbox=“0 0 185 170”><defs><path id=“vQQ” d=“M7 20Q14 -10 55 7Q100 23 145 60Q170 80 145 102Q108 138 47 165Q15 175 4 146Q-5 80 7 20”></path></defs><use style=“fill:#44B9FD;” transform=“translate(27,0)” xlink:href=“#vQQ”></use><use style=“fill:#FF9F01;” transform=“translate(0,18),scale(0.8,0.75)” xlink:href=“#vQQ”></use><use style=“fill:#97E61B;” transform=“translate(23,18),scale(0.80.75)” xlink:href=“#vQQ”></use><use style=“fill:#fff;” transform=“translate(50,45),scale(0.4)” xlink:href=“#vQQ”></use></svg>’;
  42.   var tMscript = document.createElement(‘script’);
  43.   tMscript.innerText = `q = function(cssSelector){return document.querySelector(cssSelector);};qa = function(cssSelector){return document.querySelectorAll(cssSelector);};`;
  44.   document.head.appendChild(tMscript);
  45.   window.q = function(cssSelector) {return document.querySelector(cssSelector);};
  46.   window.qa = function(cssSelector) {return document.querySelectorAll(cssSelector);};
  47.   window.makeEl = function(tag){return document.createElement(tag);};
  48.   /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+ */
  49.   function GMaddStyle(cssText){
  50.     let a = document.createElement(‘style’);
  51.     a.textContent = cssText;
  52.     let doc = document.head || document.documentElement;
  53.     doc.appendChild(a);
  54.   }
  55.   /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
  56.    * 为了兼容GreasyMonkey 4.0 获取结构化数据,比如 json Array 等,
  57.    * 应当先将字符串还原为对象,再执行后续操作
  58.    * GMgetValue(name,defaultValue).then((result)=>{
  59.    *   let result = JSON.parse(result);
  60.    *   // other code…
  61.    * };
  62.    */
  63.   function GMgetValue(name, defaultValue) {
  64.     if (typeof GM_getValue === ‘function‘) {
  65.       return new Promise((resolve, reject) => {
  66.       resolve(GM_getValue(name, defaultValue));
  67.       // reject();
  68.       });
  69.     } else {
  70.       return GM.getValue(name, defaultValue);
  71.     }
  72.   }
  73.   /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
  74.    * 为了兼容GreasyMonkey 4.0 储存结构化数据,比如 json Array 等,
  75.    * 应当先将对象字符串化,
  76.    * GMsetValue(name, JSON.stringify(defaultValue))
  77.    */
  78.   function GMsetValue(name, defaultValue) {
  79.     if (typeof GM_setValue === ‘function‘) {
  80.       GM_setValue(name, defaultValue);
  81.     } else {
  82.       GM.setValue(name, defaultValue);
  83.     }
  84.   }
  85.   function GMxmlhttpRequest(obj){
  86.     if (GM_xmlhttpRequest === “function”) {
  87.       GM_xmlhttpRequest(obj);
  88.     } else{
  89.       GM.xmlhttpRequest(obj);
  90.     }
  91.   }
  92.   var replaceRaw,  /*是否嵌入当前页面*/
  93.   episodes,        /*是否启用爱奇艺正确选集*/
  94.   userApisOn;      /*是否加载自定义解析接口*/
  95.   GMaddStyle(`
  96.     /*TMHY:TamperMonkeyHuanYan*/
  97.     #TMHYvideoContainer{z-index:999998;background:rgba(0,0,0,.7);position:fixed;top:7em;left:5em;height:65%;width:65%;resize:both;overflow:auto;box-shadow:2px 2px 5px 5px rgba(255,255,0,.8);}
  98.     /*TMHYVideoContainer*/
  99.     #TMHYvideoContainer button{top:.1em;cursor:pointer;visibility:hidden;font-size:3em;color:#fff;background:transparent;border:0;}
  100.     #TMHYvideoContainer:hover button{visibility:visible;}
  101.     #TMHYvideoContainer:hover button:hover{color:#ff0;}
  102.     #TMHYiframe{height:100%;width:100%;overflow:auto;position:absolute;top:0;left:0;margin:auto;border:0;box-shadow:0 0 3em rgba(0,0,0,.4);z-index:-1;}
  103.     /*TMHYIframe*/
  104.     #TMHYul{position:fixed;top:5em;left:0;padding:0;z-index:999999;}
  105.     #TMHYul li{list-style:none;}
  106.     #TMHYul svg{float:right;}
  107.     .TM1{opacity:0.3;position:relative;padding-right:.5em;width:1.5em;cursor:pointer;}
  108.     .TM1:hover{opacity:1;}
  109.     .TM1 span{display:block;border-radius:0 .3em .3em 0;background-color:#ffff00;border:0;font:bold 1em “微软雅黑”!important;color:#ff0000;margin:0;padding:1em .3em;}
  110.     .TM3{position:absolute;top:0;left:1.5em;display:none;border-radius:.3em;margin:0;padding:0;}
  111.     .TM3 li{float:none;width:6em;margin:0;font-size:1em;padding:.15em 1em;cursor:pointer;color:#3a3a3a!important;background:rgba(255,255,0,0.8);}
  112.     .TM3 li:hover{color:white!important;background:rgba(0,0,0,.8);}
  113.     .TM3 li:last-child{border-radius:0 0 .35em .35em;}
  114.     .TM3 li:first-child{border-radius:.35em .35em 0 0;}
  115.     .TM1:hover .TM3{display:block;}
  116.     /*自定义解析接口,本页播放窗口设置*/
  117.     .TMHYp {position:fixed;top:20%;left:20%;z-index:999999;background:yellow;padding:30px 20px 10px 20px;border-radius:10px;text-align:center;}/*TMHYpanel*/
  118.     .TMHYp * {font-size:16px;background:rgba(255,255,0,1);font-family:’微软雅黑’;color:#3a3a3a;border-radius:10px;}
  119.     #tMuserDefine li {margin:5px;width:100%;list-style-type:none;}
  120.     .TMHYp input[type=text] {border-radius:5px !important;border:1px solid #3a3a3a;margin:2px 10px 2px 5px;padding:2px 5px;}
  121.     .TMHYlti {width:350px;}/*TMHYlongTextInput*/
  122.     .TMHYmti {width:160px;}/*TMHYmti*/
  123.     .idelete {float: left;  display: inline-block; color: red; padding: 0 20px !important; cursor: pointer;}
  124.     .iname {padding-right:10px;}
  125.     li:hover .idelete,li:hover .ilink,li:hover .iname {background:rgba(224,175,17,0.62);}
  126.     .TMHYp button {border:1px solid #3a3a3a;border-radius:5px;cursor:pointer;padding: 2px 10px;margin:10px 20px 0 20px;}
  127.     .TMHYp button:hover {background:#3a3a3a;color:yellow;}
  128.     .TMHYClose {position:absolute;top:0;left:0;margin:0!important;}
  129.     .TMHYp fieldset {margin:0;padding:10px;}
  130.     .TMHYp legend {padding:0 10px;}
  131.     .TMHYp label {display:inline-block;}
  132.     .TMHYspan80 {display:inline-block;text-align:right;width:80px;}
  133.     .TMHYspan120 {display:inline-block;text-align:right;width:120px;}
  134.     #inTabSettingSave {position:relative;margin-top:10px;padding:3px 20px;}
  135.   `);
  136.   var defaultapi = {
  137.     title: “龙轩脚本的接口,默认用浮空解析,失效请更换接口”,
  138.     url: “http://goudidiao.com/?url=”
  139.   };
  140.   //apis name:显示的文字  url:接口  title:提示文字  intab:是否适合内嵌(嵌入判断:GMgetValue(“replaceRaw”,false)值||intab值)
  141.   var apis =[
  142.     {name:“够低调”,url:“http://goudidiao.com/?url=”,title:“转圈圈就换线路”,intab:1},
  143.     {name:“百域阁”,url:“http://api.baiyug.cn/vip/index.php?url=”,title:“转圈圈就换线路”,intab:1},
  144.     {name:“搜你妹”+YoukuIcon,url:“http://www.sonimei.cn/?url=”,title:“综合接口,VIP视频*** 更新可用【作者sonimei134】脚本的接口”,intab:0},
  145.     {name:“玩的嗨”+YoukuIcon,url:“http://tv.wandhi.com/go.html?url=”,title:“综合接口,一键VIP*** 更新可用【作者mark zhang】脚本的接口”,intab:0},
  146.     {name:“vParse”+VQQIcon,url:“https://api.vparse.org/?url=”,title:“支持腾讯”,intab:1},
  147.     {name:“猫云”+VQQIcon,url:“https://jx.maoyun.tv/index.php?id=”,title:“支持腾讯”,intab:1},
  148.     {name:“噗噗电影”,url:“http://pupudy.com/play?make=url&id=”,title:“综合接口,破解全网VIP视频会员-去广告【作者ttmsjx】脚本的接口”,intab:0},
  149.     {name:“抢先影院”+YoukuIcon,url:“http://www.qxyingyuan.vip/play?make=url&id=”,title:“据说优酷比较稳定”,intab:0},
  150.     {name:“酷绘”,url:“http://appapi.svipv.kuuhui.com/svipjx/liulanqichajian/browserplugin/qhjx/qhjx.php?id=”,title:“综合接口,酷绘*【作者ahuiabc2003】脚本的接口”,intab:0},
  151.     {name:“旋风解析”,url:“http://api.xfsub.com/index.php?url=”,title:“1905优先使用”,intab:1},
  152.     {name:“石头解析”,url:“https://jiexi.071811.cc/jx.php?url=”,title:“手动点播放”,intab:1},
  153.     {name:“无名小站”,url:“http://www.sfsft.com/admin.php?url=”,title:“无名小站同源”,intab:1},
  154.     {name:“VIP看看”,url:“http://q.z.vip.totv.72du.com/?url=”,title:“更换线路成功率会提高”,intab:1},
  155.     {name:“ODFLV”,url:“http://aikan-tv.com/?url=”,title:“不稳定,广告过滤软件可能有影响”,intab:1},
  156.     {name:“163人”,url:“http://jx.api.163ren.com/vod.php?url=”,title:“偶尔支持腾讯”,intab:1},
  157.     //{name:”CKFLV”,url:”http://www.0335haibo.com/tong.php?url=”,title:”CKFLV云,部分站点不支持”,intab:1},
  158.     {name:“无名小站2”,url:“http://www.wmxz.wang/video.php?url=”,title:“转圈圈就换线路”,intab:1},
  159.     //{name:”眼睛会下雨”,url:”http://www.vipjiexi.com/yun.php?url=”,title:”www.vipjiexi.com”,intab:1},
  160.     {name:“人人发布”,url:“http://v.renrenfabu.com/jiexi.php?url=”,title:“综合,多线路”,intab:0}
  161.   ];
  162.   //嵌入页面播放
  163.   function openInTab(evt) {
  164.     // 找到支持的方法, 使用需要全屏的 element 调用
  165.     function launchFullScreen(element) {
  166.       if(element.requestFullscreen) {
  167.         element.requestFullscreen();
  168.       } else if(element.mozRequestFullScreen) {
  169.         element.mozRequestFullScreen();
  170.       } else if(element.webkitRequestFullscreen) {
  171.         element.webkitRequestFullscreen();
  172.       } else if(element.msRequestFullscreen) {
  173.         element.msRequestFullscreen();
  174.       }
  175.     }
  176.     if(evt.target.dataset.intab === ‘1’){
  177.       //如果页面有播放窗口,只需更新播放窗口的 src, 如果没有播放窗口,读取播放窗口位置信息,新建一个播放窗
  178.       if(q(‘#TMHYiframe’) === null){
  179.         GMgetValue(‘intabSize’,'{“height”:“”,“width”:“”,“left”:“”,“top”:“”}’).then((position)=>{
  180.           var sty = JSON.parse(position);
  181.           sty = ‘height:’+sty.height+’;width:’+sty.width+’;left:’+sty.left+’;top:’+sty.top+’;’;
  182.           var a = makeEl(‘div’);
  183.           a.id = ‘TMHYvideoContainer’;
  184.           a.setAttribute(‘style’, sty);
  185.           a.innerHTML = ‘<button title=“关闭” id=“TMHYIframeClose”>?</button><button id=“TMHYfullScreen” title=“全屏”>?</button>’;
  186.           document.body.appendChild(a);
  187.           var b=makeEl(‘iframe’);
  188.           b.id=’TMHYiframe’;
  189.           b.src=evt.target.dataset.url + location.href;
  190.           q(‘#TMHYvideoContainer’).appendChild(b);
  191.           q(‘#TMHYIframeClose’).addEventListener(‘click’, ()=>{document.body.removeChild(q(‘#TMHYvideoContainer’));}, false);
  192.           q(‘#TMHYfullScreen’).addEventListener(‘click’, ()=>{launchFullScreen(q(‘#TMHYiframe’));}, false);
  193.         });
  194.       } else{
  195.         q(‘#TMHYiframe’).src=evt.target.dataset.url + location.href;
  196.       }
  197.     } else{
  198.       //不适合页内播放的,打开新标签
  199.       window.open(evt.target.dataset.url + location.href);
  200.     }
  201.   }
  202.   //保存嵌入页面大小位置设置
  203.   function saveInTabSetting(){
  204.     var intabSize = {
  205.       height:q(‘#TMpH’).value,
  206.       width:q(‘#TMpW’).value,
  207.       left:q(‘#TMpL’).value,
  208.       top:q(‘#TMpT’).value
  209.     };
  210.     GMsetValue(‘intabSize’, JSON.stringify(intabSize));
  211.     setTimeout(‘document.body.removeChild(q(“#TMHYSetting”));’, 30);
  212.   }
  213.   //生成”嵌入页面大小位置设置”面板
  214.   function intabSetting(){
  215.     var intabSize = GMgetValue(‘intabSize’,'{“height”:“”,“width”:“”,“left”:“”,“top”:“”}’)
  216.     .then((ag)=>{
  217.       var a = makeEl(‘div’);
  218.       a.id=’TMHYSetting’;
  219.       a.setAttribute(‘class‘, ‘TMHYp’);
  220.       a.innerHTML = `
  221.       <button class=“TMHYClose” onclick=“document.body.removeChild(this.parentNode)”>?</button>
  222.       <fieldset>
  223.         <legend>页内播放窗口位置大小</legend>
  224.         <label for=“TMpH”><span class=“TMHYspan80”>高度</span><input type=“text” id=“TMpH” value=“${intabSize.height}”  class=“TMHYmti” placeholder=’如“300px”或者“65%”‘/></label>
  225.         <label for=“TMpW”><span class=“TMHYspan80”>宽度</span><input type=“text” id=“TMpW” value=“${intabSize.width}”  class=“TMHYmti” placeholder=’如“300px”或者“65%”‘/></label><br />
  226.         <label for=“TMpL”><span class=“TMHYspan80”>左边距</span><input type=“text” id=“TMpL” value=“${intabSize.left}”  class=“TMHYmti” placeholder=’如“300px”或者“65%”‘/></label>
  227.         <label for=“TMpT”><span class=“TMHYspan80”>上边距</span><input type=“text” id=“TMpT” value=“${intabSize.top}”  class=“TMHYmti” placeholder=’如“300px”或者“65%”‘/></label>
  228.       </fieldset>
  229.       <button onclick=“(function(){var a=getComputedStyle(q(‘#TMHYvideoContainer’));q(‘#TMpH’).value=a.height,q(‘#TMpW’).value=a.width,q(‘#TMpL’).value=a.left,q(‘#TMpT’).value=a.top;})()”>获取当前播放窗尺寸</button>
  230.       <button id=“intabSettingPreview” onclick=“(function(){a=q(‘#TMHYvideoContainer’).style.cssText=’height:’+q(‘#TMpH’).value+’;width:’+q(‘#TMpW’).value+’;left:’+q(‘#TMpL’).value+’;top:’+q(‘#TMpT’).value+’;’;})()”>预览</button>
  231.       <button id=“intabSettingSave”>保存</button>
  232.       `;
  233.       document.body.appendChild(a);
  234.       q(‘#intabSettingSave’).addEventListener(‘click’, saveInTabSetting, false);
  235.     });
  236.   }
  237.   //检查是否勾选页内解析
  238.   function noNewTabCheck() {
  239.     var x, arr = qa(“.TM4 li”);
  240.     replaceRaw = q(“#intabChekbx”).checked;
  241.     GMsetValue(“replaceRaw”, replaceRaw);
  242.     for (x = 0; x < arr.length; x++) {
  243.       if (replaceRaw) {
  244.         arr[x].addEventListener(“click”, openInTab, false);
  245.         arr[x].setAttribute(‘onclick’, );
  246.       } else {
  247.         arr[x].removeEventListener(“click”, openInTab, false);
  248.         arr[x].setAttribute(‘onclick’, ‘window.open(this.dataset.url + location.href)’);
  249.       }
  250.     }
  251.   }
  252.   /* 爱奇艺正确选集 */
  253.   function rightEpsLinkCheck() {
  254.     episodes = q(“#realLinkChekbx”).checked;
  255.     GMsetValue(“episodes”, episodes);
  256.     try {
  257.       if (episodes) {
  258.         q(‘#widget-dramaseries’).addEventListener(‘click’, function getLink(e) {
  259.         //————-iqiyi剧集真实播放页面方法  Begin——————
  260.         //Code piece infomation:
  261.         //License:MIT   Author:hoothin  Homepage: http://hoothin.com  Email: [email protected]
  262.           var target = e.target.parentNode.tagName == “LI” ? e.target.parentNode : (e.target.parentNode.parentNode.tagName == “LI” ? e.target.parentNode.parentNode : e.target.parentNode.parentNode.parentNode);
  263.           if (target.tagName != “LI”return;
  264.           GMxmlhttpRequest({
  265.             method: ‘GET’,
  266.             url: “http://cache.video.qiyi.com/jp/vi/” + target.dataset.videolistTvid + “/” + target.dataset.videolistVid + “/?callback=crackIqiyi”,
  267.             onload: function(result) {
  268.               var crackIqiyi = function(d) {
  269.                 location.href = d.vu;
  270.               };
  271.               eval(result.responseText);
  272.             }
  273.           });
  274.         });
  275.         //————-iqiyi剧集真实播放页面方法  End——————
  276.       } else {
  277.         q(‘#widget-dramaseries’).removeEventListener(‘click’, getLink);
  278.       }
  279.     } catch(e) {}
  280.   }
  281.   /* 勾选自定义接口 */
  282.   function addApiCheck() {
  283.     userApisOn = q(‘#addApiChekBx’).checked;
  284.     GMsetValue(‘userApisOn’, userApisOn);
  285.     if(userApisOn) {
  286.       selfDefine();
  287.       setTimeout(showAddApiPanel, 200);
  288.     }
  289.   }
  290.   /*  执行  */
  291.   var div = makeEl(“div”);
  292.   div.id = “TMHYd”;
  293.   var txt = , i = 0;
  294.   /*提供的接口列表*/
  295.   for (i in apis) {
  296.     txt += `<li data-order=${i} data-url=“${apis[i].url}” data-intab=${apis[i].intab} title=“${apis[i].title}” onclick=“window.open(this.dataset.url+location.href)”>${apis[i].name}</li>`;
  297.   }
  298.   div.innerHTML = `
  299.     <ul id=“TMHYul”>
  300.       <li class=“TM1”><span id=“TMList”  title=“${defaultapi.title}” onclick=“window.open(\’${defaultapi.url}\’+window.location.href)”>▶</span><ul class=“TM3 TM4”>${txt}</ul></li>
  301.       <li class=“TM1”><span id=“TMSet”>▣</span><ul class=“TM3”>
  302.         <li><label><input type=“checkbox” id=“intabChekbx”>本页解析</label></li>
  303.         <li><label><input type=“checkbox” id=“realLinkChekbx”>爱奇艺正确选集</label></li>
  304.         <li><input type=“checkbox” id=“addApiChekBx”><label id=“addApiBtn”>增加接口</label></li>
  305.         <li><label id=“intabSettingBtn”>本页播放设置</label></li>
  306.       </ul></li>
  307.     </ul>
  308.   `;
  309.   document.body.appendChild(div);
  310.   q(“#addApiChekBx”).addEventListener(‘change’, addApiCheck, false);
  311.   // q(“#addApiChekBx”).addEventListener(‘click’, addApiCheck, false);
  312.   GMgetValue(‘userApisOn’,false)
  313.   .then((ag)=>{
  314.     userApisOn = ag;
  315.     q(“#addApiChekBx”).checked = userApisOn;
  316.     /*看看是否需要加载自定义的接口列表*/
  317.     if (userApisOn) {
  318.       GMgetValue(‘userApis’, “[{}]”).then((ag1)=>{
  319.         var userApis = JSON.parse(ag1), txt=;
  320.         for (var j in userApis) {
  321.           try {
  322.             if (userApis[j].link !== null) {
  323.               txt += `<li data-order=${j} data-url=“${userApis[j].link}”  data-intab=${userApis[j].intab} onclick=“window.open(this.dataset.url+location.href)”>${userApis[j].name}</li>`;
  324.             }
  325.           } catch (e) {/*console.log(e);*/}
  326.         }
  327.         q(‘ul.TM3.TM4’).innerHTML = txt + q(‘ul.TM3.TM4’).innerHTML;
  328.         selfDefine();
  329.       });
  330.     }
  331.   })
  332.   .then(()=>{
  333.     q(“#intabChekbx”).addEventListener(“click”, noNewTabCheck, false);
  334.     GMgetValue(‘replaceRaw’,false).then((ag)=>{
  335.       replaceRaw = ag;
  336.       q(“#intabChekbx”).checked = replaceRaw;
  337.       if (replaceRaw) {
  338.         noNewTabCheck();
  339.       }
  340.     });
  341.     q(“#realLinkChekbx”).addEventListener(“click”, rightEpsLinkCheck, false);
  342.     GMgetValue(‘episodes’,false).then((ag)=>{
  343.       episodes = ag;
  344.       q(“#realLinkChekbx”).checked = episodes;
  345.       if (episodes && window.location.href.indexOf(“iqiyi”) != -1) {
  346.         rightEpsLinkCheck();
  347.       }
  348.     });
  349.     q(“#addApiBtn”).addEventListener(‘click’, showAddApiPanel, false);
  350.     q(“#intabSettingBtn”).addEventListener(‘click’, intabSetting, false);
  351.   });
  352. /** 2017-10-24  自定义解析接口  */
  353. /*  显示增加接口的面板  */
  354.   function showAddApiPanel() {
  355.     if (q(‘#tMuserDefine’)) {
  356.       q(‘#tMuserDefine’).style.display = “block”;
  357.     } else {
  358.       alert(`(● ̄(エ) ̄●)づ\n\n未启用[增加接口]功能\n请把 ‘▣增加接口’→’☑增加接口’!`);
  359.     }
  360.   }
  361. /*  生成增加接口面板  */
  362.   function selfDefine() {
  363.     var a = makeEl(‘div’);
  364.     a.id = ‘tMuserDefine’;
  365.     a.setAttribute(‘class‘, ‘TMHYp’);
  366.     a.setAttribute(‘style’, ‘display:none’);
  367.     var txt = `
  368.       <button class=“TMHYClose” onclick=“q(‘#tMuserDefine’).style.display=’none’;”>?</button>
  369.       <li><span class=“TMHYspan120”>解析接口名称:</span><input type=“text” id=“tMname” class=“TMHYlti” placeholder=“显示的名称”></li>
  370.       <li><span class=“TMHYspan120”>解析接口地址:</span><input type=“text” id=“tMparseLink” class=“TMHYlti” placeholder=“接口需要包含 http 或者 https”></li>
  371.       <li><span class=“TMHYspan80”>本页解析:</span><label for=“tMintabckbx”><input type=“checkbox” id=“tMintabckbx”/>适合</label></li>
  372.       <li id=“tMbtnLi”>
  373.         <button id=“tMgo” onclick=“window.open(q(‘#tMparseLink’).value+location.href)”>测试</button>
  374.         <button id=“tMadd”>增加</button>
  375.         <button id=“tMsave”>保存</button>
  376.       </li>
  377.     `;
  378.     GMgetValue(‘userApis’, “[{}]”).then((ag)=>{
  379.       var ar = JSON.parse(ag),d;
  380.       try {
  381.         if (ar[0].name !== undefined) {
  382.           for (var i = 0; i < ar.length; i++) {
  383.             d = (ar[i].intab===“1”)?’checked’:;
  384.             txt += `<li><span class=“idelete” title=“删除” onclick=“document.getElementById(‘tMuserDefine’).removeChild(this.parentNode)”>✘</span><input class=“icheck” type=“checkbox” ${d}><span class=“iname”>${ar[i].name}</span><span class=“ilink”>${ar[i].link}</span></li>`;
  385.           }
  386.         }
  387.       } catch (e) {}
  388.       a.innerHTML = txt;
  389.       document.body.appendChild(a);
  390.       /*事件绑定*/
  391.       q(‘#tMsave’).addEventListener(‘click’, function() {
  392.         var newParseLinks = getarr();
  393.         GMsetValue(‘userApis’, JSON.stringify(newParseLinks));
  394.         console.log(newParseLinks);
  395.       }, false);
  396.       q(‘#tMadd’).addEventListener(‘click’, function() {
  397.         if (q(‘#tMname’).value || q(‘#tMparseLink’).value) {
  398.           var b = q(“#tMintabckbx”).checked?“1”:“0”;
  399.           var c = q(“#tMintabckbx”).checked?“checked”:“”;
  400.           var a = makeEl(‘li’);
  401.           a.innerHTML = `<span class=“idelete” title=“删除” onclick=“document.getElementById(‘tMuserDefine’).removeChild(this.parentNode)”>✘</span><input class=“icheck” type=“checkbox” ${c}><span class=“iname”>${q(‘#tMname’).value}:</span><span class=“ilink”>${q(‘#tMparseLink’).value}</span>`;
  402.           if (q(‘span[class=iname]’) === null) {
  403.             q(‘#tMuserDefine’).appendChild(a);
  404.             q(‘#tMname’).value = ;
  405.             q(‘#tMparseLink’).value = ;
  406.           } else {
  407.             q(‘#tMuserDefine’).insertBefore(a, q(‘span[class=iname]’).parentNode);
  408.             q(‘#tMname’).value = ;
  409.             q(‘#tMparseLink’).value = ;
  410.           }
  411.         }
  412.       }, false);
  413.     });
  414.   }
  415. /*  保存按钮执行函数:获取值并 await GM.setValue()  */
  416.   function getarr() {
  417.     var userUrl = qa(‘.ilink’);
  418.     var urlarr = [], tMname, tMparseLink, tMintabckbx;
  419.     tMname = q(‘#tMname’).value;
  420.     tMparseLink = q(‘#tMparseLink’).value;
  421.     tMintabckbx = q(‘#tMintabckbx’).checked?1:0;
  422.     if (tMname || tMparseLink) {
  423.       urlarr.push({ name: tMname, link: tMparseLink, intab:tMintabckbx });
  424.     }
  425.     for (var i = 0; i < userUrl.length; i++) {
  426.       var n, t, l;
  427.       t = userUrl[i].innerText;
  428.       n = userUrl[i].previousSibling.innerText;
  429.       l = userUrl[i].previousSibling.previousSibling.checked?’1′:’0′;
  430.       urlarr.push({ name: n, link: t,intab:l });
  431.     }
  432.     return urlarr;
  433.   }
  434. /** 2017-10-24  自定义解析接口 END */
  435. })();
  436. // 资源参考http://www.5ifxw.com/vip/
  437. // 资源参考http://live.gopartook.com/
  438. // 资源参考http://tv.dsqndh.com
  439. // 资源参考http://51.ruyo.net/p/3127.html
  440. //有效性未知||不能直接引用接口
  441. //http://www.yydy8.com/common/?url=
  442. //href=”http://mt2t.com/yun?url=
  443. //https://api.47ks.com/webcloud/?v=
  444. //http://www.guqiankun.com/tools/vipvideo
  445. //{name:”PU.tn”,url:”http://api.pu.tn/qq1/?url=”,title:”据说可以看优酷布袋游戏”,intab:0},
  446. // {name:”舞动秋天”,url:”http://qtzr.net/s/?qt=”,title:”qtzr.net”,intab:1},
  447. //过期接口
  448. //{name:”65YW”,url:”http://www.65yw.com/65yw/?vid=”,title:”新接口,稳定性未知”},
  449. //{name:”紫狐”,url:”http://yun.zihu.tv/play.html?url=”,title:”效果可能不稳定”},
  450. //{name:”云解析”,url:”http://www.efunfilm.com/yunparse/index.php?url=”,title:”新接口,稳定性未知”},
  451. //{name:”妹儿云”,url:”https://www.yymeier.com/api.php?url=”,title:”不稳定”}
  452. //{name:”V云[腾讯]”,url:”http://www.viyun.me/jiexi.php?url=”,title:”腾讯首选”},
  453. //{name:”1008影视”+YoukuIcon,url:”http://api.1008net.com/v.php?url=”,title:”据说可以看布袋游戏视频”,intab:1},
  454. //{name:”FLVSP[腾讯]”,url:”https://api.flvsp.com/?url=”,title:”支持腾讯”,intab:1},//解析源同上

[/wechat]

0

评论6

请先

  1. 我想要插件
    tyhgbj10-02
  2. 我想要插件
    ysyy198910-04
  3. 看看哈,希望楼主给力~
    ankarjan110-05
  4. 看着还行,用用看
    888xyz10-09
  5. 谢谢大神 看能用否
    mmx1210-12
  6. 我想要插件,谢谢分享
    aa19978910-12
赞助会员享海量VIP资源免费下载 自助开通
没有账号? 注册  忘记密码?