// 本代码仅用于个人学习,请勿用于其他作用,下载后请24小时内删除,代码虽然是公开学习的,但请尊重作者,应留下说明 // 获取一级数据 function getYiData(jkdata) { let fllists; let vodlists; let error ={}; 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 headers = { 'User-Agent': 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 = "json.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 = "json.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 = "json.data"; } else if (api_type=="iptv") { vodurlhead = api_url + '?ac=detail&ids='; classurl = api_url + "?ac=flitter"; listurl = api_url + '?ac=list&page='; listnode = "json.data"; } else if (api_type=="cms") { vodurlhead = api_url + '?ac=videolist&ids='; classurl = api_url + "?ac=list"; listurl = api_url + '?ac=videolist&pg='; listnode = "json.list"; } else if (api_type=="XBPQ") { extdata = extDataCache(jkdata) if($.type(extdata)=='object'){ let host = extdata["主页url"] || ''; classurl = extdata["分类"]; extdata["分类url"] = extdata["分类url"]?extdata["分类url"].split(';;')[0].split('[')[0]:""; listurl = extdata["分类url"]?/^http/.test(extdata["分类url"])?extdata["分类url"]:host + extdata["分类url"]:""; vodurlhead = getHome(listurl); } } else if (api_type=="drpy") { eval(fetchCache(drpymuban,9999).replace('export default {muban, getMubans};','')); eval(fetch(jkdata.url)); var print = log; var fypage = MY_PAGE; var stringify = JSON.stringify; if(rule['模板']){ extdata = Object.assign(muban[rule['模板']], rule); }else{ extdata = rule; } if(extdata){ let host = extdata["host"] || ''; headers = extdata["headers"] || headers; if(headers['User-Agent']){ headers['User-Agent'] = headers['User-Agent']=='PC_UA'?PC_UA:MOBILE_UA; } headers['referer'] = host; var fetch_params = {headers:headers}; classurl = extdata["homeUrl"]? host + extdata["homeUrl"]: host; listurl = extdata["url"] || ""; if(listurl.includes('[')){ if(MY_PAGE==1){ listurl = listurl.split('[')[1].split(']')[0]; }else{ listurl = listurl.split('[')[0]; } } listurl = (/^http/.test(listurl)?"":host) + listurl; if(extdata.filter_url){ if(!/fyfilter/.test(listurl)){ if(!listurl.endsWith('&')&&!extdata.filter_url.startsWith('&')){ listurl+='&' } listurl+=extdata.filter_url; }else{ listurl = listurl.replace('fyfilter', extdata.filter_url); } } vodurlhead = extdata["detailUrl"]?/^http/.test(extdata["detailUrl"])?extdata["detailUrl"]:getHome(listurl)+extdata["detailUrl"]:getHome(listurl); } } else { log(api_type+'>api类型错误'); } } //分类变量 let fold = getMyVar('SrcJu_dianbo$fold', "0");//是否展开小分类筛选 let cate_id = ''; let type_id = ''; let fl = storage0.getMyVar('SrcJu_dianbo$flCache') || {}; //一级第1页生成分类数据 if(MY_PAGE==1){ if(classurl){ MY_URL = classurl; let 推荐 = []; let 分类 = []; let 筛选; let cate_exclude = ['主页','求片/留言']; const Color = "#3399cc"; let classCache = storage0.getMyVar('SrcJu_dianbo$classCache'); if(classCache){ 推荐 = classCache.推荐; 分类 = classCache.分类; 筛选 = classCache.筛选; }else{ try{ if(api_type=="drpy"){ if(extdata["class_name"] && extdata["class_url"]){ let cnames = extdata["class_name"].split('&'); let curls = extdata["class_url"].split('&'); 分类 = cnames.map((it,i) => { return it+'$'+curls[i]; }); }else if(extdata["class_parse"]){ let cparses = extdata["class_parse"].split(';'); if(extdata["cate_exclude"]){ cate_exclude = cate_exclude.concat(extdata["cate_exclude"].split('|')); } let chtml = request(extdata["host"], {headers:headers, timeout:8000}); let fls = _pdfa(chtml, cparses[0]); fls.forEach(it=>{ try{ let typename = _pdfh(it, cparses[1]); let typeurl = _pdfh(it, cparses[2]); if(cparses.length==4 && cparses[3]){ typeurl = typeurl.match(cparses[3])[1]; } if(cate_exclude.indexOf(typename)==-1){ 分类.push(typename+'$'+typeurl); } }catch(e){ //log(e.message); } }) } 筛选 = extdata["filter"]; }else if(api_type=="XBPQ"){ if(extdata["分类"].indexOf('$')>-1){ 分类 = extdata["分类"].split('#'); 筛选 = extdata["筛选"]; }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:8000 }); 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 value = []; typelist.forEach((itit)=>{ if(itit.type_pid==it.type_id){ values.push({n:itit.type_name,v:itit.type_id}); } }) if(value.length>0){ 筛选 = 筛选 || {}; 筛选[it.type_id] = {"key":"cateId","name":it.type_name,"value":value}; } } }) } } } }catch(e){ error.fl = '获取分类数据异常>'+e.message + ' 错误行#' + e.lineNumber; log(api_name+'>获取分类数据异常>'+e.message + " 错误行#" + e.lineNumber); } if(分类.length>0){ storage0.putMyVar('SrcJu_dianbo$classCache', {分类:分类,筛选:筛选,推荐:推荐}); } } if(分类.length>0){ fllists = []; try{ if(筛选 && api_type!='cms'){ fllists.push({ title: fold === '1' ? '““””' : '““””', url: $('#noLoading#').lazyRule((fold) => { putMyVar('SrcJu_dianbo$fold', fold === '1' ? '0' : '1'); clearMyVar('SrcJu_dianbo$flCache'); 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'){ vodlists = 推荐;//当前分类为推荐,取推荐列表 } fllists.push({ title: cate_id=='tj'?'““””' + '推荐' + '':'推荐', url: $('#noLoading#').lazyRule(() => { putMyVar('SrcJu_dianbo$分类', 'tj'); refreshPage(true); return "hiker://empty"; }), col_type: 'scroll_button' }); } 分类.forEach((it,i)=>{ let itname = it.split('$')[0]; let itid = it.split('$')[1]; fllists.push({ title: cate_id==itid?'““””' + itname + '':itname, url: $('#noLoading#').lazyRule((itid) => { putMyVar('SrcJu_dianbo$分类', itid); clearMyVar('SrcJu_dianbo$flCache'); refreshPage(true); return "hiker://empty"; }, itid), col_type: 'scroll_button' }); }) fllists.push({ col_type: "blank_block" }); if(fold=='1' || api_type=='cms'){ Object.entries(筛选).forEach(([key, value]) => { //console.log(`Key: ${key}, Value: ${value}`); if(key==cate_id){ value.forEach(it=>{ if(it.value.length>0){ fl[it.key] = fl[it.key] || it.value[0].v; it.value.forEach((itit)=>{ fllists.push({ title: fl[it.key]==itit.v?'““””' + itit.n + '':itit.n, url: $('#noLoading#').lazyRule((flkey,itid) => { let fl = storage0.getMyVar('SrcJu_dianbo$flCache') || {}; fl[flkey] = itid; storage0.putMyVar('SrcJu_dianbo$flCache', fl); refreshPage(true); return "hiker://empty"; }, it.key, itit.v), col_type: 'scroll_button' }); }) fllists.push({ col_type: "blank_block" }); } }) } }); } }catch(e){ log(api_name+'>生成分类数据异常>'+e.message + " 错误行#" + e.lineNumber); } } } } if(listurl && !vodlists && !error.fl){ vodlists = []; try{ fl.cateId = fl.cateId || cate_id; //拼接生成分类页url链接 if(api_type=="drpy"){ if(extdata['filter_def']){ let filter_def = extdata['filter_def']; let filter_def_obj = filter_def[fl.cateId] || {}; Object.entries(filter_def_obj).forEach(([key, value]) => { fl[key] = value; }) } listurl = listurl.replace('((fypage-1)*21)',((MY_PAGE-1)*21)).replace('((fypage-1)*15)',((MY_PAGE-1)*15)); listurl = listurl.replace('{{fl}','{}').replace('fypage', MY_PAGE).replace(/ or /g, ' || ').replace(/{{/g, '${').replace(/}}/g, '}'); eval(`listurl = \`${listurl}\`;`); MY_URL = listurl.replace(/undefined/g,'').replace('fyclass', cate_id); }else if(api_type=="XBPQ"){ type_id = fl.cateId || ""; 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); }else{ MY_URL = listurl + MY_PAGE; type_id = fl.cateId || ""; 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 vod_name,vod_pic,vod_url,vod_desc; if(api_type=="drpy"){ let yicode = extdata["一级"] || ""; let dws = yicode.split(';'); if(/^js:/.test(yicode)){ let cateObj = { url: extdata.url, 一级: extdata.一级, tid: cate_id, pg: MY_PAGE, filter: extdata.filter, extend: extdata.extend }; let HOST = extdata['host']; let input = MY_URL; let MY_FL = fl; let MY_CATE = cate_id; const TYPE = 'cate'; let desc = ''; cateObj.tid = cateObj.tid+''; if (cateObj.tid.endsWith('_clicklink')) { cateObj.tid = cateObj.tid.split('_')[0]; input = HOST + '/api/video/search?key=' + cateObj.tid + '&page=' + + MY_PAGE; } let dynamicCode = yicode.replace('js:','').replace('setResult(d);','').replace('request(input)','request(input,fetch_params)').trim(); function executeDynamicCode() { let VODS = []; eval(dynamicCode) if($.type(d)=='array'){ return d; } return VODS; } let vodlist = executeDynamicCode(); vodlist.forEach(it=>{ let vodUrl = it.url || it.vod_id; vodUrl = /fyid/.test(vodurlhead)?vodurlhead.replace('fyid',vodUrl):(/^http/.test(vodUrl)?"":vodurlhead)+vodUrl; vodlists.push({"vod_url":vodUrl,"vod_name":it.title||it.vod_name,"vod_desc":it.desc||it.vod_remarks||"","vod_pic":it.img||it.vod_pic||""}); }) }else if(/^json:/.test(dws[0])){ let gethtml = request(MY_URL, { headers: headers, timeout:8000 }); let json = dealJson(gethtml); let vodlist = getJsonValue(json, dws[0].replace('json:','')); vodlist.forEach(it=>{ vod_name = getJsonValue(it, dws[1]); vod_pic = getJsonValue(it, dws[2]); vod_desc = getJsonValue(it, dws[3]); let id = getJsonValue(it, dws[4]); vod_url = /fyid/.test(vodurlhead)?vodurlhead.replace('fyid',id):(/^http/.test(id)?"":vodurlhead)+id; if(vod_url&&vod_name){ vodlists.push({"vod_url":vod_url,"vod_name":vod_name,"vod_desc":vod_desc||"","vod_pic":vod_pic||""}); } }) }else{ let gethtml = request(MY_URL, { headers: headers, timeout:8000 }); let vodlist = _pdfa(gethtml, dws[0]); vodlist.forEach(it=>{ if(dws[4]){ vod_url = _pd(it, dws[4], MY_URL); } if(dws[1]){ vod_name = _pdfh(it, dws[1]); } if(dws[2]){ vod_pic = _pdfh(it, dws[2]); } if(dws[3]){ vod_desc = _pdfh(it, dws[3]); } if(vod_url&&vod_name){ vodlists.push({"vod_url":vod_url,"vod_name":vod_name,"vod_desc":vod_desc||"","vod_pic":vod_pic||""}); } }) } if(extdata.图片替换 && extdata.图片替换.includes('=>')){ let replace_from = extdata.图片替换.split('=>')[0]; let replace_to = extdata.图片替换.split('=>')[1]; vodlists.forEach(it=>{ if(it.vod_pic&&it.vod_pic.startsWith('http')){ it.vod_pic = it.vod_pic.replace(replace_from,replace_to); } }); } if(extdata.图片来源){ vodlists.forEach(it=>{ if(it.vod_pic&&it.vod_pic.startsWith('http')){ it.vod_pic = it.vod_pic + extdata.图片来源; } }); } }else if(api_type=="XBPQ"){ let gethtml = request(MY_URL, { headers: headers, timeout:8000 }); extdata["二次截取"] = extdata["二次截取"] || (gethtml.indexOf(`