From 7d8ef88fa9d82b1366a828facdf239dcd5da0940 Mon Sep 17 00:00:00 2001 From: src48597962 <48597962@qq.com> Date: Sat, 15 Jun 2024 19:54:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'SrcParseS.js'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SrcParseS.js | 213 ++++++++++++++++++++++++--------------------------- 1 file changed, 98 insertions(+), 115 deletions(-) diff --git a/SrcParseS.js b/SrcParseS.js index c5abb71f..761223d3 100644 --- a/SrcParseS.js +++ b/SrcParseS.js @@ -1,4 +1,48 @@ //本代码仅用于个人学习,请勿用于其他作用,下载后请24小时内删除,代码虽然是公开学习的,但请尊重作者,应留下说明 +let recordfile = "hiker://files/rules/Src/Juying2/parse.json";//取解析设置、上次成功、手工屏蔽的 +let record = fetch(recordfile); +let parseRecord = {}; +if(record!=""){ + try{ + eval("parseRecord =" + record + ";"); + }catch(e){ + parseRecord = {}; + } +} + +let excludeurl = parseRecord.excludeurl||[];//屏蔽的播放地址 +let excludeparse = parseRecord.excludeparse||[];//屏蔽的解析 +let lastparse = parseRecord.lastparse?(parseRecord.lastparse[from] || ""):"";//对应的片源上次解析 +let jxconfig = {printlog: parseRecord['printlog']||0, cachem3u8: parseRecord['cachem3u8']||1, parsemode: parseRecord['parsemode']||1, xiutannh: parseRecord['xiutannh']||'web', mulnum: 2}; +if(!jxconfig.printlog){ + log = function (msg) { + //未开启打印解析日志>不打印 + } +} +let exclude = /\/404\.m3u8|\/xiajia\.mp4|\/余额不足\.m3u8/;//设置排除地址 +let contain = /\.mp4|\.m3u8|\.flv|\.avi|\.mpeg|\.wmv|\.mov|\.rmvb|\.dat|qqBFdownload|mime=video%2F|video_mp4|\.ts\?|TG@UosVod|video\/tos\/cn\/tos|m3u8\?pt=m3u8/;//设置符合条件的正确地址 +let needparse = /suoyo\.cc|fen\.laodi|ruifenglb/;//设置需要解析的视频地址 + +//数组去重 +function uniq(array) { + var temp = []; //一个新的临时数组 + for (var i = 0; i < array.length; i++) { + if (temp.indexOf(array[i]) == -1) { + temp.push(array[i]); + } + } + return temp; +} +//去除指定数组元素 +function removeByValue(arr, val) { + for(var i = 0; i < arr.length; i++) { + if(arr[i] == val) { + arr.splice(i,1); + break; + } + } +} + var SrcParseS = { formatUrl: function (url, i) { try { @@ -153,15 +197,6 @@ var SrcParseS = { for (var i = 0; i < x5jxlist.length; i++) { a.push(x5jxlist[i]); } - function uniq(array) { - var temp = []; //一个新的临时数组 - for (var i = 0; i < array.length; i++) { - if (temp.indexOf(array[i]) == -1) { - temp.push(array[i]); - } - } - return temp; - } a = uniq(a);//去重 */ a = x5jxlist; @@ -172,40 +207,31 @@ var SrcParseS = { writeFile(libsjxhtml, libsjxjs); return this.嗅探(getPath(libsjxhtml) + '?url=' + vipUrl, excludeurl); }, - 聚影: function (vipUrl, parseObj) { + 聚影: function (vipUrl, dataObj) { //聚影采用新的、独立的解析逻辑 - let cfgfile = "hiker://files/rules/Src/Juying2/config.json"; - let Juconfig = {}; - let Jucfg = fetch(cfgfile); - if(Jucfg != ""){ - eval("Juconfig=" + Jucfg+ ";"); - } - let jxconfig = Juconfig['jiexi'] || {log: 0, cachem3u8: 1, video: 1, xiutannh: 'web', mulnum: 2}; - let printlog = jxconfig.log||0; - - let exclude = /\/404\.m3u8|\/xiajia\.mp4|\/余额不足\.m3u8/;//设置排除地址 - let contain = /\.mp4|\.m3u8|\.flv|\.avi|\.mpeg|\.wmv|\.mov|\.rmvb|\.dat|qqBFdownload|mime=video%2F|video_mp4|\.ts\?|TG@UosVod|video\/tos\/cn\/tos|m3u8\?pt=m3u8/;//设置符合条件的正确地址 - let needparse = /suoyo\.cc|fen\.laodi|ruifenglb/;//设置需要解析的视频地址 + parseRecord['from'] = parseRecord['from']||[]; + if(parseRecord['from'].indexOf(from)==-1){parseRecord['from'].push(from)}//记录到片源标识组 + let isVip = 0; - if(printlog==1){log("影片地址:"+vipUrl)}; + log("影片地址:"+vipUrl); if (/magnet|torrent/.test(vipUrl)) { - if(printlog==1){log("磁力/BT视频地址,由海阔解析")}; + log("磁力/BT视频地址,由海阔解析"); return vipUrl; }else if(contain.test(vipUrl)&&!exclude.test(vipUrl)&&!needparse.test(vipUrl)){ - if(printlog==1){log("直链视频地址,直接播放")}; + log("直链视频地址,直接播放"); if(vipUrl.indexOf('app.grelighting.cn')>-1){vipUrl = vipUrl.replace('app.','ht.')} return vipUrl + '#isVideo=true#'; }else if (vipUrl.indexOf('sa.sogou') != -1) { - if(printlog==1){log("优看视频,直接明码解析")}; + log("优看视频,直接明码解析"); return unescape(request(vipUrl).match(/"url":"([^"]*)"/)[1].replace(/\\u/g, "%u")); }else if (/\/share\//.test(vipUrl)) { - if(printlog==1){log("cms资源网云播地址,嗅探播放")}; + log("cms资源网云播地址,嗅探播放"); return this.嗅探(vipUrl); }else if (/douyin\.com/.test(vipUrl)) { - if(printlog==1){log("抖音视频,偿试嗅探")}; + log("抖音视频,偿试嗅探"); return this.嗅探(vipUrl); }else if(!needparse.test(vipUrl)){ - if(printlog==1){log("网页嗅探播放")}; + log("网页嗅探播放"); return this.嗅探(vipUrl); } if(vipUrl.match(/youku|iqiyi|ixigua|migu|sohu|pptv|le\.|cctv|1905|mgtv|qq\.com/)){ @@ -215,10 +241,10 @@ var SrcParseS = { isVip = 1; } - parseObj = parseObj || {}; + dataObj = dataObj || {}; let from; - if(parseObj.flag){ - from = parseObj.flag; + if(dataObj.flag){ + from = dataObj.flag; }else{ try{ if(vipUrl.indexOf('-yanaifei.html') != -1){ @@ -237,7 +263,7 @@ var SrcParseS = { from = 'other'; } } - if(printlog==1){log("片源标识:"+from+",需要解析")}; + log("片源标识:"+from+",需要解析"); let parsemode = jxconfig.mode || 1; @@ -248,31 +274,12 @@ var SrcParseS = { let jxfile = "hiker://files/rules/Src/Juying2/jiexi.json";//解析存放文件 let parselist = [];//待进线程执行的解析列表 let wparselist = [];//web解析临时存放列表 - let jxList= [];//读取私有解析列表 + let jxList= [];//读取解析列表 - //解析记录:上次成功、手工屏蔽的 - let recordfile = "hiker://files/rules/Src/Juying2/parse.json"; - let record = fetch(recordfile); - let parseRecord = {}; - if(record!=""){ - try{ - eval("parseRecord =" + record + ";"); - }catch(e){ - parseRecord = {}; - } - } - parseRecord['from'] = parseRecord['from']||[]; - if(parseRecord['from'].indexOf(from)==-1){parseRecord['from'].push(from)}//记录到片源标识组 - let excludeurl = parseRecord.excludeurl||[];//屏蔽的播放地址 - let excludeparse = parseRecord.excludeparse||[];//屏蔽的解析 - let lastparse = parseRecord.lastparse?(parseRecord.lastparse[from] || ""):"";//对应的片源上次解析 - - let parseStr = parseObj.parse; + let parseStr = dataObj.parse; if(parseStr){ //指定解析用于测试 - let arr = {type:'test',name:parseStr.name,parse:parseStr.parse,sort:0}; - if(parseStr.header){arr['header'] = parseStr.header} - parselist.push(arr); + parselist.push(parseStr); }else{ if(parsemode==1){ @@ -286,7 +293,7 @@ var SrcParseS = { parselist.push({type:'appz',name:'appz'+i,parse:appParselist[i],sort:0}); } } - if(printlog==1){log("接口自带的解析数:"+parselist.length)}; + log("接口自带的解析数:"+parselist.length); } } @@ -334,7 +341,7 @@ var SrcParseS = { } } } - if(printlog==1){log("私有的可用解析数:" + myjxnum)}; + log("私有的可用解析数:" + myjxnum); } } //log(parselist) @@ -408,7 +415,7 @@ var SrcParseS = { Namelist.push(parselist[s].name); i=s; } - if(printlog==1){log("本轮排队解析:"+Namelist)}; + log("本轮排队解析:"+Namelist); let Urlparses = UrlList.map((list)=>{ @@ -444,7 +451,7 @@ var SrcParseS = { if (contain.test(beurl)&&!exclude.test(beurl)&&excludeurl.indexOf(beurl)==-1) { sccess = sccess + 1; if(sccess>=mulnum){ - if(printlog==1){log("线程中止,已捕获视频")}; + log("线程中止,已捕获视频"); return "break"; } }else{ @@ -464,32 +471,28 @@ var SrcParseS = { if(playurl==""){playurl = beurls[k];} if(beparses[k].type=="test"){ //当前为测试 - if(printlog==1){log(beparses[k].name+'>测试成功>'+beurls[k])}; + log(beparses[k].name+'>测试成功>'+beurls[k]); }else{ //记录除断插线程以外最快的,做为下次优先 - if(printlog==1){ - if(beparses[k].name==lastparse){ - log(beparses[k].name+'>优先上次解析成功>'+beurls[k]); - }else{ - log(beparses[k].name+'>解析成功>'+beurls[k]+',记录为片源'+from+'的优先'); - } + if(beparses[k].name==lastparse){ + log(beparses[k].name+'>优先上次解析成功>'+beurls[k]); + }else{ + log(beparses[k].name+'>解析成功>'+beurls[k]+',记录为片源'+from+'的优先'); + lastparse = beparses[k].name; } - lastparse = beparses[k].name; - - - //私有解析成功的,提升一下排序 - for(var j=0;j0){ - jxList[j].sort = jxList[j].sort - 1; - myJXchange = 1; - } - break; + //私有解析成功的,提升一下排序 + for(var j=0;j0){ + jxList[j].sort = jxList[j].sort - 1; + myJXchange = 1; } + break; } + } } @@ -543,19 +546,18 @@ var SrcParseS = { for(var j=0;j5 && jxList[j].stopfrom.indexOf(from)==-1){ jxList[j].stopfrom[jxList[j].stopfrom.length] = from; - if(printlog==1){log(jxList[j].name+'>解析失败大于5次,排除片源'+from)}; + log(jxList[j].name+'>解析失败大于5次,排除片源'+from); } + */ myJXchange = 1; break; } @@ -588,7 +590,7 @@ var SrcParseS = { //播放 if(playurl){ if(urls.length>1){ - if(printlog==1){log('解析完成,进入播放2')}; + log('解析完成,进入播放2'); return JSON.stringify({ urls: urls, names: names, @@ -596,7 +598,7 @@ var SrcParseS = { danmu: danmu || dm }); }else{ - if(printlog==1){log('解析完成,进入播放1')}; + log('解析完成,进入播放1'); if(dm && getItem('dmRoute', '0')=="1"){ let MulUrl = this.formatMulUrl(playurl, 0); urls = []; @@ -625,7 +627,7 @@ var SrcParseS = { } if(JYconfig.superweb==1&x5jxlist.length>0){ - if(printlog==1){log('开启播放器超级嗅探模式')} + log('开启播放器超级嗅探模式'); let weburls = x5jxlist.map(item => "video://" + item +vipUrl); return JSON.stringify({ urls: weburls, @@ -635,7 +637,7 @@ var SrcParseS = { }else if(x5jxlist.length>0){ return this.聚嗅(vipUrl, x5jxlist,excludeurl); }else{ - if(printlog==1){log('没有解析,跳转原网页')} + log('没有解析,跳转原网页'); return vipUrl; } } @@ -655,7 +657,7 @@ var SrcParseS = { } return {url:url, header:header}; } catch (e) { - if(config.printlog==1){log("√错误:"+e.message)}; + log("√错误:"+e.message); return url; } }, @@ -737,10 +739,10 @@ var SrcParseS = { }else if(gethtml.indexOf('url: "') != -1){ rurl = gethtml.match(/url: "(.*?)"/)[1]; }else{ - //if(printlog==1){log('将日志提交给作者,帮助完善解析逻辑>>>'+gethtml)}; + log('将日志提交给作者,帮助完善解析逻辑>>>'+gethtml); } } catch (e) { - //if(printlog==1){log('明码获取错误:'+e.message)}; + log('明码获取错误:'+e.message); } //let rurl = JSON.parse(html).url || JSON.parse(html).data; return rurl; @@ -816,7 +818,7 @@ var SrcParseS = { //log("解析有错误"+e.message) } if(/^toast/.test(rurl)){ - if(printlog==1){log(obj.ulist.name+'>提示:'+rurl.replace('toast://',''))}; + log(obj.ulist.name+'>提示:'+rurl.replace('toast://','')); rurl = ""; }else if(obj.parsemode==1 && /^http/.test(rurl) && obj.testurl(rurl,obj.ulist.name)==0){ rurl = ""; @@ -833,7 +835,7 @@ var SrcParseS = { getjson = JSON.parse(request(obj.ulist.parse+obj.vipUrl,taskheader)); }catch(e){ getjson = {}; - if(printlog==1){log(obj.ulist.name+'>解析地址访问失败')}; + log(obj.ulist.name+'>解析地址访问失败'); } //log(getjson); if (getjson.body&&getjson.statusCode==200){ @@ -860,7 +862,7 @@ var SrcParseS = { if(!/404 /.test(gethtml)&&obj.ulist.parse.indexOf('key=')==-1&&isjson==0){ if(x5jxlist.length<5){ x5jxlist.push(obj.ulist.parse); - if(printlog==1){log(obj.ulist.name + '>加入x5嗅探列表');} + log(obj.ulist.name + '>加入x5嗅探列表'); x5namelist.push(obj.ulist.name); } x5 = 1; @@ -881,22 +883,3 @@ var SrcParseS = { } } -//数组去重 -function uniq(array) { - var temp = []; //一个新的临时数组 - for (var i = 0; i < array.length; i++) { - if (temp.indexOf(array[i]) == -1) { - temp.push(array[i]); - } - } - return temp; -} -//去除指定数组元素 -function removeByValue(arr, val) { - for(var i = 0; i < arr.length; i++) { - if(arr[i] == val) { - arr.splice(i,1); - break; - } - } -}