[{"bookSourceGroup":"API,APP","bookSourceName":"🍊青橙小说API","bookSourceType":0,"bookSourceUrl":"https:\/\/goway.reader.yueyouxs.com","bookUrlPattern":"https?:\/\/(?:goway|dl|cdn\\.p|ads|bi)\\.reader\\.yueyouxs\\.com\/goway\/goread\/app\/book\/detail\\?bookId=[0-9]+.*","concurrentRate":"1500","customButton":false,"customOrder":4,"enabled":true,"enabledCookieJar":true,"enabledExplore":true,"eventListener":false,"exploreUrl":"@js:\n(function(){\n  var out=[];\n  var CHS={\"男频\": {\"c\": \"11\", \"cls\": [[\"都市人生\", 1100], [\"玄幻奇幻\", 1101], [\"武侠仙侠\", 1102], [\"军事历史\", 1103], [\"科幻末世\", 1104], [\"游戏体育\", 1105], [\"悬疑灵异\", 1107], [\"脑洞大开\", 1108]], \"plot\": [\"乡土\", \"系统\", \"重生\", \"热血\", \"升级流\", \"废材流\", \"洪荒\", \"无敌流\", \"医术\", \"脑洞\", \"扮猪吃虎\", \"年代\"], \"role\": [\"高手下山\", \"赘婿\", \"兵王\", \"神医\", \"保镖\", \"奶爸\", \"女总裁\", \"校花\", \"神豪\", \"至尊\", \"草根\", \"妖孽\"], \"common\": true}, \"女频\": {\"c\": \"21\", \"cls\": [[\"现代言情\", 2100], [\"古代言情\", 2101], [\"幻想言情\", 2102], [\"穿越时空\", 2104], [\"宫闱争斗\", 2105], [\"豪门总裁\", 2106], [\"婚恋爱情\", 2107], [\"经商种田\", 2108]], \"plot\": [\"甜宠\", \"先婚后爱\", \"医术\", \"马甲\", \"重生\", \"扮猪吃虎\", \"种田\", \"快穿\", \"系统\", \"娱乐圈\", \"年代\", \"穿越\"], \"role\": [\"总裁\", \"萌宝\", \"女强\", \"团宠\", \"反派\", \"王妃\", \"嫡女\", \"皇后\", \"宠妻\", \"腹黑\", \"天才\", \"农女\"], \"common\": true}, \"短篇\": {\"c\": \"41\", \"cls\": [[\"现实情感\", 4100], [\"家庭婚姻\", 4102], [\"热血青春\", 4103], [\"治愈成长\", 4104], [\"奇闻怪谈\", 4105], [\"悬疑脑洞\", 4106], [\"古风言情\", 4107]], \"plot\": [\"出轨\", \"反转\", \"婚姻\", \"家庭\", \"打脸逆袭\", \"治愈\", \"白月光\", \"虐恋\", \"重生\"], \"role\": [], \"common\": false}, \"图书\": {\"c\": \"31\", \"cls\": [[\"学习强国\", 3104], [\"文学小说\", 3102], [\"古代典籍\", 3103], [\"名家名作\", 3105], [\"出版读物\", 3101], [\"史家专著\", 3108]], \"plot\": [], \"role\": [], \"common\": false}};\n  var ch='',hasIm=false;\n  try{ if(typeof infoMap!=='undefined' && infoMap['频道']){ ch=String(infoMap['频道']); hasIm=true; } }catch(e){}\n  if(!hasIm){ try{ var v=String(java.get('qcChannel')||''); if(v) ch=v; }catch(e){} }\n  if(!CHS[ch]) ch='男频';\n  var cfg=CHS[ch], cnum=cfg.c, C=cfg.cls, PLOT=cfg.plot, ROLE=cfg.role;\n\n  function head(title){\n    return {title:title,url:'',type:'button',action:\"java.toast('\"+title+\"')\",\n            style:{layout_flexBasisPercent:1,layout_wrapBefore:true,layout_flexGrow:0}};\n  }\n  function sec(title,sid){\n    var bd='data=&sectionId='+sid+'&page=1';\n    return {title:title,url:QC_url('\/goway\/goread\/app\/section\/v4\/book\/list','',bd)+','+QC_opt(bd),style:{}};\n  }\n  function simple(title,path,bd){\n    return {title:title,url:QC_url('\/goway\/goread\/app\/'+path,'',bd)+','+QC_opt(bd),style:{}};\n  }\n  function paged(title,tagList,c,cs,ob,ff){\n    var bd='tagList='+tagList+'&classify='+c+'&psize=20&fullFlag='+ff+'&tagTypeId=0&orderBy='+ob+'&page=1&classifySecondList='+cs;\n    var js=\"(function(){var pg=1;try{if(page!=null&&String(page)!=='')pg=parseInt(String(page))||1;}catch(e){}try{var m=String(result).match(\/[?&]page=([0-9]+)\/);if(m)pg=parseInt(m[1])||1;}catch(e){}if(pg<1)pg=1;return 'https:\/\/goway.reader.yueyouxs.com'+QC_sign('\/goway\/goread\/app\/classify\/v352\/search','page='+pg,\"+JSON.stringify(bd)+\");})()\";\n    var opt={\"method\":\"POST\",\"headers\":{\"Content-Type\":\"application\/x-www-form-urlencoded\",\"User-Agent\":\"okhttp\/4.10.0\"},\"body\":bd,\"js\":js};\n    return {title:title,url:'https:\/\/goway.reader.yueyouxs.com\/goway\/goread\/app\/classify\/v352\/search?page={{page}},'+JSON.stringify(opt),style:{}};\n  }\n\n  \/* ① 频道 select: 男频\/女频\/短篇\/图书 *\/\n  out.push({title:'频道',type:'select',chars:['男频','女频','短篇','图书'],default:'男频',\n    action:\"java.put('qcChannel',infoMap['频道']); java.refreshExplore();\",style:{layout_wrapBefore:true}});\n  out.push({title:'状态',type:'button',action:\"java.toast('当前频道：'+(java.get('qcChannel')||'男频'))\",\n    viewName:\"'当前：'+(java.get('qcChannel')||'男频')\",style:{layout_wrapBefore:true}});\n  \/* ② 通用榜单只给男频\/女频(短篇\/图书的 rank\/clsTag 实测忽略 classify 恒返回男频数据, 不挂避免误导) *\/\n  if(cfg.common){\n    var S=[[\"🔥 热门风向标\", 3066], [\"⭐ 满级神作\", 3068], [\"📈 热门追更榜\", 2747], [\"✅ 完结精品库\", 2748], [\"🚀 异军突起\", 2751], [\"📕 火爆完本\", 3227], [\"🆕 最新好书\", 3228]];\n    for(var i=0;i<S.length;i++) out.push(sec(S[i][0],S[i][1]));\n    out.push(simple('🏆 热门排行','rank\/v4\/index','classify='+cnum));\n    out.push(simple('🏷️ 标签精选','clsTag\/getBookList','classify='+cnum+'&page=1'));\n    out.push(simple('✨ 个性化推荐','section\/v4\/recommend\/list','data=&page=1'));\n  }\n  \/* ③ 分类: 满格标题 + 常驻 热度\/更新\/新书 *\/\n  var O=[[\"热度\", \"readers\"], [\"更新\", \"cpsUpdateTime\"], [\"新书\", \"createTime\"]];\n  out.push(head('📚 '+ch+' · 题材分类'));\n  for(var i=0;i<C.length;i++){\n    out.push(head(C[i][0]));\n    for(var k=0;k<O.length;k++) out.push(paged(O[k][0],'',cnum,String(C[i][1]),O[k][1],'-1'));\n  }\n  \/* ④ 情节标签 *\/\n  if(PLOT.length){\n    out.push(head('🎭 '+ch+' · 情节标签'));\n    for(var i=0;i<PLOT.length;i++) out.push(paged(PLOT[i],PLOT[i],cnum,'','readers','-1'));\n  }\n  \/* ⑤ 角色标签 *\/\n  if(ROLE.length){\n    out.push(head('👤 '+ch+' · 角色标签'));\n    for(var i=0;i<ROLE.length;i++) out.push(paged(ROLE[i],ROLE[i],cnum,'','readers','-1'));\n  }\n  \/* ⑥ 状态筛选(常驻有 url, 保证短篇\/图书也有非空 url 首项) *\/\n  var F=[[\"全部\", \"-1\"], [\"连载\", \"0\"], [\"完结\", \"1\"]];\n  out.push(head('📖 '+ch+' · 全站状态'));\n  for(var k=0;k<F.length;k++) out.push(paged(F[k][0],'',cnum,'','readers',F[k][1]));\n  return JSON.stringify(out);\n})()","header":"{\n  \"User-Agent\": \"okhttp\/4.10.0\",\n  \"Content-Type\": \"application\/x-www-form-urlencoded\"\n}","jsLib":"\/* 青橙小说 签名库 (QC) —— 静态票据 + 按 path\/query\/body 重算 sign\n   自 com.qingcheng.reader 5.0.1.1 \/ libnative-lib.so\n   _s   = MD5(deviceId+userId) 固定\n   sign = HMAC-SHA256(KEY, path+encodedQuery+\"&\"+R0+\"&\"+排序POST参数(解一层URL编码))\n   _p   = URLEncode(DES\/ECB\/NoPadding(DESK, R0+\"&sign=\"+sign + \\u0001填充到8倍数)) Base64\n   注: R0 内 uth 依赖旧 time, 故 time 必须固定为抓包时刻; 服务端实测无时间窗口(40min+仍有效)\n*\/\nvar QC_KEY='NiozHhg\/lMm5ja-DVEV_jzk$,t0B4*$5';\nvar QC_DESK='snY%169j';\nvar QC_R0='utId=&deviceId=ylms&userId=y233108512&sex=unknown&tmpToken=18ed8908ad0749d2ab6e1dc91f055eec&st=4&uth=21920cda455ba0f3883dc675899c5354&oaid=&udid=';\nvar QC_COMMON='platId=2&appId=com.qingcheng.reader&channelId=qingchengxs&appVersion=5.0.1&srcChannelId=qingchengxs&time=1794411627&_s=0D8E1B4226B86B69A867999DE9F2C505&mode=1&verCode=5000101&insTs=1794411459';\nvar QC_B64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/';\nfunction QC_b64(x){var o='';for(var i=0;i<x.length;i+=3){var a=x[i]&255,b=i+1<x.length?x[i+1]&255:0,c=i+2<x.length?x[i+2]&255:0,n=(a<<16)|(b<<8)|c;o+=QC_B64.charAt((n>>18)&63)+QC_B64.charAt((n>>12)&63)+(i+1<x.length?QC_B64.charAt((n>>6)&63):'=')+(i+2<x.length?QC_B64.charAt(n&63):'=');}return o;}\nfunction QC_dec1(s){var o='';for(var i=0;i<s.length;i++){if(s.charAt(i)==='%'&&i+2<s.length){var h=s.slice(i+1,i+3);if(\/^[0-9a-fA-F]{2}$\/.test(h)){o+=String.fromCharCode(parseInt(h,16));i+=2;continue;}}o+=s.charAt(i);}return o;}\nfunction QC_hm(s){var m=Packages.javax.crypto.Mac.getInstance('HmacSHA256');m.init(new Packages.javax.crypto.spec.SecretKeySpec(new Packages.java.lang.String(QC_KEY).getBytes('UTF-8'),'HmacSHA256'));var d=m.doFinal(new Packages.java.lang.String(s).getBytes('UTF-8'));var o='';for(var i=0;i<d.length;i++){var h=(d[i]&255).toString(16);o+=h.length<2?'0'+h:h;}return o;}\nfunction QC_ec(s){var c=Packages.javax.crypto.Cipher.getInstance('DES\/ECB\/NoPadding');c.init(Packages.javax.crypto.Cipher.ENCRYPT_MODE,new Packages.javax.crypto.spec.SecretKeySpec(new Packages.java.lang.String(QC_DESK).getBytes('UTF-8'),'DES'));return QC_b64(c.doFinal(new Packages.java.lang.String(s).getBytes('UTF-8')));}\nfunction QC_jurl(s){return String(Packages.java.net.URLEncoder.encode(s,'UTF-8'));}\nfunction QC_sign(path,queryExtra,body){\n  var q=QC_COMMON+(queryExtra?'&'+queryExtra:'');\n  var d={},ps=String(body||'').split('&');\n  for(var i=0;i<ps.length;i++){var p=ps[i].indexOf('=');if(p>0)d[ps[i].slice(0,p)]=QC_dec1(ps[i].slice(p+1));}\n  var ks=[];for(var k in d)ks.push(k);ks.sort();\n  var so=[];for(var i=0;i<ks.length;i++)if(d[ks[i]]!=='')so.push(ks[i]+'='+d[ks[i]]);\n  var plain=QC_R0+'&sign='+QC_hm(path+q+'&'+QC_R0+'&'+so.join('&'));\n  var L=new Packages.java.lang.String(plain).getBytes('UTF-8').length;\n  while(L%8!==0){plain+='\\u0001';L++;}\n  return path+'?'+q+'&_p='+QC_jurl(QC_ec(plain));\n}\n\n\/* QC_url: 纯函数, 返回带签名的完整 URL (不含 java 绑定) *\/\nfunction QC_url(path, qe, body, host){\n  return 'https:\/\/' + (host || 'goway.reader.yueyouxs.com') + QC_sign(path, qe, body);\n}\nfunction QC_opt(body){\n  return JSON.stringify({\"method\":\"POST\",\"headers\":{\"Content-Type\":\"application\/x-www-form-urlencoded\",\"User-Agent\":\"okhttp\/4.10.0\"},\"body\":body});\n}\nfunction QC_clean(s){ return String(s==null?'':s).replace(\/<[^>]*>\/g,'').replace(\/&nbsp;\/g,' ').replace(\/&amp;\/g,'&'); }\nfunction QC_post(path, qe, body, host, jv){\n  return String(jv.ajax(QC_url(path,qe,body,host) + ',' + QC_opt(body)));\n}\n","lastUpdateTime":"1794548526828","loginUi":"[{\"name\": \"状态\", \"type\": \"button\", \"action\": \"QC_checkLogin(java)\", \"viewName\": \"QC_statusLabel()\"}, {\"name\": \"线路\", \"type\": \"button\", \"action\": \"QC_testMs(java)\", \"viewName\": \"QC_lineLabel()\"}, {\"name\": \"🔍 检查登录状态\", \"type\": \"button\", \"action\": \"QC_checkLogin(java)\"}, {\"name\": \"⚡ 测试官方API延时\", \"type\": \"button\", \"action\": \"QC_testMs(java)\"}, {\"name\": \"📚 测试目录·正文线路\", \"type\": \"button\", \"action\": \"QC_testDl(java)\"}, {\"name\": \"🧪 签名票据自检\", \"type\": \"button\", \"action\": \"QC_selfTest(java)\"}]","loginUrl":"\/* 青橙小说 签名库 (QC) —— 静态票据 + 按 path\/query\/body 重算 sign\n   自 com.qingcheng.reader 5.0.1.1 \/ libnative-lib.so\n   _s   = MD5(deviceId+userId) 固定\n   sign = HMAC-SHA256(KEY, path+encodedQuery+\"&\"+R0+\"&\"+排序POST参数(解一层URL编码))\n   _p   = URLEncode(DES\/ECB\/NoPadding(DESK, R0+\"&sign=\"+sign + \\u0001填充到8倍数)) Base64\n   注: R0 内 uth 依赖旧 time, 故 time 必须固定为抓包时刻; 服务端实测无时间窗口(40min+仍有效)\n*\/\nvar QC_KEY='NiozHhg\/lMm5ja-DVEV_jzk$,t0B4*$5';\nvar QC_DESK='snY%169j';\nvar QC_R0='utId=&deviceId=ylms&userId=y233108512&sex=unknown&tmpToken=18ed8908ad0749d2ab6e1dc91f055eec&st=4&uth=21920cda455ba0f3883dc675899c5354&oaid=&udid=';\nvar QC_COMMON='platId=2&appId=com.qingcheng.reader&channelId=qingchengxs&appVersion=5.0.1&srcChannelId=qingchengxs&time=1794411627&_s=0D8E1B4226B86B69A867999DE9F2C505&mode=1&verCode=5000101&insTs=1794411459';\nvar QC_B64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/';\nfunction QC_b64(x){var o='';for(var i=0;i<x.length;i+=3){var a=x[i]&255,b=i+1<x.length?x[i+1]&255:0,c=i+2<x.length?x[i+2]&255:0,n=(a<<16)|(b<<8)|c;o+=QC_B64.charAt((n>>18)&63)+QC_B64.charAt((n>>12)&63)+(i+1<x.length?QC_B64.charAt((n>>6)&63):'=')+(i+2<x.length?QC_B64.charAt(n&63):'=');}return o;}\nfunction QC_dec1(s){var o='';for(var i=0;i<s.length;i++){if(s.charAt(i)==='%'&&i+2<s.length){var h=s.slice(i+1,i+3);if(\/^[0-9a-fA-F]{2}$\/.test(h)){o+=String.fromCharCode(parseInt(h,16));i+=2;continue;}}o+=s.charAt(i);}return o;}\nfunction QC_hm(s){var m=Packages.javax.crypto.Mac.getInstance('HmacSHA256');m.init(new Packages.javax.crypto.spec.SecretKeySpec(new Packages.java.lang.String(QC_KEY).getBytes('UTF-8'),'HmacSHA256'));var d=m.doFinal(new Packages.java.lang.String(s).getBytes('UTF-8'));var o='';for(var i=0;i<d.length;i++){var h=(d[i]&255).toString(16);o+=h.length<2?'0'+h:h;}return o;}\nfunction QC_ec(s){var c=Packages.javax.crypto.Cipher.getInstance('DES\/ECB\/NoPadding');c.init(Packages.javax.crypto.Cipher.ENCRYPT_MODE,new Packages.javax.crypto.spec.SecretKeySpec(new Packages.java.lang.String(QC_DESK).getBytes('UTF-8'),'DES'));return QC_b64(c.doFinal(new Packages.java.lang.String(s).getBytes('UTF-8')));}\nfunction QC_jurl(s){return String(Packages.java.net.URLEncoder.encode(s,'UTF-8'));}\nfunction QC_sign(path,queryExtra,body){\n  var q=QC_COMMON+(queryExtra?'&'+queryExtra:'');\n  var d={},ps=String(body||'').split('&');\n  for(var i=0;i<ps.length;i++){var p=ps[i].indexOf('=');if(p>0)d[ps[i].slice(0,p)]=QC_dec1(ps[i].slice(p+1));}\n  var ks=[];for(var k in d)ks.push(k);ks.sort();\n  var so=[];for(var i=0;i<ks.length;i++)if(d[ks[i]]!=='')so.push(ks[i]+'='+d[ks[i]]);\n  var plain=QC_R0+'&sign='+QC_hm(path+q+'&'+QC_R0+'&'+so.join('&'));\n  var L=new Packages.java.lang.String(plain).getBytes('UTF-8').length;\n  while(L%8!==0){plain+='\\u0001';L++;}\n  return path+'?'+q+'&_p='+QC_jurl(QC_ec(plain));\n}\n\n\/* ===== 运维面板 ===== *\/\n\n\/* 青橙小说 运维面板(精简版): 本源固定官方域, 无发布页线路轮换; 游客态免登录 *\/\nfunction login(){ return 'ok'; }\nfunction QC_tip(jv,msg,key,val){\n  try{jv.toast(String(msg));}catch(e){}\n  try{jv.longToast(String(msg));}catch(e){}\n  try{if(key)jv.put(key,String(val==null?msg:val));}catch(e){}\n  try{jv.reLoginView(false);}catch(e){try{jv.reUiView(false);}catch(e2){}}\n  return String(msg);\n}\nfunction QC_get(jv,k,d){var v='';try{v=String(jv.get(k)||'');}catch(e){}return v||d;}\n\/* ① 检查登录状态: 本源游客态即可用, 显示票据与接口状态 *\/\nfunction QC_checkLogin(jv){\n  QC_tip(jv,'⏳ 正在检查接口与票据状态…','qcStatus','检查中…');\n  var body='bookId=272713&needChapter=0&needRecommend=0',ok=false,ms=0,code='?',t0=Date.now();\n  try{\n    var u='https:\/\/goway.reader.yueyouxs.com'+QC_sign('\/goway\/goread\/app\/book\/detail','',body);\n    var o=JSON.stringify({\"method\":\"POST\",\"headers\":{\"Content-Type\":\"application\/x-www-form-urlencoded\",\"User-Agent\":\"okhttp\/4.10.0\"},\"body\":body});\n    var s=String(jv.ajax(u+','+o)); ms=Date.now()-t0;\n    try{code=String(JSON.parse(s).code);}catch(e){}\n    ok=(code==='0');\n  }catch(e){}\n  var state=ok?'✅ 游客态可用（本源无需登录）':'❌ 接口异常 code='+code;\n  return QC_tip(jv,'登录状态：'+state+'｜票据 _s 静态有效｜延时 '+ms+'ms','qcStatus',(ok?'游客态OK':'异常')+' '+ms+'ms');\n}\n\/* ② 官方 API 线路延时测试(单域, ms 写入状态按钮) *\/\nfunction QC_testMs(jv){\n  QC_tip(jv,'⏳ 正在测试官方 API 线路延时…','qcStatus','测速中…');\n  var body='bookId=272713&needChapter=0&needRecommend=0',ms='失败',ok=false;\n  var t0=Date.now();\n  try{\n    var u='https:\/\/goway.reader.yueyouxs.com'+QC_sign('\/goway\/goread\/app\/book\/detail','',body);\n    var o=JSON.stringify({\"method\":\"POST\",\"headers\":{\"Content-Type\":\"application\/x-www-form-urlencoded\",\"User-Agent\":\"okhttp\/4.10.0\"},\"body\":body});\n    var s=String(jv.ajax(u+','+o));\n    ok=(s.indexOf('\"code\":0')>=0&&s.indexOf('bookName')>=0);\n    ms=ok?String(Date.now()-t0)+'ms':'不可用';\n  }catch(e){}\n  jv.put('qcSpeed',ms);\n  return QC_tip(jv,(ok?'✅ 官方线路正常 ':'❌ 官方线路异常 ')+ms,'qcStatus','官方线路 '+ms);\n}\n\/* ③ 目录\/正文线路延时测试 *\/\nfunction QC_testDl(jv){\n  QC_tip(jv,'⏳ 正在测试目录·正文线路延时…','qcStatus','测速中…');\n  var qe='bookId=272713&chapterId=0&isAll=1',ms='失败',ok=false,t0=Date.now();\n  try{\n    var u='https:\/\/dl.reader.yueyouxs.com'+QC_sign('\/userCenter\/getChapterList',qe,'tmp=');\n    var o=JSON.stringify({\"method\":\"POST\",\"headers\":{\"Content-Type\":\"application\/x-www-form-urlencoded\",\"User-Agent\":\"okhttp\/4.10.0\"},\"body\":\"tmp=\"});\n    var s=String(jv.ajax(u+','+o));\n    ok=(s.indexOf('\"code\":0')>=0&&s.indexOf('chapterId')>=0);\n    ms=ok?String(Date.now()-t0)+'ms':'不可用';\n  }catch(e){}\n  jv.put('qcSpeedDl',ms);\n  return QC_tip(jv,(ok?'✅ 目录·正文线路正常 ':'❌ 目录·正文线路异常 ')+ms,'qcStatus','DL线路 '+ms);\n}\n\/* ④ 签名票据自检(重放比对, 内联签名库已在上方) *\/\nfunction QC_selfTest(jv){\n  QC_tip(jv,'⏳ 正在校验签名算法…','qcStatus','自检中…');\n  var cap='8V2uOfk%2BpFEuFu1J9nzFSeDyHv%2FOQgsQenZywqH7gBHpM%2FLtd%2FKPiKPTOS7aisJR1ltB3Zvzx2aLVhM1cNqMfcb8GXmQJO2bQuNS4CQqnjgQkU0zCzziJRuwtQmEFVbtlfDwvxsOUFO6ibx%2Fbu1dZGOV4rtnAngaC7ff7RUc2JVJKnwp1%2BKAdqA8iYZUvh1OwcmKRoDc2sJsNjSR%2FTJEdK%2BOLxPDSsU93PlW37m%2FFNg1lKWycncbvRTnLfDsABhvvwxvOUxexfRg0bxifksRZLOMjNtnoxJe';\n  var B='trace=20_20-17-1x265526%253FisRead%253D0%2526sectionId%253D295%2526id%253D5348&needRecommend=0&shelfBookIds=272713%2C271939%2C266764%2C275277%2C247700%2C272997%2C265526%2C269934&needChapter=0&bookId=272713';\n  var mine='';\n  try{\n    var d={},ps=B.split('&');\n    for(var i=0;i<ps.length;i++){var p=ps[i].indexOf('=');if(p>0)d[ps[i].slice(0,p)]=QC_dec1(ps[i].slice(p+1));}\n    var ks=[];for(var k in d)ks.push(k);ks.sort();\n    var so=[];for(var i=0;i<ks.length;i++)if(d[ks[i]]!=='')so.push(ks[i]+'='+d[ks[i]]);\n    var plain=QC_R0+'&sign='+QC_hm('\/goway\/goread\/app\/book\/detail'+QC_COMMON+'&'+QC_R0+'&'+so.join('&'));\n    var L=new Packages.java.lang.String(plain).getBytes('UTF-8').length;\n    while(L%8!==0){plain+='\\u0001';L++;}\n    mine=QC_jurl(QC_ec(plain));\n  }catch(e){mine='ERR '+e;}\n  var ok=(mine===cap);\n  return QC_tip(jv,(ok?'✅ 签名算法自检通过（与官方密文字节级一致）':'❌ 签名自检失败：'+String(mine).slice(0,60)),'qcStatus',ok?'签名OK':'签名异常');\n}\n\/* viewName 动态文本(viewName 环境有 java 绑定) *\/\nfunction QC_statusLabel(){\n  var s='';try{s=String(java.get('qcStatus')||'未检测');}catch(e){s='未检测';}\n  return '状态：'+s;\n}\nfunction QC_lineLabel(){\n  var a='';try{a=String(java.get('qcSpeed')||'待测试');}catch(e){a='待测试';}\n  var b='';try{b=String(java.get('qcSpeedDl')||'待测试');}catch(e){b='待测试';}\n  return '🟢 官方 goway '+a+' ｜ 目录·正文 dl '+b;\n}\n","respondTime":180000,"ruleBookInfo":{"author":"$.author","coverUrl":"$.coverUrl","init":"@js:\n(function(){\n  var id = String(baseUrl).replace(\/^.*?bookId=([0-9]+).*$\/,'$1');\n  if(!\/^[0-9]+$\/.test(id)){ try{ id = String(book.bookUrl||'').replace(\/^.*?bookId=([0-9]+).*$\/,'$1'); }catch(e){} }\n  if(!\/^[0-9]+$\/.test(id)) return '{}';\n  var body = 'bookId=' + id + '&needChapter=0&needRecommend=0';\n  var raw = QC_post('\/goway\/goread\/app\/book\/detail','',body,'goway.reader.yueyouxs.com',java);\n  var j = {}; try{ j = JSON.parse(raw); }catch(e){}\n  var b = (j.data && j.data.book) || {};\n  return JSON.stringify({\n    name: QC_clean(b.bookName), author: QC_clean(b.authorName),\n    kind: (b.classifyName||'') + '\/' + (b.classifySecondName||'') + '\/' + (b.tag||''),\n    wordCount: b.wordsDesc||'', lastChapter: b.latestChapterName||'',\n    intro: String(b.intro||'').replace(\/\\r\/g,''), coverUrl: b.bookPic||'',\n    tocUrl: 'https:\/\/dl.reader.yueyouxs.com\/userCenter\/getChapterList?bookId=' + id + '&chapterId=0&isAll=1'\n  });\n})()","intro":"$.intro","kind":"$.kind","lastChapter":"$.lastChapter","name":"$.name","tocUrl":"$.tocUrl","wordCount":"$.wordCount"},"ruleContent":{"content":"@js:\n(function(){\n  var u = String(baseUrl);\n  var mb = u.match(\/bookId=([0-9]+)\/), mc = u.match(\/chapterId=([0-9]+)\/);\n  if(!mb || !mc) return '';\n  var body = 'inBuyView=false&ossSwitch=0&feeState=0&chapterId=' + mc[1] + '&useSrvAutoBuy=1&readCount=0&autoBuy=false&isOssed=0&bookId=' + mb[1];\n  var raw = QC_post('\/userCenter\/v310\/downloadChapter','',body,'dl.reader.yueyouxs.com',java);\n  var j = {}; try{ j = JSON.parse(raw); }catch(e){}\n  var cu = j.data && j.data.contentUrl;\n  if(!cu) return '［获取失败］' + (j.msg||'无正文直链');\n  var txt = String(java.ajax(cu));\n  if(txt.indexOf('<?xml')===0 || txt.indexOf('<Error')>=0) return '［获取失败］' + txt.slice(0,120);\n  return txt.replace(\/\\r\/g,'').replace(\/^\\s+|\\s+$\/g,'');\n})()"},"ruleExplore":{"author":"$.author","bookList":"@js:\n(function(){\n  var raw=String(result || (typeof src!=='undefined'?src:'') || '');\n  var j={};try{j=JSON.parse(raw);}catch(e){}\n  var arr=[];\n  if(j.data){\n    if(Array.isArray(j.data)) arr=j.data;\n    else if(j.data.list && Array.isArray(j.data.list)) arr=j.data.list;\n    else if(j.data.bookList && Array.isArray(j.data.bookList)) arr=j.data.bookList;\n    else if(j.data.rankList && Array.isArray(j.data.rankList)) arr=j.data.rankList;\n  }\n  var list=new Packages.java.util.ArrayList();\n  for(var i=0;i<arr.length;i++){\n    var b=arr[i]; if(!b) continue;\n    var bid=b.bookId||b.id||b.wapBookId; if(!bid) continue;\n    var nm=b.bookName||'';\n    list.add(JSON.stringify({\n      name:QC_clean(nm), author:QC_clean(b.authorName||''),\n      coverUrl:b.bookPic||'',\n      kind:(b.classifyName||'')+'\/'+(b.classifySecondName||'')+' · '+(b.wordsDesc||''),\n      intro:String(b.introOrRec||b.intro||'').replace(\/\\r\/g,''),\n      bookUrl:'https:\/\/goway.reader.yueyouxs.com\/goway\/goread\/app\/book\/detail?bookId='+bid\n    }));\n  }\n  return list;\n})()","bookUrl":"$.bookUrl","coverUrl":"$.coverUrl","intro":"$.intro","kind":"$.kind","name":"$.name"},"ruleSearch":{"author":"$.author","bookList":"@js:\n(function(){\n  var raw = String(result || (typeof src!=='undefined'?src:'') || '');\n  var j = {}; try{ j = JSON.parse(raw); }catch(e){}\n  var arr = (j.data && j.data.list && Array.isArray(j.data.list)) ? j.data.list : [];\n  var list = new Packages.java.util.ArrayList();\n  for(var i=0;i<arr.length;i++){\n    var b = arr[i];\n    if(!b.id) continue;\n    list.add(JSON.stringify({\n      name: QC_clean(b.bookName), author: QC_clean(b.authorName),\n      kind: (b.tag||'') , wordCount: b.wordsDesc||'', intro: String(b.intro||'').replace(\/\\r\/g,''),\n      coverUrl: b.bookPic||'',\n      bookUrl: 'https:\/\/goway.reader.yueyouxs.com\/goway\/goread\/app\/book\/detail?bookId=' + b.id\n    }));\n  }\n  return list;\n})()","bookUrl":"$.bookUrl","coverUrl":"$.coverUrl","intro":"$.intro","kind":"$.kind","name":"$.name","wordCount":"$.wordCount"},"ruleToc":{"chapterList":"@js:\n(function(){\n  var id = String(baseUrl).replace(\/^.*?bookId=([0-9]+).*$\/,'$1');\n  if(!\/^[0-9]+$\/.test(id)) return new Packages.java.util.ArrayList();\n  var qe = 'bookId=' + id + '&chapterId=0&isAll=1';\n  var txt = QC_post('\/userCenter\/getChapterList', qe, 'tmp=', 'dl.reader.yueyouxs.com', java);\n  var j = {}; try{ j = JSON.parse(txt); }catch(e){}\n  var arr = (j.data && Array.isArray(j.data)) ? j.data : [];\n  var list = new Packages.java.util.ArrayList();\n  for(var i=0;i<arr.length;i++){\n    var c = arr[i];\n    list.add(JSON.stringify({\n      name: String(c.chapterName||''),\n      url: 'https:\/\/dl.reader.yueyouxs.com\/userCenter\/v310\/downloadChapter?bookId=' + id + '&chapterId=' + c.chapterId,\n      vip: (c.isFee===1 || c.vip===1)\n    }));\n  }\n  return list;\n})()","chapterName":"$.name","chapterUrl":"$.url","isVip":"$.vip"},"searchUrl":"@js:\n(function(){\n  var kw = String(key||'');\n  var body = 'keyword=' + kw + '&page=' + page + '&psize=20&withRecommend=1';\n  return QC_url('\/goway\/goread\/app\/search\/v4\/getBookByKeyword','',body) + ',' + QC_opt(body);\n})()","weight":0}]