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(``:gethtml.indexOf(``:"");
+ if(jkdata["二次截取"]){
+ gethtml = gethtml.split(jkdata["二次截取"].split('&&')[0])[1].split(jkdata["二次截取"].split('&&')[1])[0];
+ }
+ var list = [];
+ jkdata["链接"] = jkdata["链接"] || `href="&&"`;
+ jkdata["标题"] = jkdata["标题"] || `title="&&"`;
+ jkdata["数组"] = jkdata["数组"] || ``;
+ let jklist = gethtml.match(new RegExp(jkdata["数组"].replace('&&','((?:.|[\r\n])*?)'), 'g'));
+ jklist.forEach(item=>{
+ if(!jkdata["图片"]){
+ if(item.indexOf('original=')>-1){
+ jkdata["图片"] = `original="&&"`;
+ }else if(item.indexOf('
/g,'');
+ let xmllist = [];
+ let videos = pdfa(gethtml,'list&&video');
+ for(let i in videos){
+ let id = String(xpath(videos[i],`//video/id/text()`)).trim();
+ let name = String(xpath(videos[i],`//video/name/text()`)).trim();
+ let pic = String(xpath(videos[i],`//video/pic/text()`)).trim();
+ let note = String(xpath(videos[i],`//video/note/text()`)).trim();
+ let arr = {"vod_id":id,"vod_name":name,"vod_remarks":note,"vod_pic":pic};
+ let plays = xpathArray(videos[i],`//video/dl/dd/text()`);
+ if(plays.length==1){
+ let play = plays[0];
+ if(play.indexOf('$')==-1&&play.indexOf('m3u8')>-1){
+ arr['play'] = play.trim();
+ }
+ }
+ xmllist.push(arr)
+ }
+ var html = {"list":xmllist};
+ }else if(!/{|}/.test(gethtml)&&gethtml!=""){
+ var decfile = "hiker://files/rules/Src/Juying/appdec.js";
+ var Juyingdec=fetch(decfile);
+ if(Juyingdec != ""){
+ eval(Juyingdec);
+ var html = JSON.parse(xgdec(gethtml));
+ }
+ }else{
+ var html = JSON.parse(gethtml);
+ }
+ try{
+ var list = eval(lists)||html.list||html.data.list||html.data||[];
+ } catch (e) {
+ var list = html.list||html.data.list||html.data||[];
+ }
+ }
+ } catch (e) {
+ var list = [];
+ }
+
+ let videolist = list.map((list)=>{
+ let vodname = list.vod_name||list.title;
+ if(vodname){
+ let vodpic = list.vod_pic||list.pic;
+ let voddesc = list.vod_remarks||list.state||"";
+ let vodurl = list.vod_id?url&&!/^http/.test(list.vod_id)?url+list.vod_id:list.vod_id:list.nextlink;
+ vodpic = vodpic?vodpic.replace('/img.php?url=','').replace('/tu.php?tu=','') + "@Referer=":"https://www.xawqxh.net/mxtheme/images/loading.gif";
+ if(/^\/upload|^upload/.test(vodpic)){
+ vodpic = vodurl.match(/http(s)?:\/\/(.*?)\//)[0] + vodpic;
+ }
+ if(/^\/\//.test(vodpic)){
+ vodpic = "https:" + vodpic;
+ }
+ if(api_type=='cms'&&list.vod_play_url){
+ if(list.vod_play_url.indexOf('$')==-1&&list.vod_play_url.indexOf('m3u8')>-1){
+ list['play'] = list.vod_play_url;
+ }
+ }
+ return {
+ title: vodname,
+ desc: voddesc,
+ pic_url: vodpic,
+ url: list.play?list.play:$("hiker://empty##" + vodurl + "#immersiveTheme#").rule((type,ua) => {
+ require(config.依赖.match(/http(s)?:\/\/.*\//)[0].replace('/Ju/','/master/') + 'SrcJyXunmi.js');
+ xunmierji(type,ua)
+ },api_type, api_ua),
+ col_type: 'movie_3',
+ extra: {
+ pic: vodpic,
+ name: vodname,
+ title: vodname+'-'+api_name,
+ data: typeof(jsondata) =="undefined"|| jsondata ==null?{}:jsondata
+ }
+ }
+ }
+ });
+ videolist = videolist.filter(n => n);
+ d = d.concat(videolist);
+ }catch(e){
+ if(!list){
+ d.push({
+ title: '接口访问异常,请更换接口!',
+ url: '#noHistory#hiker://empty',
+ col_type: 'text_center_1'
+ });
+ }
+ log(api_name+' 接口访问异常,请更换接口!获取影片失败>'+e.message)
+ }
+ }else{
+ d.push({
+ title: '先选择一个接口,做为默认展示站!',
+ url: 'hiker://empty',
+ col_type: 'text_center_1'
+ });
+ }
+ setResult(d);
+}
//一级
function yiji() {