🔞禁漫天堂API
https://www.cdngwc.cc##禁漫API
laizhiyu (6509)09/27 16:34
禁漫天堂 App API 直连版(参考开源项目 ComicSparks/jasmine 机制)。API 线路可在登录界面切换,ts 半固定自愈,响应 AES-256-ECB 解密,图片乱序行块还原。搜索/详情/目录/正文/发现全链路 API。收藏夹需登录。
{
"bookSourceComment": "禁漫天堂 App API 直连版(参考开源项目 ComicSparks\/jasmine 机制)。API 线路可在登录界面切换,ts 半固定自愈,响应 AES-256-ECB 解密,图片乱序行块还原。搜索\/详情\/目录\/正文\/发现全链路 API。收藏夹需登录。",
"bookSourceGroup": "🔞 禁漫天堂",
"bookSourceName": "🔞禁漫天堂API",
"bookSourceType": 2,
"bookSourceUrl": "https:\/\/www.cdngwc.cc##禁漫API",
"bookUrlPattern": "https?:\/\/(?:www[.])?(?:cdngwc[.](?:cc|net|club)|cdnhjk[.]net)\/album[?]id=[0-9]+",
"concurrentRate": "2\/1000",
"customButton": false,
"customOrder": 1,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:\n(function(){\nvar out=[];\nfunction P(t,u){try{out.push({title:t,url:'https:\/\/'+H+u});}catch(e){}}\nvar H='www.cdngwc.cc';var hh=null;try{hh=jmhost(source);}catch(e){}\nif(hh!=null){H=String(hh);}\nP('🔥 全部·最新','\/categories\/filter?page={{page}}&order=&c=&o=mr');\nP('全部·最多观看','\/categories\/filter?page={{page}}&order=&c=&o=mv');\nP('全部·日榜','\/categories\/filter?page={{page}}&order=&c=&o=mv_t');\nP('全部·周榜','\/categories\/filter?page={{page}}&order=&c=&o=mv_w');\nP('全部·月榜','\/categories\/filter?page={{page}}&order=&c=&o=mv_m');\nP('全部·最多收藏','\/categories\/filter?page={{page}}&order=&c=&o=tf');\nP('同人 doujin','\/categories\/filter?page={{page}}&order=&c=doujin&o=mr');\nP('单本 single','\/categories\/filter?page={{page}}&order=&c=single&o=mr');\nP('短篇 short','\/categories\/filter?page={{page}}&order=&c=short&o=mr');\nP('其他 another','\/categories\/filter?page={{page}}&order=&c=another&o=mr');\nP('韩漫 hanman','\/categories\/filter?page={{page}}&order=&c=hanman&o=mr');\nP('美漫 meiman','\/categories\/filter?page={{page}}&order=&c=meiman&o=mr');\nP('3D','\/categories\/filter?page={{page}}&order=&c=3D&o=mr');\nP('Cosplay','\/categories\/filter?page={{page}}&order=&c=doujin_cosplay&o=mr');\nP('英文 english','\/categories\/filter?page={{page}}&order=&c=english_site&o=mr');\nP('⭐ 全部收藏·默认夹','\/favorite?page={{page}}&folder_id=0&o=mr');\nvar fo=null;\ntry{fo=jmget(java,source,'\/favorite?page=1&folder_id=0&o=mr');}catch(e){fo=null;}\nif(fo!=null&&fo.folder_list!=null&&fo.folder_list.length){\n for(var i=0;i<fo.folder_list.length;i++){\n var f=fo.folder_list[i];var fid=String(f.FID||f['0']||'');var fnm=String(f.name||f['2']||('收藏夹'+(i+1)));\n if(fid.length>0&&fid!=='0'){P('📁 收藏夹·'+fnm,'\/favorite?page={{page}}&folder_id='+fid+'&o=mr');}\n }\n}\nreturn String(JSON.stringify(out));\n})()\n",
"header": "<js>(function(){var t;try{t=String(source.get('jmts')||'');}catch(e){t='';}if(t.length<5){t=String(Math.floor(Date.now()\/1000));try{source.put('jmts',t);}catch(e){}}var u='Mozilla\/5.0 (Linux; Android 13; abcdef123 Build\/TQ1A.230305.002; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/114.0.5735.196 Safari\/537.36';var o={};o.token=String(java.md5Encode(t+'185Hcomic3PAPP7R'));o.tokenparam=t+',2.1.7';o['user-agent']=u;o['X-Requested-With']='com.JMComic3.app';return JSON.stringify(o);})()<\/js>",
"jsLib": "\nvar JMS='185Hcomic3PAPP7R';\nvar JMS2='18comicAPPContent';\nvar JMV='2.1.7';\nvar JMU='Mozilla\/5.0 (Linux; Android 13; abcdef123 Build\/TQ1A.230305.002; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/114.0.5735.196 Safari\/537.36';\nvar JMHS='www.cdngwc.cc,www.cdnhjk.net,www.cdngwc.net,www.cdngwc.club';\nvar JMIMS='cdn-msp.jmapiproxy1.cc,cdn-msp.jmapiproxy2.cc,cdn-msp2.jmapiproxy2.cc,cdn-msp.jmapinodeudzn.net';\nvar JMSC=220980;\nvar JMSC2=268850;\nvar JMSC3=421926;\nfunction gv(o,k){try{var f=o[k];return typeof f==='function'?f.call(o):f;}catch(e){return null;}}\nfunction jmg(sv,k){try{var v=sv.get(k);if(v==null)return null;var s=String(v);if(s.length<1)return null;return s;}catch(e){return null;}}\nfunction jmp(sv,k,v){try{sv.put(k,String(v));}catch(e){}}\nfunction jmts(sv){var t=jmg(sv,'jmts');if(t==null||t.length<5){t=String(Math.floor(Date.now()\/1000));jmp(sv,'jmts',t);}return t;}\nfunction jmnewts(sv){var t=String(Math.floor(Date.now()\/1000));jmp(sv,'jmts',t);return t;}\nfunction jmhost(sv){var h=jmg(sv,'jmh');if(h==null){return 'www.cdngwc.cc';}return h;}\nfunction jmimg(sv){var h=jmg(sv,'jmim');if(h==null){return 'cdn-msp.jmapiproxy1.cc';}return h;}\nfunction jmhead(jv,sv,t,sec){var o={};o.token=String(jv.md5Encode(t+(sec||JMS)));o.tokenparam=t+','+JMV;o['user-agent']=JMU;o['X-Requested-With']='com.JMComic3.app';o['Content-Type']='application\/x-www-form-urlencoded';return o;}\nfunction jmdec(jv,s,t){try{return String(jv.aesBase64DecodeToString(String(s),String(jv.md5Encode(t+JMS)),'AES\/ECB\/PKCS5Padding',''));}catch(e){return null;}}\nfunction jmhead(jv,sv,t,sec){var o={};o.token=String(jv.md5Encode(t+(sec||JMS)));o.tokenparam=t+','+JMV;o['user-agent']=JMU;o['X-Requested-With']='com.JMComic3.app';o['Content-Type']='application\/x-www-form-urlencoded';return o;}\nfunction jmpost(jv,u,b,hd){var hs=String(JSON.stringify(hd));\n try{return jv.post(String(u),String(b),hs);}catch(e1){}\n try{var m=new Packages.java.util.HashMap();\n m.put('token',String(hd.token));m.put('tokenparam',String(hd.tokenparam));m.put('user-agent',String(hd['user-agent']));m.put('X-Requested-With',String(hd['X-Requested-With']));m.put('Content-Type',String(hd['Content-Type']));\n return jv.post(String(u),String(b),m);\n }catch(e2){return null;}\n}\nfunction jmget(jv,sv,path,post,body){var h=jmhost(sv);var tries=0;var ts=jmts(sv);var last=null;\n for(var r=0;r<2;r++){\n try{\n var hd=jmhead(jv,sv,ts,JMS);\n var resp=null;\n if(post){resp=jmpost(jv,'https:\/\/'+h+path,body||'',hd);}\n else{resp=jv.connect(String('https:\/\/'+h+path),String(JSON.stringify(hd)));}\n if(resp==null){throw 'resp null';}\n var b=String(gv(resp,'body'));\n var o=JSON.parse(b);\n if(o&&o.code===200){\n var d=o.data;var s=String(d);\n if(s.length>1){\n if(s.charAt(0)!=='{'&&s.charAt(0)!=='['){s=jmdec(jv,s,ts);if(s==null||s.length<1){throw 'dec fail';}}\n } else {s='{}';}\n return JSON.parse(s);\n }\n if(o&&o.code===401){throw '401';}\n last='code '+o.code;\n }catch(e){last=String(e);if(String(e).length>220)last='net: '+String(e).substring(0,100);}\n ts=jmnewts(sv);\n }\n return null;\n}\nfunction jmcat(jv,sv,o){var out=[];\n try{\n var host=jmhost(sv);var imgH=jmimg(sv);\n var qj=String.fromCharCode(123,34,104,101,97,100,101,114,115,34,58);\n var cont=o&&o.content?o.content:(o&&o.list?o.list:null);\n if(cont==null)return out;\n for(var i=0;i<cont.length;i++){\n var c=cont[i];var id=String(c.id||'');\n if(id.length<1)continue;\n var n=String(c.name||'未知标题');\n var au=String(c.author||'');\n var hdo={};hdo['user-agent']=JMU;hdo['X-Requested-With']='com.JMComic3.app';\n var cv='https:\/\/'+imgH+'\/media\/albums\/'+id+'_3x4.jpg?v=1'+','+qj+JSON.stringify(JSON.stringify(hdo))+'}}';\n var ep=c.latest_ep?String(c.latest_ep):'';\n out.push(String(JSON.stringify({name:n,author:au,aid:id,url:'https:\/\/'+host+'\/album?id='+id,cover:cv,ep:ep})));\n }\n }catch(e){}\n return out;\n}\nfunction jmnum(jv,aid,fn){aid=parseInt(aid,10)||0;\n if(aid<JMSC)return 0;\n if(aid<JMSC2)return 10;\n var x=aid<JMSC3?10:8;\n var h=String(jv.md5Encode(String(aid)+String(fn)));\n var c=h.charCodeAt(h.length-1);\n return (c%x)*2+2;\n}\nfunction jmpid(U){var i=U.indexOf('\/media\/photos\/');if(i<0)return null;\n var t=U.substring(i+14);var ps=t.split('\/');if(ps.length<1)return null;\n var pid=ps[0].split('?')[0];var f=ps[1];if(f==null)return null;\n var name=f.split('?')[0].split('.')[0];var ext='';\n if(f.indexOf('.')>=0)ext=f.split('?')[0].split('.').pop();\n return {pid:parseInt(pid,10)||0,fn:name,ext:String(ext).toLowerCase()};\n}\n",
"lastUpdateTime": "1790498048410",
"loginUi": "[{\"name\": \"账号\", \"type\": \"text\", \"action\": \"\"}, {\"name\": \"密码\", \"type\": \"password\", \"action\": \"\"}, {\"name\": \"🔑 登录\", \"type\": \"button\", \"action\": \"jmDoLogin()\"}, {\"name\": \"✅ 检测登录态\", \"type\": \"button\", \"action\": \"jmLoginState()\"}, {\"name\": \"🚪 清除登录\", \"type\": \"button\", \"action\": \"jmLogout()\"}, {\"name\": \"🛰 API线路1 cdngwc.cc\", \"type\": \"button\", \"action\": \"jmSetApi(0)\"}, {\"name\": \"🛰 API线路2 cdnhjk.net\", \"type\": \"button\", \"action\": \"jmSetApi(1)\"}, {\"name\": \"🛰 API线路3 cdngwc.net\", \"type\": \"button\", \"action\": \"jmSetApi(2)\"}, {\"name\": \"🛰 API线路4 cdngwc.club\", \"type\": \"button\", \"action\": \"jmSetApi(3)\"}, {\"name\": \"🛰 API线路5 cdnutc.me\", \"type\": \"button\", \"action\": \"jmSetApi(4)\"}, {\"name\": \"📡 自动选最快API\", \"type\": \"button\", \"action\": \"jmAutoHost()\"}, {\"name\": \"🖼 图床1 jmapiproxy1\", \"type\": \"button\", \"action\": \"jmSetImg(0)\"}, {\"name\": \"🖼 图床2 jmapiproxy2\", \"type\": \"button\", \"action\": \"jmSetImg(1)\"}, {\"name\": \"🖼 图床3 msp2.proxy2\", \"type\": \"button\", \"action\": \"jmSetImg(2)\"}, {\"name\": \"🖼 图床4 jmapinodeudzn\", \"type\": \"button\", \"action\": \"jmSetImg(3)\"}, {\"name\": \"🔓 图解码开关(排查)\", \"type\": \"button\", \"action\": \"jmRawToggle()\"}, {\"name\": \"🛰 线路·图诊断\", \"type\": \"button\", \"action\": \"java.longToast('API: '+jmhost(source)+' \/ 图床: '+jmimg(source)+' \/ 图诊断: '+(jmg(source,'jmdl')||'无'))\"}]",
"loginUrl": "\nfunction jmLoginRow(v){var m=(JMHS||'').split(',');for(var i=0;i<m.length;i++){if(String(m[i]).indexOf(v)>=0)return '线路'+(i+1)+': '+m[i];}return (jmg(source,'jmh')||'www.cdngwc.cc');}\nfunction jmSetHost(h){if(h==null||String(h).length<4){java.longToast('无效线路');return;}jmp(source,'jmh',String(h).trim());java.longToast('API线路已切换: '+h);}\nfunction jmImgProbe(h){try{var hd={};hd['user-agent']=JMU;hd['X-Requested-With']='com.JMComic3.app';var r=java.connect(String('https:\/\/'+h+'\/media\/albums\/441923_3x4.jpg?v=1'),String(JSON.stringify(hd)));var b=String(gv(r,'body'));if(b.length>800)return true;}catch(e){try{var r2=java.connect(String('https:\/\/'+h+'\/'));}catch(e2){}}return false;}\nfunction jmPick(k,label,list,i){var h=null;try{h=String(list[i]);}catch(e){}if(h==null||h.length<3){java.longToast(label+'线路无效');return 'no';}\n jmp(source,k,h);\n var t0=Date.now();var ok=false;\n try{if(k==='jmim'){ok=jmImgProbe(h);}else{var r=jmget(java,source,'\/setting');ok=(r!=null);}}catch(e){}\n var ms=Date.now()-t0;\n if(ok){java.longToast('✅ 已选'+label+'线路'+(i+1)+': '+h+' 延迟'+ms+'ms');}\n else{java.longToast('⚠️ 已选'+label+'线路'+(i+1)+': '+h+' 测速失败 '+ms+'ms');}\n return 'ok';\n}\nfunction jmSetApi(i){return jmPick('jmh','API',String(JMHS+',www.cdnutc.me').split(','),i);}\nfunction jmSetImg(i){return jmPick('jmim','图床',String(JMIMS).split(','),i);}\nfunction jmAutoHost(){var hs=String(JMHS+',www.cdnutc.me').split(',');var best=null;var bestMs=99999;for(var i=0;i<hs.length;i++){var h=hs[i];jmp(source,'jmh',h);var t0=Date.now();var ok=false;try{var r=jmget(java,source,'\/setting');ok=(r!=null);}catch(e){}var ms=Date.now()-t0;if(ok&&ms<bestMs){bestMs=ms;best=h;}}if(best==null){java.longToast('所有API线路不可达');}else{jmp(source,'jmh',best);java.longToast('✅ 已选最快API: '+best+' '+bestMs+'ms');}return 'ok';}\nfunction jmLoginState(){var r=jmget(java,source,'\/favorite?page=1&folder_id=0&o=mr');if(r==null){java.longToast('未登录或请求失败');return 'no';}var n=0;if(r.list!=null)n=r.list.length;if(r.folder_list!=null||r.count!=null){java.longToast('登录态有效,收藏夹 '+String(r.total||n)+' 本');return 'ok';}java.longToast('响应异常,可能未登录');return 'no';}\nfunction jmDoLogin(){var info=null;try{info=source.getLoginInfoMap();}catch(e){info=null;}var uid='';var pwd='';try{if(info!=null){var a1=info.get('账号');if(a1!=null)uid=String(a1);var p1=info.get('密码');if(p1!=null)pwd=String(p1);if(uid.length<1){var u2=info.get('account');if(u2!=null)uid=String(u2);}if(pwd.length<1){var p2=info.get('password');if(p2!=null)pwd=String(p2);}}}catch(e){}\n if(uid.length<1||pwd.length<1){java.longToast('请先填写账号密码');return 'no';}\n var ts=jmts(source);var hd=jmhead(java,source,ts,JMS);\n var body='username='+java.encodeURI(uid)+'&password='+java.encodeURI(pwd);\n try{\n var resp=jmpost(java,'https:\/\/'+jmhost(source)+'\/login',body,hd);\n if(resp==null){java.longToast('登录请求失败(版本不兼容)');return 'no';}\n var b=String(gv(resp,'body'));\n var o=JSON.parse(b);\n var s=String(o&&o.data?o.data:'');\n if(s.length>1&&s.charAt(0)!=='{'&&s.charAt(0)!=='['){s=jmdec(java,s,ts);}\n var d=JSON.parse(s);\n if(d==null||d.uid==null){java.longToast('登录失败: '+String(d&&d.msg?d.msg:'响应异常'));return 'no';}\n jmp(source,'jmu',String(d.username||uid));\n java.longToast('登录成功: '+String(d.username||uid)+' (金币'+String(d.coin||'?')+')');\n return 'ok';\n }catch(e){java.longToast('登录失败(网络或账号错误): '+String(e).substring(0,80));return 'no';}\n}\nfunction jmRawToggle(){var r=jmg(source,'jmraw');if(String(r)==='1'){jmp(source,'jmraw','0');java.longToast('🖼 图解码: 已开启乱序还原');}else{jmp(source,'jmraw','1');java.longToast('🖼 图解码: 已降级为原图直显(排查模式)');}return 'ok';}\nfunction jmLogout(){try{var ck=cookie.removeCookie('https:\/\/'+jmhost(source));}catch(e){}try{jmp(source,'jmu','');}catch(e2){}java.longToast('已清除本线路登录Cookie');return 'ok';}\nfunction login(){var info=null;try{info=source.getLoginInfoMap();}catch(e){info=null;}var ok=false;try{if(info!=null){var a1=info.get('账号');if(a1!=null&&String(a1).length>0)ok=true;var a2=info.get('account');if(a2!=null&&String(a2).length>0)ok=true;}}catch(e2){}if(!ok){java.longToast('填写账号密码后点右侧“登录”按钮');}return 'ok';}\n",
"respondTime": 180000,
"ruleBookInfo": {
"author": "$.author",
"coverUrl": "$.cover",
"init": "@js:\n(function(){\n try{\n var bu=String(baseUrl||'');\n var path=bu;var pi=bu.indexOf('\/album');\n if(pi>=0){path=bu.substring(pi);}else{return String(JSON.stringify({name:'加载异常',author:'',tags:'',cover:'',toc:'',aid:'',views:'',lc:'',fav:false,like:false,desc:'详情地址无效'}));}\n var a=jmget(java,source,path);\n if(a==null||a.id==null){return String(JSON.stringify({name:'加载失败',author:'',tags:'',cover:'',toc:'',aid:'',views:'',lc:'',fav:false,like:false,desc:'详情获取失败,请稍后重试或切换线路'}));}\n var id=String(a.id);\n var nl=String.fromCharCode(10);\n var hosts=jmhost(source);var imgH=jmimg(source);\n var hdo={};hdo['user-agent']=JMU;hdo['X-Requested-With']='com.JMComic3.app';\n var qj=String.fromCharCode(123,34,104,101,97,100,101,114,115,34,58);\n var cv='https:\/\/'+imgH+'\/media\/albums\/'+id+'_3x4.jpg?v=1'+','+qj+JSON.stringify(JSON.stringify(hdo))+'}}';\n var au='';if(a.author!=null&&a.author.length){for(var x=0;x<a.author.length;x++){au+=(x>0?',':'')+String(a.author[x]);}}\n var tags='';if(a.tags!=null&&a.tags.length){for(var x2=0;x2<a.tags.length;x2++){tags+=(x2>0?',':'')+String(a.tags[x2]);}}\n var desc=String(a.description||'');\n var lc='';if(a.series!=null&&a.series.length){lc=String(a.series[a.series.length-1].name||'');}\n var views=String(a.total_views||'');\n var cat='';if(a.category!=null)cat=String(a.category.title||'');\n jmp(source,'jmalb_'+id,JSON.stringify({id:id,name:String(a.name||''),author:au,tags:tags,series:(a.series||[]),desc:desc,imgH:imgH}));\n var info=desc;\n if(views.length)info+=nl+'观看: '+views;\n if(cat.length)info+=nl+'分类: '+cat;\n if(lc.length)info+=nl+'最新: '+lc;\n function esc(s){var st=String(s||'');st=st.split('&').join('&');st=st.split('<').join('<');st=st.split('>').join('>');return st;}\n var Q=String.fromCharCode(34);\n var q1=String.fromCharCode(39);\n var favJs='[]';\n var ush='';\n var curFav=(a.is_favorite===true)?'<span style=color:#7f7>已收藏<\/span>':'<span style=color:#ccc>未收藏<\/span>';\n try{\n var foObj=jmget(java,source,'\/favorite?page=1&folder_id=0&o=mr');\n var folArr=(foObj!=null&&foObj.folder_list!=null)?foObj.folder_list:[];\n if(folArr.length>0){\n var fstr=JSON.stringify(folArr);\n favJs=fstr.split(q1).join('\\\\\\\\'+q1);\n for(var fi=0;fi<folArr.length;fi++){\n var fo=folArr[fi];var fid=String(fo.FID||fo['0']||'');var fnm=String(fo.name||fo['2']||('收藏夹'+(fi+1)));\n ush+='<button class=b onclick='+Q+'jmfav('+fi+')'+Q+'>+ '+esc(fnm)+'<\/button>';\n }\n } else {\n ush='<div class=n>未登录或暂无收藏夹:请先到书源菜单→登录,成功后再回详情页下拉刷新<\/div>';\n }\n }catch(e3){ush='<div class=n>收藏夹获取失败(未登录?)<\/div>';}\n var tpv=jmts(source)+','+JMV;\n var tok=String(java.md5Encode(jmts(source)+JMS));\n var pnl='<useweb><html><head><meta name=viewport content='+Q+'width=device-width,initial-scale=1'+Q+'><style>body{background:#16181d;color:#d8d8d8;font-family:sans-serif;margin:10px}b{color:#fff}h2{margin:4px 0;font-size:17px}.n{color:#9aa;font-size:12px;line-height:1.5}.b{display:inline-block;margin:4px;padding:7px 13px;border-radius:16px;border:1px solid #4a7;background:#223;color:#fff;font-size:13px}<\/style><\/head><body>';\n pnl+='<h2>'+esc(String(a.name||''))+'<\/h2>';\n pnl+='<div class=n>作者: '+esc(au)+'<\/div>';\n if(cat.length)pnl+='<div class=n>分类: '+esc(cat)+'<\/div>';\n if(views.length)pnl+='<div class=n>观看: '+views+'<\/div>';\n if(desc.length)pnl+='<div class=n>'+esc(desc)+'<\/div>';\n pnl+='<div class=n>--- 收藏夹 '+curFav+' ---<\/div>'+ush;\n pnl+='<div class=n>提示: 移动API暂无指定收藏夹参数,全部加入默认收藏夹<\/div>';\n pnl+='<script>';\n pnl+='var AID='+q1+id+q1+';';\n pnl+='var TOK='+q1+tok+q1+';';\n pnl+='var TPV='+q1+tpv+q1+';';\n pnl+='var JUA='+q1+JMU+q1+';';\n pnl+='var HOST='+q1+hosts+q1+';';\n pnl+='var FN='+q1+esc(String(a.name||'')).split(q1).join('')+q1+';';\n pnl+='var FAVS='+q1+favJs+q1+';';\n pnl+='try{FAVS=JSON.parse(FAVS);}catch(e){FAVS=[];}';\n pnl+='function hd(){var o={};o.token=TOK;o.tokenparam=TPV;o['+Q+'user-agent'+Q+']=JUA;o['+Q+'X-Requested-With'+Q+']='+q1+'com.JMComic3.app'+q1+';o['+Q+'Content-Type'+Q+']='+q1+'application\/x-www-form-urlencoded'+q1+';return JSON.stringify(o);}';\n pnl+='function jmfav(i){try{var f=FAVS[i]||{};var fid=String(f.FID||f['+Q+'0'+Q+']||'+q1+'0'+q1+');if(fid.length<1){fid='+q1+'0'+q1+';}var b='+q1+'aid='+q1+'+AID+'+q1+'&folder_id='+q1+'+fid;var r=java.post('+q1+'https:\/\/'+q1+'+HOST+'+q1+'\/favorite'+q1+',b,hd());var s=String(r);var o=null;try{o=JSON.parse(s);}catch(e2){}if(o&&o.code===200){java.longToast('+q1+'✔ 已提交收藏['+q1+'+FN+'+q1+']'+q1+'+((fid!=='+q1+'0'+q1+')?('+q1+'夹'+q1+'+fid):'+q1+'默认夹'+q1+')+'+q1+': 下拉刷新详情页可见'+q1+');}else if(o&&o.code===401){java.longToast('+q1+'未登录,收藏失败'+q1+');}else{java.longToast('+q1+'收藏请求异常: '+q1+'+(s||'+q1+''+q1+').substring(0,60));}}catch(e){java.longToast('+q1+'收藏出错: '+q1+'+String(e).substring(0,80));}}';\n pnl+='<\/script><\/body><\/html><\/useweb>';\n info=pnl;\n var out={};out.name=String(a.name||'');out.author=au;out.tags=tags;out.cover=cv;out.toc='https:\/\/'+hosts+'\/album?id='+id;out.aid=id;out.views=views;out.lc=lc;out.fav=(a.is_favorite===true);out.like=(a.liked===true);out.desc=info;\n return String(JSON.stringify(out));\n }catch(e){\n return String(JSON.stringify({name:'加载异常',author:'',tags:'',cover:'',toc:'',aid:'',views:'',lc:'',fav:false,like:false,desc:String(e).substring(0,120)}));\n }\n})()\n",
"intro": "$.desc",
"kind": "$.tags",
"lastChapter": "$.lc",
"name": "$.name",
"tocUrl": "$.toc"
},
"ruleContent": {
"content": "@js:\n(function(){\n try{\n var bu=String(baseUrl||'');\n var pid='';\n var i9=bu.indexOf('id=');if(i9>=0){var t9=bu.substring(i9+3);var j9=0;while(j9<t9.length){var ch9=t9.charAt(j9);if(ch9>='0'&&ch9<='9'){j9++;}else{break;}}pid=t9.substring(0,j9);}\n if(pid.length<1){return '章节地址无效';}\n var c=jmget(java,source,'\/chapter?id='+pid);\n if(c==null){return '本章获取失败,请下拉重试或切换线路';}\n var imgs=c.images||[];\n if(imgs.length<1){return '本章暂无图片或需要登录(章节可能因版权锁定)';}\n var imgH=jmimg(source);\n var ts=jmts(source);\n var Q=String.fromCharCode(34);\n var cl=String.fromCharCode(10);\n var html='';\n for(var i=0;i<imgs.length;i++){\n var n=String(imgs[i]);\n html+='<img src='+Q+'https:\/\/'+imgH+'\/media\/photos\/'+pid+'\/'+n+'?v='+ts+Q+'>'+cl;\n }\n return html;\n }catch(e){return '本章解析失败: '+String(e).substring(0,120);}\n})()\n",
"imageDecode": "\n(function(){\n try{\n var U=String(src||'');\n var i=U.indexOf('\/media\/photos\/');\n if(i<0)return result;\n var t=U.substring(i+14);var ps=t.split('\/');\n if(ps.length<2)return result;\n var pidStr=ps[0].split('?')[0];\n var pid=parseInt(pidStr,10)||0;\n var f=ps[1];if(f==null)return result;\n var fn=f.split('?')[0].split('.')[0];\n var ext='';\n if(f.indexOf('.')>=0)ext=f.split('?')[0].split('.').pop();\n ext=String(ext).toLowerCase();\n if(ext==='gif')return result;\n var n=0;\n if(pid<220980){n=0;}\n else if(pid<268850){n=10;}\n else{var x=pid<421926?10:8;var h=String(java.md5Encode(String(pid)+String(fn)));var c=h.charCodeAt(h.length-1);n=(c%x)*2+2;}\n if(n<=0)return result;\n var raw=null;\n try{raw=source.get('jmraw');}catch(e2){raw=null;}\n if(String(raw)==='1'){return result;}\n if(n<=1)return result;\n var BF=Packages.android.graphics.BitmapFactory;\n var bmp=BF.decodeByteArray(result,0,result.length);\n if(bmp==null){try{source.put('jmdl','null len='+result.length+' hdr='+result[0]+','+result[1]+','+result[2]+','+result[3]);}catch(e3){}return result;}\n var w=bmp.getWidth(),h=bmp.getHeight();\n if(w<4||h<4){try{source.put('jmdl','tiny '+w+'x'+h);}catch(e4){}return result;}\n var dst=Packages.android.graphics.Bitmap.createBitmap(w,h,Packages.android.graphics.Bitmap.Config.ARGB_8888);\n var cv=new Packages.android.graphics.Canvas(dst);\n var pt=new Packages.android.graphics.Paint();\n var over=h%n;var move=Math.floor(h\/n);\n for(var ii=0;ii<n;ii++){\n var m2=move;var ys=h-move*(ii+1)-over;var yd=move*ii;\n if(ii===0){m2+=over;}else{yd+=over;}\n if(ys<0)ys=0;if(ys+m2>h)m2=h-ys;\n if(yd<0)yd=0;if(yd+m2>h)m2=h-yd;\n cv.drawBitmap(bmp,new Packages.android.graphics.Rect(0,ys,w,ys+m2),new Packages.android.graphics.Rect(0,yd,w,yd+m2),pt);\n }\n var bos=new Packages.java.io.ByteArrayOutputStream();\n dst.compress(Packages.android.graphics.Bitmap.CompressFormat.PNG,100,bos);\n var out2=bos.toByteArray();\n try{source.put('jmdl','ok r'+n+' '+pid+'\/'+fn+' '+out2.length);}catch(e5){}\n return out2;\n }catch(e){\n try{java.longToast('🖼 图解码失败: '+String(e).substring(0,90));}catch(e6){}\n try{source.put('jmdl','FAIL: '+String(e).substring(0,90));}catch(e7){}\n return result;\n }\n})()\n"
},
"ruleExplore": {
"author": "$.author",
"bookList": "@js:\n(function(){var out=[];\n try{\n var bu=String(baseUrl||'');\n var path=bu;var pi=bu.indexOf('\/categories');var fi=bu.indexOf('\/favorite');\n if(pi>=0){path=bu.substring(pi);}else if(fi>=0){path=bu.substring(fi);}\n var obj=jmget(java,source,path);\n if(obj==null){out.push(String(JSON.stringify({name:'本页请求失败(可切换线路)',author:'',aid:'0',url:'https:\/\/'+jmhost(source)+'\/album?id=0',cover:'',ep:''})));return out;}\n out=jmcat(java,source,obj);\n if(out==null)out=[];\n }catch(e){out.push(String(JSON.stringify({name:'发现解析异常: '+String(e).substring(0,120),author:'',aid:'0',url:'https:\/\/'+jmhost(source)+'\/album?id=0',cover:'',ep:''})));}\n return out;\n})()\n",
"bookUrl": "$.url",
"coverUrl": "$.cover",
"intro": "$.ep",
"name": "$.name"
},
"ruleSearch": {
"author": "$.author",
"bookList": "@js:\n(function(){var out=[];\n try{\n var bu=String(baseUrl||'');\n var path=bu;var pi=bu.indexOf('\/search');\n if(pi>=0){path=bu.substring(pi);}\n var obj=jmget(java,source,path);\n if(obj==null){out.push(String(JSON.stringify({name:'搜索请求失败(可尝试登录界面切换线路)',author:'',aid:'0',url:'https:\/\/'+jmhost(source)+'\/album?id=0',cover:'',ep:''})));return out;}\n if(obj.redirect_aid!=null){var a=String(obj.redirect_aid);if(a.length>1){out.push(String(JSON.stringify({name:String(obj.search_query||a),author:'',aid:a,url:'https:\/\/'+jmhost(source)+'\/album?id='+a,cover:'',ep:''})));return out;}}\n out=jmcat(java,source,obj);\n if(out==null)out=[];\n }catch(e){out.push(String(JSON.stringify({name:'搜索解析异常: '+String(e).substring(0,120),author:'',aid:'0',url:'https:\/\/'+jmhost(source)+'\/album?id=0',cover:'',ep:''})));}\n return out;\n})()\n",
"bookUrl": "$.url",
"checkKeyWord": "MANA",
"coverUrl": "$.cover",
"name": "$.name"
},
"ruleToc": {
"chapterList": "@js:\n(function(){var out=[];\n try{\n var host=jmhost(source);\n function aidOf(bu){var i=String(bu).indexOf('id=');if(i<0)return '';var t=String(bu).substring(i+3);var j=0;while(j<t.length){var ch=t.charAt(j);if(ch>='0'&&ch<='9'){j++;}else{break;}}return t.substring(0,j);}\n var aid='';\n try{aid=aidOf(baseUrl);}catch(e){}\n if(aid.length<1){try{aid=aidOf(book?book.tocUrl:'');}catch(e2){}}\n var obj=null;\n var cache=jmg(source,'jmalb_'+aid);\n if(cache!=null){try{obj=JSON.parse(cache);}catch(e){obj=null;}}\n if(obj==null){\n obj=jmget(java,source,'\/album?id='+aid);\n if(obj!=null){jmp(source,'jmalb_'+aid,JSON.stringify({id:aid,name:String(obj.name||''),author:'',tags:'',series:(obj.series||[]),desc:'',imgH:jmimg(source)}));}\n }\n if(obj==null){out.push(String(JSON.stringify({n:'目录获取失败:详情缓存丢失,请回到详情页刷新',cid:'https:\/\/'+host+'\/chapter?id=0'})));return out;}\n var ser=obj.series||[];\n var bookName=String(obj.name||'');\n var i=0;\n if(ser.length<1){\n out.push(String(JSON.stringify({n:bookName.length?bookName:'全一话',cid:'https:\/\/'+host+'\/chapter?id='+aid})));\n } else {\n for(i=0;i<ser.length;i++){var p=ser[i];var pid=String(p.id||'');if(pid.length<1)continue;out.push(String(JSON.stringify({n:String(p.name||('第'+i+'话')),cid:'https:\/\/'+host+'\/chapter?id='+pid})));}\n }\n }catch(e){out=[];}\n return out;\n})()\n",
"chapterName": "$.n",
"chapterUrl": "$.cid"
},
"searchUrl": "https:\/\/www.cdngwc.cc\/search?search_query={{key}}&main_tag=0&page={{page}}&o=mr&t=a",
"variableComment": "jmts=API时间戳(半固定,401自愈); jmh=API线路(默认www.cdngwc.cc); jmim=图床线路(默认cdn-msp.jmapiproxy1.cc); jmu=登录用户名",
"weight": 0
}