// 本代码仅用于个人学习,请勿用于其他作用,下载后请24小时内删除,代码虽然是公开学习的,但请尊重作者,应留下说明 // extData缓存 function extDataCache(jkdata) { if($.type(jkdata.ext)=='object'){ return jkdata.ext; }else if(/^hiker/.test(jkdata.url)){ if (jkdata.ext && /^http/.test(jkdata.ext)) { if(!fileExist(jkdata.url)){ let content = fetch(jkdata.ext, {timeout:3000}); if (content) { writeFile(jkdata.url, content); } } } if(fileExist(jkdata.url)){ eval("let extdata = " + fetch(jkdata.url)); return extdata; }else{ toast('数据文件获取失败'); return {}; } } toast('此源接口数据有异常'); return {}; } //截取中间字符 function getBetweenStr(str, key) { if(!str || !key){ return str; } const prefix = key.split('&&')[0]; const suffix = key.split('&&')[1]; const regex = new RegExp(prefix + '(.*?)' + suffix, 's'); // 's' 使 . 匹配换行符 const match = str.match(regex); return match ? match[1].replace(/<\/?.+?\/?>/g,'') : ''; } // 获取一级数据 function getYiData(jkdata) { let d = []; let api_name = jkdata.name||""; let api_type = jkdata.type||""; let api_url = jkdata.url||""; let api_ua = jkdata.ua||"MOBILE_UA"; api_ua = api_ua=="MOBILE_UA"?MOBILE_UA:api_ua=="PC_UA"?PC_UA:api_ua; let vodurlhead,classurl,listurl,listnode,extdata; 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); vodurlhead = api_url + '/detail?&key='+key+'&vod_id='; classurl = api_url + "/types"; listurl = api_url + '?key='+key+'&page='; listnode = "html.data.list"; } else if (api_type=="app") { vodurlhead = api_url + 'video_detail?id='; classurl = api_url + "nav"; listurl = api_url + 'video?tid=@type_id&pg='; listnode = "html.list"; } else if (api_type=="v2") { vodurlhead = api_url + 'video_detail?id='; classurl = api_url + "nav"; listurl = api_url + 'video?tid=@type_id&pg='; listnode = "html.data"; } else if (api_type=="iptv") { vodurlhead = api_url + '?ac=detail&ids='; classurl = api_url + "?ac=flitter"; listurl = api_url + '?ac=list&page='; listnode = "html.data"; } else if (api_type=="cms") { vodurlhead = api_url + '?ac=videolist&ids='; classurl = api_url + "?ac=list"; listurl = api_url + '?ac=videolist&pg='; listnode = "html.list"; } else if (api_type=="XBPQ") { extdata = extDataCache(jkdata) if($.type(extdata)=='object'){ let host = extdata["主页url"] || ''; classurl = extdata["分类"]; listurl = /^http/.test(extdata["分类url"])?extdata["分类url"].split(';;')[0].split('[')[0]:host + extdata["分类url"].split(';;')[0].split('[')[0]; vodurlhead = getHome(listurl); } } else { log('api类型错误') } } let lists = []; //影片列表 let fold = getMyVar('SrcJu_dianbo$fold', "0");//是否展开小分类筛选 let cate_id = getMyVar('SrcJu_dianbo$分类', ''); let type_id = getMyVar('SrcJu_dianbo$类型', ''); let area_id = getMyVar('SrcJu_dianbo$地区', ''); let year_id = getMyVar('SrcJu_dianbo$年份', ''); let sort_id = getMyVar('SrcJu_dianbo$排序', ''); if(MY_PAGE==1){ if(classurl){ let 推荐 = []; let 分类 = []; let 类型 = []; let 地区 = []; let 年份 = []; let 排序 = []; let 筛选 = 0; const Color = "#3399cc"; let classCache = storage0.getMyVar('SrcJu_dianbo$classCache'); if(classCache){ 推荐 = classCache.推荐; 分类 = classCache.分类; 类型 = classCache.类型; 地区 = classCache.地区; 年份 = classCache.年份; 排序 = classCache.排序; 筛选 = classCache.筛选; }else{ try{ if(api_type=="XBPQ"){ if(extdata["分类"].indexOf('$')>-1){ 分类 = extdata["分类"].split('#'); let ss = extdata["筛选"]; if(ss){ 分类.forEach(it=>{ let id = it.split('$')[1]; let sss = ss[id] || []; sss.forEach(itit=>{ let itvalue = itit.value; let values = []; itvalue.forEach(value=>{ values.push(value.n+'$'+value.v) }) if(itit.key=='cateId' || itit.key=='class'){ 类型.push(values.join('#')); }else if(itit.key=='area'){ 地区.push(values.join('#')); }else if(itit.key=='year'){ 年份.push(values.join('#')); }else if(itit.key=='by'){ 排序.push(values.join('#')); } }) }) 筛选 = 1; } }else if(extdata["分类"].indexOf('&')>-1&&extdata["分类值"]){ let typenames = extdata["分类"].split('&'); let typeids = extdata["分类值"].split('&'); for(let i in typeids){ 分类.push(typenames[i]+'$'+typeids[i]); } } }else{ let gethtml = request(classurl, { headers: { 'User-Agent': api_ua }, timeout:5000 }); if (api_type=="v1") { let typehtml = JSON.parse(gethtml); let typelist = typehtml.data.list||typehtml.data.typelist; typelist.map((it)=>{ 分类.push(it.type_name+'$'+it.type_id); }) } else if (/app|v2/.test(api_type)) { let typehtml = JSON.parse(gethtml); let typelist = typehtml.list||typehtml.data; typelist.forEach(it=>{ 分类.push(it.type_name+'$'+it.type_id); }) } else if (api_type=="iptv") { let type_dict = { comic: '动漫', movie: '电影', tvplay: '电视剧', tvshow: '综艺', movie_4k: '4k', hanguoju: '韩剧', oumeiju: '欧美剧', tiyu: '体育' }; let typelist = JSON.parse(gethtml); typelist.forEach((it)=>{ if(type_dict[it]){ 分类.push(type_dict[it]+'$'+it); } }) } else if (api_type=="cms") { if(/<\?xml/.test(gethtml)){ let typelist = pdfa(gethtml,'class&&ty'); typelist.forEach((it)=>{ 分类.push(String(xpath(it,`//ty/text()`)).trim()+'$'+String(xpath(it,`//ty/@id`)).trim()); }) }else{ let typehtml = JSON.parse(gethtml); let typelist = typehtml.class; if(jkdata.categories){ for(var i=0;i{ if(it.type_pid==0){ 分类.push(it.type_name+'$'+it.type_id); let values = []; typelist.forEach((itit)=>{ if(itit.type_pid==it.type_id){ values.push(itit.type_name+'$'+itit.type_id); } }) 类型.push(values.join('#')); } }) } }else { log('api类型错误') } } }catch(e){ log(api_name+'>访问异常,请更换源接口!获取分类失败>'+e.message + " 错误行#" + e.lineNumber); } storage0.putMyVar('SrcJu_dianbo$classCache', {分类:分类,类型:类型,地区:地区,年份:年份,排序:排序,筛选:筛选,推荐:推荐}); } if(分类.length>0){ if(筛选){ d.push({ title: fold === '1' ? '““””' : '““””', url: $('#noLoading#').lazyRule((fold) => { putMyVar('SrcJu_dianbo$fold', fold === '1' ? '0' : '1'); refreshPage(false); return "hiker://empty"; }, fold), col_type: 'scroll_button', }) } cate_id = getMyVar('SrcJu_dianbo$分类', 推荐.length>0?'tj':分类[0].split('$')[1]); putMyVar('SrcJu_dianbo$分类', cate_id); if(推荐.length>0){ if(cate_id == 'tj'){ lists = 推荐;//当前分类为推荐,取推荐列表 } d.push({ title: cate_id=='tj'?'““””' + '推荐' + '':'推荐', url: $('#noLoading#').lazyRule(() => { putMyVar('SrcJu_dianbo$分类', 'tj'); clearMyVar('SrcJu_dianbo$类型'); refreshPage(true); return "hiker://empty"; }), col_type: 'scroll_button' }); } let index = 0; //分类数组索引 分类.forEach((it,i)=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; if(cate_id==itid){ index = i; } d.push({ title: cate_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$分类', itid); clearMyVar('SrcJu_dianbo$类型');//大分类切换时清除小分类 refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) d.push({ col_type: "blank_block" }); type_id = 筛选?type_id:getMyVar('SrcJu_dianbo$类型', (api_type=='cms'&&类型.length>0) ? 类型[index].split('#')[0].split('$')[1] : cate_id); putMyVar('SrcJu_dianbo$类型', type_id); if(fold=='1' || (api_type=='cms' && cate_id!='tj')){ if(类型.length>0 && 类型[index]){ 类型[index].split('#').forEach(it=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; d.push({ title: type_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$类型', itid); refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) d.push({ col_type: "blank_block" }); } if(地区.length>0 && 地区[index]){ 地区[index].split('#').forEach(it=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; d.push({ title: area_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$地区', itid); refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) d.push({ col_type: "blank_block" }); } if(年份.length>0 && 年份[index]){ 年份[index].split('#').forEach(it=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; d.push({ title: year_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$年份', itid); refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) d.push({ col_type: "blank_block" }); } if(排序.length>0 && 排序[index]){ 排序[index].split('#').forEach(it=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; d.push({ title: sort_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$排序', itid); refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) d.push({ col_type: "blank_block" }); } } let searchurl = $('').lazyRule((jkdata) => { if(jkdata){ /* return $('hiker://empty#noRecordHistory##noHistory#').rule((name,data) => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJyData.js'); let ssdata = getSsData(name,data); setResult(ssdata); }, input, data); */ storage0.putMyVar('搜索临时搜索数据', jkdata); return 'hiker://search?s='+input+' '+'&rule='+MY_RULE.title; }else{ return 'toast://未找到接口数据' } },jkdata); d.push({ title: "搜索", url: $.toString((searchurl) => { return input + searchurl; },searchurl), desc: "搜你想看的...", col_type: "input", extra: { titleVisible: true } }); } } } if(listurl && lists.length==0){ try{ if(api_type=="XBPQ"){ MY_URL = listurl.replace('/lang/{lang}',''); if(!type_id){ MY_URL = MY_URL.replace('/class/{class}',''); } if(!area_id){ MY_URL = MY_URL.replace('/area/{area}',''); } if(!year_id){ MY_URL = MY_URL.replace('/year/{year}',''); } if(!sort_id){ MY_URL = MY_URL.replace('/by/{by}',''); } MY_URL = MY_URL.replace('{catePg}',extdata["起始页"]?MY_PAGE>extdata["起始页"]?MY_PAGE:extdata["起始页"]:MY_PAGE).replace('{year}', year_id).replace('{area}', area_id).replace('{by}', sort_id).replace('{class}', type_id).replace('{cateId}', cate_id); api_ua = extdata['请求头'] || api_ua; }else{ MY_URL = listurl + MY_PAGE; if(api_type=="v2"||api_type=="app"){ MY_URL = MY_URL.replace('@type_id',type_id); }else if (api_type=="v1") { MY_URL = MY_URL + '&type=' + type_id; } else if (api_type=="iptv") { MY_URL = MY_URL + '&class=' + type_id; } else { MY_URL = MY_URL + '&t=' + type_id; } } let gethtml = request(MY_URL, { headers: { 'User-Agent': api_ua }, timeout:5000 }); if(api_type=="XBPQ"){ extdata["二次截取"] = extdata["二次截取"] || (gethtml.indexOf(`