diff --git a/SrcJuying.js b/SrcJuying.js index 12492cb0..108631cb 100644 --- a/SrcJuying.js +++ b/SrcJuying.js @@ -1,4 +1,481 @@ //本代码仅用于个人学习,请勿用于其他作用,下载后请24小时内删除,代码虽然是公开学习的,但请尊重作者,应留下说明 +//接口一级 +function jiekouyiji() { + addListener("onClose", $.toString(() => { + clearMyVar('zsjiekou'); + clearMyVar('zsdatalist'); + })); + clearMyVar('SrcJy$back'); + setPageTitle('接口独立展示'); + var d = []; + var cfgfile = "hiker://files/rules/Src/Juying/config.json"; + var Juyingcfg=fetch(cfgfile); + if(Juyingcfg != ""){ + eval("var JYconfig=" + Juyingcfg+ ";"); + }else{ + var JYconfig= {}; + } + if(!storage0.getMyVar('zsjiekou')){ + var filepath = "hiker://files/rules/Src/Juying/jiekou.json"; + var datafile = fetch(filepath); + if(datafile != ""){ + eval("var datalist=" + datafile+ ";"); + }else{ + var datalist = []; + } + storage0.putMyVar('zsdatalist',datalist); + if(JYconfig.zsjiekou){ + var zslist = datalist.filter(item => { + return item.name==JYconfig.zsjiekou.api_name; + }) + }else{ + var zslist = []; + } + zslist = zslist.length>0?zslist:[{}]; + storage0.putMyVar('zsjiekou',zslist[0]); + } + let zsjiekou = storage0.getMyVar('zsjiekou',{}); + let api_name = zsjiekou.name||""; + let api_type = zsjiekou.type||""; + let api_url = zsjiekou.url||""; + let api_ua = zsjiekou.ua||"MOBILE_UA"; + api_ua = api_ua=="MOBILE_UA"?MOBILE_UA:api_ua=="PC_UA"?PC_UA:api_ua; + let xunmitimeout = JYconfig.xunmitimeout||5; + let selectgroup = JYconfig.zsjiekou?JYconfig.zsjiekou.selectgroup||"":""; + + if(api_name){setPageTitle(api_name);} + if(api_name&&api_type&&api_url){ + if (api_type=="v1") { + let date = new Date(); + let mm = date.getMonth()+1; + let dd = date.getDate(); + let key = (mm<10?"0"+mm:mm)+""+(dd<10?"0"+dd:dd); + var url = api_url + '/detail?&key='+key+'&vod_id='; + var typeurl = api_url + "/types"; + var listurl = api_url + '?key='+key+'&page='; + var lists = "html.data.list"; + } else if (api_type=="app") { + var url = api_url + 'video_detail?id='; + var typeurl = api_url + "nav"; + var listurl = api_url + 'video?tid=@type_id&pg='; + var lists = "html.list"; + } else if (api_type=="v2") { + var url = api_url + 'video_detail?id='; + var typeurl = api_url + "nav"; + var listurl = api_url + 'video?tid=@type_id&pg='; + var lists = "html.data"; + } else if (api_type=="iptv") { + var url = api_url + '?ac=detail&ids='; + var typeurl = api_url + "?ac=flitter"; + var listurl = api_url + '?ac=list&page='; + var lists = "html.data"; + } else if (api_type=="cms") { + var url = api_url + '?ac=videolist&ids='; + var typeurl = api_url + "?ac=list"; + var listurl = api_url + '?ac=videolist&pg='; + var lists = "html.list"; + } else if (api_type=="XBPQ") { + var jsondata = zsjiekou.data; + if(jsondata&&jsondata.ext){ + let apihtml = request(jsondata.ext, { headers: { 'User-Agent': api_ua }, timeout:xunmitimeout*1000 }); + try{ + eval("var jkdata = " + apihtml); + }catch(e){ + var jkdata = {}; + } + var url = jkdata["主页url"]; + var typeurl = jkdata["分类"]; + jkdata["分类url"] = /^http/.test(jkdata["分类url"])?jkdata["分类url"]:url + jkdata["分类url"]; + var listurl = jkdata["分类url"].replace(/class\/\{class\}|\{class\}|year\/\{year\}|\{year\}|area\/\{area\}|\{area\}|by\/\{by\}|\{by\}|\{act\}/g,''); + } + } else { + log('api类型错误') + } + } + + if(MY_PAGE==1){ + let datalist = storage0.getMyVar('zsdatalist',[]); + let grouplist = []; + datalist.forEach(item=>{ + let groupname = item.group||item.type; + if(/app|v1|v2|iptv|cms|XBPQ/.test(item.type)&&grouplist.indexOf(groupname)==-1&&item.group!="失败待处理"){ + grouplist.push(groupname); + } + }) + + datalist = datalist.filter(item => { + if(selectgroup&&grouplist.indexOf(selectgroup)>-1){ + return /app|v1|v2|iptv|cms|XBPQ/.test(item.type) && (item.group==selectgroup || !item.group&&item.type==selectgroup) && item.group!="失败待处理" + }else{ + return /app|v1|v2|iptv|cms|XBPQ/.test(item.type) && item.group!="失败待处理"; + } + }) + + for (let i = 0; i < 9; i++) { + d.push({ + col_type: "blank_block" + }) + } + + d.push({ + title: selectgroup&&grouplist.indexOf(selectgroup)>-1?'👉'+selectgroup:'🆙选择分组', + url: $(grouplist,2).select((cfgfile,JYconfig,selectgroup)=>{ + if(selectgroup!=input){ + JYconfig['zsjiekou'].selectgroup = input; + writeFile(cfgfile, JSON.stringify(JYconfig)); + refreshPage(true); + } + return "hiker://empty"; + },cfgfile,JYconfig,selectgroup), + col_type: "scroll_button" + }); + if(datalist.length>0){ + for(let i in datalist){ + if(api_url==datalist[i].url){ + var Srczsjiekousousuodata = []; + Srczsjiekousousuodata.push(datalist[i]); + } + let zsdata = {api_name:datalist[i].name}; + if(selectgroup){ + zsdata.selectgroup = selectgroup; + } + d.push({ + title: api_url==datalist[i].url?'““””' + datalist[i].name + '':datalist[i].name, + col_type: 'scroll_button', + url: $('#noLoading#').lazyRule((zsjiekou,cfgfile,JYconfig,jkdata) => { + clearMyVar('Srczsjiekou$type_id'); + JYconfig['zsjiekou'] = zsjiekou; + writeFile(cfgfile, JSON.stringify(JYconfig)); + storage0.putMyVar('zsjiekou',jkdata); + refreshPage(true); + return "hiker://empty"; + }, zsdata,cfgfile,JYconfig,datalist[i]), + extra: { + longClick: [{ + title: "删除接口", + js: $.toString((dataurl,filepath) => { + let datalist = storage0.getMyVar('zsdatalist',[]); + for(var i=0;i-1){ + let jktype = jkdata["分类"].split('#'); + var typeclass = jktype.map((type)=>{ + return { + "type_id": type.split('$')[1], + "type_pid": 0, + "type_name": type.split('$')[0] + } + }) + }else if(jkdata["分类"].indexOf('&')>-1&&jkdata["分类值"]){ + let jktypename = jkdata["分类"].split('&'); + let jktypeid = jkdata["分类值"].split('&'); + var typeclass = []; + for(let i in jktypeid){ + typeclass.push({ + "type_id": jktypeid[i], + "type_pid": 0, + "type_name": jktypename[i] + }) + } + } + }else{ + let gethtml = request(typeurl, { headers: { 'User-Agent': api_ua }, timeout:xunmitimeout*1000 }); + if (api_type=="v1") { + let typehtml = JSON.parse(gethtml); + let typelist = typehtml.data.list||typehtml.data.typelist; + var typeclass = typelist.map((list)=>{ + return { + "type_id": list.type_id, + "type_pid": list.type_pid, + "type_name": list.type_name + } + }) + } else if (/app|v2/.test(api_type)) { + let typehtml = JSON.parse(gethtml); + let typelist = typehtml.list||typehtml.data; + var typeclass = typelist.map((list)=>{ + return { + "type_id": list.type_id, + "type_pid": 0, + "type_name": list.type_name + } + }) + } else if (api_type=="iptv") { + let type_dict = { + comic: '动漫', + movie: '电影', + tvplay: '电视剧', + tvshow: '综艺', + movie_4k: '4k', + hanguoju: '韩剧', + oumeiju: '欧美剧', + tiyu: '体育' + }; + let typehtml = JSON.parse(gethtml); + var typeclass = typehtml.map((list)=>{ + if(type_dict[list]){ + return { + "type_id": list, + "type_pid": 0, + "type_name": type_dict[list] + } + } + }) + typeclass = typeclass.filter(n => n); + } else if (api_type=="cms") { + if(/<\?xml/.test(gethtml)){ + let typelist = pdfa(gethtml,'class&&ty'); + var typeclass = typelist.map((list)=>{ + return { + "type_id": String(xpath(list,`//ty/@id`)).trim(), + "type_pid": 0, + "type_name": String(xpath(list,`//ty/text()`)).trim() + } + }) + }else{ + let typehtml = JSON.parse(gethtml); + var typeclass = typehtml.class; + } + } else { + log('api类型错误') + } + } + }catch(e){ + log(api_name+' 接口访问异常,请更换接口!获取分类失败>'+e.message); + var typeclass = []; + } + + if(typeclass&&typeclass.length>0){ + let type_pids = []; + let type_ids = []; + for(let i in typeclass){ + if(type_pids.indexOf(typeclass[i].type_pid)==-1){type_pids.push(typeclass[i].type_pid)} + if(type_ids.indexOf(typeclass[i].type_id)==-1){type_ids.push(typeclass[i].type_id)} + } + if(type_pids.length > 0){ + type_pids.sort((a, b) => { + return a - b + }) + }; + if(/v2|app|XBPQ/.test(api_type)&&!getMyVar('Srczsjiekou$type_id')){ + putMyVar('Srczsjiekou$type_id',type_ids[0]); + } + for (var j in type_pids) { + for (var i in typeclass) { + if(typeclass[i].type_pid==type_pids[j]){ + d.push({ + title: getMyVar('Srczsjiekou$type_id')==typeclass[i].type_id?'““””' + typeclass[i].type_name + '':typeclass[i].type_name, + url: $('#noLoading#').lazyRule((type_id) => { + putMyVar('Srczsjiekou$type_id', type_id); + refreshPage(true); + return "hiker://empty"; + }, typeclass[i].type_id), + col_type: 'scroll_button' + }); + } + } + d.push({ + col_type: "blank_block" + }); + } + } + + var searchurl = $('').lazyRule((data) => { + if(data){ + return $('hiker://empty#noRecordHistory##noHistory#').rule((name,data) => { + require(config.依赖.match(/http(s)?:\/\/.*\//)[0].replace('/Ju/','/master/') + 'SrcJyXunmi.js'); + xunmi(name,data); + }, input,data); + }else{ + return 'toast://未找到接口数据' + } + },Srczsjiekousousuodata); + d.push({ + title: "🔍", + url: $.toString((searchurl) => { + return input + searchurl; + },searchurl), + desc: "搜你想看的...", + col_type: "input", + extra: { + titleVisible: true + } + }); + } + } + if(typeof(listurl) != "undefined"){ + try{ + if(api_type=="XBPQ"){ + MY_URL = listurl.replace('{catePg}',jkdata["起始页"]?MY_PAGE>jkdata["起始页"]?MY_PAGE:"":MY_PAGE).replace('{cateId}',getMyVar('Srczsjiekou$type_id','1')); + }else{ + MY_URL = listurl + MY_PAGE; + if(api_type=="v2"||api_type=="app"){ + MY_URL = MY_URL.replace('@type_id',getMyVar('Srczsjiekou$type_id','1')); + }else if(getMyVar('Srczsjiekou$type_id')){ + if (api_type=="v1") { + MY_URL = MY_URL + '&type=' + getMyVar('Srczsjiekou$type_id'); + } else if (api_type=="iptv") { + MY_URL = MY_URL + '&class=' + getMyVar('Srczsjiekou$type_id'); + } else { + MY_URL = MY_URL + '&t=' + getMyVar('Srczsjiekou$type_id'); + } + } + } + + try { + var gethtml = request(MY_URL, { headers: { 'User-Agent': api_ua }, timeout:xunmitimeout*1000 }); + if(api_type=="XBPQ"){ + jkdata["二次截取"] = jkdata["二次截取"] || (gethtml.indexOf(`