[{"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('&amp;');st=st.split('<').join('&lt;');st=st.split('>').join('&gt;');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}]