📖 星辰小说
https://quickapi.biduwenxue.com/api/xingchen
laizhiyu (6509)1天前
API书源
{
"bookSourceGroup": "纯接口,API",
"bookSourceName": "📖 星辰小说",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/quickapi.biduwenxue.com\/api\/xingchen",
"bookUrlPattern": "https?:\/\/(?:quickapi|m|api|imgcdn)[a-z0-9.\\-]*\\.biduwenxue\\.com\/api\/book\/info\\?.*?bookId=\\d+",
"concurrentRate": "1\/800",
"customButton": false,
"customOrder": 1,
"enabled": true,
"enabledCookieJar": false,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:(function(){\n \/\/ 读当前 API 线路(多通道兜底,@js 环境绑定差异大)\n var B='';\n try{B=XC_base()}catch(e0){}\n if(!B){try{B=XC_ok(source.get('xcLine'))}catch(e1){}}\n if(!B){try{var vv=String(this.source.getVariable()||'');var oo=vv?(JSON.parse(vv)||{}):{};B=XC_ok(oo.xcLine)}catch(e2){}}\n if(!B){try{B=XC_ok(java.get('xcLine'))}catch(e3){}}\n if(!B){try{B=XC_ok(cache.get('xcLine'))}catch(e4){}}\n if(!B)B='https:\/\/quickapi.biduwenxue.com';\n if(String(B).indexOf('http')!==0)B='https:\/\/quickapi.biduwenxue.com';\n B=String(B).replace(\/\\\/+$\/,'');\n var OPT=JSON.stringify({method:'POST',body:'x=1',headers:{'Content-Type':'application\/x-www-form-urlencoded'}});\n \/\/ 选中频道:infoMap 优先(select 真机注入)→ java.get 兜底 → 默认男频\n var ch='',hasIm=false;\n try{if(typeof infoMap!=='undefined'&&infoMap['频道']){ch=String(infoMap['频道']);hasIm=true}}catch(e5){}\n if(!hasIm){try{var v2=String(java.get('xcChannel')||'');if(v2)ch=v2}catch(e6){}}\n if(ch!=='男频'&&ch!=='女频')ch='男频';\n var pd=(ch==='男频')?1:2, mark=(ch==='男频')?'♂ ':'♀ ';\n \/\/ 全部条目均来自 ProxyPin 抓包中 App 真实操作的接口与响应:\n \/\/ allCategorys(男17\/女7) \/ book.rankList(男女各3榜) \/\n \/\/ columnList(appname=lingmao-android -> 男生id9 女生id10) \/\n \/\/ columnContent(每栏目3个 xmbdName) \/ xmbd.bookList(xmbdId 36..41)\n var CFG={\"男频\": {\"colId\": 9, \"colName\": \"男生\", \"lists\": [[36, \"老书虫热推\"], [37, \"全网齐上新\"], [38, \"经典耐看\"]]}, \"女频\": {\"colId\": 10, \"colName\": \"女生\", \"lists\": [[39, \"通勤路上看\"], [40, \"午休睡前看\"], [41, \"晚上自己看\"]]}};\n var ALLC={\"男频\": [[1, \"都市热血\"], [2, \"玄幻爽文\"], [3, \"历史权谋\"], [4, \"武侠仙侠\"], [6, \"末世脑洞\"], [7, \"悬疑恐怖\"], [25, \"都市逆袭\"], [26, \"都市重生\"], [27, \"都市修真\"], [28, \"都市战神\"], [29, \"都市小白\"], [31, \"都市异能\"], [32, \"都市脑洞\"], [33, \"都市乡土\"], [34, \"玄幻奇幻\"], [35, \"玄幻脑洞\"], [36, \"历史架空\"]], \"女频\": [[10, \"现言\"], [11, \"古言\"], [12, \"幻想言情\"], [14, \"穿越重生\"], [41, \"穿越架空\"], [44, \"风水灵异\"], [45, \"推理刑侦\"]]};\n var RKS=[[1, \"人气榜\"], [2, \"收藏榜\"], [3, \"字数榜\"]];\n var CATS=ALLC[ch]||ALLC['男频'];\n var c=CFG[ch];\n var out=[];\n \/\/ ① 频道 select:infoMap 优先 → result 兜底 → java.refreshExplore() 清两级缓存重绘\n out.push({title:'频道',type:'select',chars:['男频','女频'],default:'男频',\n action:\"(function(){var v='';try{if(typeof infoMap!=='undefined'&&infoMap['频道'])v=String(infoMap['频道']);}catch(e){}if(!v){try{if(typeof result!=='undefined'&&result&&result.get)v=String(result.get('频道')||'');}catch(e2){}}if(v){java.put('xcChannel',v);java.toast('✅ 已切换到频道:'+v);}else{java.toast('⚠ 未取到频道选项,保持原频道');}try{java.refreshExplore();}catch(e3){try{java.reUiView(true);}catch(e4){}}})()\",\n style:{layout_flexBasisPercent:1,layout_wrapBefore:true}});\n \/\/ ② 当前频道状态行(动态文本,纯文本不带外层引号)\n out.push({title:'当前频道',type:'button',action:\"java.toast('当前频道:'+(java.get('xcChannel')||'男频'))\",\n viewName:\"'当前频道:'+(java.get('xcChannel')||'男频')\",\n style:{layout_flexBasisPercent:1,layout_wrapBefore:true}});\n \/\/ ③ 榜单(book\/rankList 实测:男\/女各 人气\/收藏\/字数;rankBookList POST + {{page}} 原生翻页)\n for(var i=0;i<RKS.length;i++){\n \/\/ ★ 男频字数榜(rankType=3)站点 current=1 返回 data:[] 空壳,数据从 current=2 起\n \/\/ (抓包 17 条 rankBookList 从无 rankType=3;对照 current=1 空 \/ 2 有2本 \/ 3 有10本 \/ 4 有1本)。\n \/\/ 换 appname\/pageSize\/完整设备参数均无效 ⇒ 站点数据缺陷,用页码偏移 +1 让首屏落到有数据的页。\n \/\/ 其它 5 个榜单 current=1 均有数据,保持 {{page}};女频字数榜 current=1 也有数据。\n var pgExpr=(pd===1 && RKS[i][0]===3)?'{{(function(){return (Number(page)||1)+1})()}}':'{{page}}';\n out.push({title:mark+RKS[i][1],\n url:B+'\/api\/rankBookList?current='+pgExpr+'&pindao='+pd+'&rankType='+RKS[i][0]+'&pageSize=30,'+OPT,\n style:{layout_flexBasisPercent:0.33,layout_flexGrow:0}});\n }\n \/\/ ④ 精品栏目(columnContent 该频道栏目,@js 摊平 3 个 dataList;站点一次返回全部,不带 {{page}})\n out.push({title:'✨ '+c.colName+'·精品书单',\n url:B+'\/api\/boutique\/columnContent?columnId='+c.colId+','+OPT,\n style:{layout_flexBasisPercent:1,layout_wrapBefore:true}});\n \/\/ ⑤ 该频道 3 个真实书单(xmbdName 取自抓包 columnContent 的 data[].xmbdName;current=2 空=不分页)\n for(var k=0;k<c.lists.length;k++){\n out.push({title:'📚 '+c.lists[k][1],\n url:B+'\/api\/xmbd\/bookList?xmbdId='+c.lists[k][0]+'¤t=1,'+OPT,\n style:{layout_flexBasisPercent:0.33,layout_flexGrow:0}});\n }\n \/\/ ⑥ 该频道分类(search\/lib GET + {{page}};分类名取自抓包 allCategorys)\n for(var j=0;j<CATS.length;j++){\n out.push({title:mark+CATS[j][1],\n url:B+'\/api\/search\/lib?s='+CATS[j][0]+'&pageNo={{page}}&pageSize=30',\n style:{layout_flexBasisPercent:0.33,layout_flexGrow:0}});\n }\n return JSON.stringify(out);\n})()\n",
"header": "{\"User-Agent\": \"okhttp\/4.9.2\"}",
"jsLib": "function XC_ok(v){\n var s='';try{s=String(v)}catch(e){return ''}\n if(!s||s==='null'||s==='undefined')return '';\n if(s.indexOf('http')!==0)s='https:\/\/'+s;\n var m=\/^(https?:\\\/\\\/[^\\\/]+)\/.exec(s);return m?m[1]:'';\n}\nfunction XC_base(){\n var d='';\n try{d=XC_ok(source.get('xcLine'))}catch(e0){}\n if(!d){try{var v=String(this.source.getVariable()||'');var o=v?(JSON.parse(v)||{}):{};d=XC_ok(o.xcLine)}catch(e1){}}\n if(!d){try{d=XC_ok(java.get('xcLine'))}catch(e2){}}\n if(!d){try{d=XC_ok(cache.get('xcLine'))}catch(e3){}}\n if(!d){try{d=XC_ok(java.get('xcLine'))}catch(e4){}}\n if(!d)d='https:\/\/quickapi.biduwenxue.com';\n return d;\n}\nfunction XC_cover(c){\n c=String(c||'');\n if(!c||c==='null'||c==='undefined')return '';\n if(c.indexOf('http')===0)return c;\n return 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com\/'+c.replace(\/^\\\/+\/, '');\n}\nfunction XC_arr(){return new Packages.java.util.ArrayList()}\n",
"lastUpdateTime": "1794548470379",
"loginUi": "[{\"name\": \"发布页\", \"type\": \"text\", \"viewName\": \"'网址发布页地址'\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"name\": \"应用发布页\", \"type\": \"button\", \"action\": \"XC_pubFrom(result)\", \"viewName\": \"'💾 应用发布页地址'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"获取路线\", \"type\": \"button\", \"action\": \"XC_fetchPub()\", \"viewName\": \"'🧭 一键从发布页获取网址路线'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"测试延时\", \"type\": \"button\", \"action\": \"XC_testAll()\", \"viewName\": \"'⏱ 测试延时(ms写入各网址按钮)'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"检查登录状态\", \"type\": \"button\", \"action\": \"XC_checkLogin()\", \"viewName\": \"'🔍 检查登录状态\/线路可用性'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"当前线路\", \"type\": \"label\", \"viewName\": \"XC_curLineText()\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"name\": \"网址列表\", \"type\": \"button\", \"action\": \"\", \"viewName\": \"'━━━ 点击切换网址(延时见按钮名)━━━'\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}, {\"name\": \"网址1\", \"type\": \"button\", \"action\": \"XC_switch(1)\", \"viewName\": \"XC_lineBtn(1)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"网址2\", \"type\": \"button\", \"action\": \"XC_switch(2)\", \"viewName\": \"XC_lineBtn(2)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"网址3\", \"type\": \"button\", \"action\": \"XC_switch(3)\", \"viewName\": \"XC_lineBtn(3)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"网址4\", \"type\": \"button\", \"action\": \"XC_switch(4)\", \"viewName\": \"XC_lineBtn(4)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"网址5\", \"type\": \"button\", \"action\": \"XC_switch(5)\", \"viewName\": \"XC_lineBtn(5)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"网址6\", \"type\": \"button\", \"action\": \"XC_switch(6)\", \"viewName\": \"XC_lineBtn(6)\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"显示线路\", \"type\": \"button\", \"action\": \"XC_showLines()\", \"viewName\": \"'📋 显示当前全部线路'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"恢复默认\", \"type\": \"button\", \"action\": \"XC_reset()\", \"viewName\": \"'↩ 恢复默认线路'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"打开发布页\", \"type\": \"button\", \"action\": \"XC_web()\", \"viewName\": \"'🌐 打开网址发布页'\", \"style\": {\"layout_flexBasisPercent\": 0.48, \"layout_flexGrow\": 1}}, {\"name\": \"说明\", \"type\": \"label\", \"viewName\": \"'ℹ 星辰小说:游客免登会员,无需登录;本面板仅用于线路运维'\", \"style\": {\"layout_flexBasisPercent\": 1, \"layout_wrapBefore\": true}}]",
"loginUrl": "\/\/ ============ 星辰小说 · 发布页\/线路运维面板 ============\n\/\/ APK Url.BASE_URL 固定 https:\/\/quickapi.biduwenxue.com;版本配置发布页\n\/\/ https:\/\/imgcdn.biduwenxue.com\/apk\/server_lm.txt 内含 apiAddress\/h5Address 备用线路。\n\/\/ 本站游客自动注册(registerOrLogin\/user)即「免登会员」,无需账号密码登录;\n\/\/ 故无登录框,但按需求提供完整发布页\/线路运维面板 + 检查登录状态按钮。\n\/\/ 各按钮各阶段 Toast:开始 → 过程 → 结果\/失败。\n\/\/ 兼容 LT + legado-E:V1 静态 loginUi;viewName 动态文本只读 source(无 java 绑定);\n\/\/ action 由 SourceLoginDialog 拼 \"$loginJS\\n$action\" 后 eval,本文件函数全部可见。\nvar XC_MAX=6;\nvar XC_PUB_DEFAULT='https:\/\/imgcdn.biduwenxue.com\/apk\/server_lm.txt';\nvar XC_LINE_DEFAULT='https:\/\/quickapi.biduwenxue.com';\nvar XC_UA='okhttp\/4.9.2';\nvar XC_FALLBACK=[\n 'https:\/\/quickapi.biduwenxue.com','http:\/\/quickapi.biduwenxue.com',\n 'https:\/\/m.biduwenxue.com','https:\/\/imgcdn.biduwenxue.com',\n 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com'];\nfunction XC_toast(t){try{java.longToast(String(t))}catch(e){try{java.toast(String(t))}catch(e2){}}}\nfunction XC_gv(k,d){var v='';try{v=String(source.get(k))}catch(e){v=''}\n if(v===''||v==='null'||v==='undefined')v=d||'';return v}\nfunction XC_norm(u){var s=String(u||'').trim().replace(\/\\\/+$\/,'');\n if(s==='')return '';if(s.indexOf('http')!==0)s='https:\/\/'+s;\n var m=\/^(https?:\\\/\\\/[^\\\/]+)\/.exec(s);return m?m[1]:''}\nfunction XC_host(u){var m=\/^https?:\\\/\\\/([^\\\/]+)\/.exec(String(u));return m?m[1]:String(u)}\nfunction XC_hdr(){return JSON.stringify({'User-Agent':XC_UA})}\nfunction XC_pub(){return XC_gv('xcPub',XC_PUB_DEFAULT)}\nfunction XC_line(){var d=XC_norm(XC_gv('xcLine',XC_LINE_DEFAULT));return d.indexOf('http')===0?d:XC_LINE_DEFAULT}\nfunction XC_writeLine(L){\n L=XC_norm(L)||XC_LINE_DEFAULT;\n try{source.put('xcLine',L)}catch(e0){}\n try{var o={},v=String(source.getVariable()||'');try{o=v?(JSON.parse(v)||{}):{}}catch(e1){o={}}\n o.xcLine=L;source.setVariable(JSON.stringify(o))}catch(e2){}\n try{java.put('xcLine',L)}catch(e3){}\n try{cache.put('xcLine',L)}catch(e4){}\n return L;\n}\nfunction XC_setFound(list){var out=[],i,u;\n for(i=0;i<list.length&&out.length<XC_MAX;i++){u=XC_norm(list[i]);if(u&&out.indexOf(u)<0)out.push(u)}\n if(!out.length)out=XC_FALLBACK.slice(0);\n source.put('xcFound',out.join(' '));\n for(i=0;i<XC_MAX;i++)source.put('xcDelay'+i,'');\n return out;}\nfunction XC_found(){var s=XC_gv('xcFound','');if(!s)return XC_setFound(XC_FALLBACK);\n var a=s.split(\/\\s+\/),out=[],i;\n for(i=0;i<a.length&&out.length<XC_MAX;i++){var u=XC_norm(a[i]);if(u&&out.indexOf(u)<0)out.push(u)}\n return out.length?out:XC_setFound(XC_FALLBACK);}\nfunction XC_pubFrom(r){\n XC_toast('💾 正在保存发布页地址…');\n var v='';\n try{if(r&&r.get)v=String(r.get('发布页')||'')}catch(e0){}\n if(!v){try{v=String(r['发布页']||'')}catch(eA){}}\n if(!v){try{if(result&&result.get)v=String(result.get('发布页')||'')}catch(e1){}}\n if(!v){try{v=String(result['发布页']||'')}catch(eB){}}\n if(!v||!v.trim())v=XC_PUB_DEFAULT;\n var p=XC_norm(v);source.put('xcPub',p);\n XC_toast('✅ 发布页已设为:'+p+'\\n点「🧭 一键从发布页获取网址路线」生效');\n XC_refresh();}\nfunction XC_fetchPub(){\n var pub=XC_pub(),url=pub+'\/apk\/server_lm.txt';\n XC_toast('🧭 开始获取:正在打开发布页 '+XC_host(pub));\n var raw='',err='';\n try{raw=String(java.ajax(url+',{\"headers\":{\"User-Agent\":\"'+XC_UA+'\"},\"timeout\":10000}'))}catch(e){err=String(e).substring(0,90)}\n if(!err&&(raw.length<20||raw.indexOf('Exception')===0||raw.indexOf('timeout')>-1))err='发布页内容异常';\n if(err!==''){\n XC_toast('⚠ 发布页抓取失败('+err+'),载入内置 '+XC_FALLBACK.length+' 条兜底线路');\n XC_setFound(XC_FALLBACK);XC_toast('✅ 已载入内置线路;点「⏱ 测试延时」测速');XC_refresh();return;}\n XC_toast('🔓 发布页已获取('+raw.length+'B),正在解析线路…');\n var lines=[],i,u,m,re=\/https?:\\\/\\\/([a-z0-9][a-z0-9.\\-]*\\.[a-z]{2,}(?::[0-9]+)?)\/gi;\n while((m=re.exec(raw))!==null){u=XC_norm(m[0]);\n var hn=XC_host(u);\n \/\/ 只收本站家族域名;排除阿里云\/统计\/第三方 API 等非站点线路\n if(hn.indexOf('biduwenxue')<0)continue;\n if(u&&lines.indexOf(u)<0)lines.push(u)}\n var cur=XC_line();if(lines.indexOf(cur)<0)lines.unshift(cur);\n for(i=0;i<XC_FALLBACK.length&&lines.length<XC_MAX;i++)if(lines.indexOf(XC_FALLBACK[i])<0)lines.push(XC_FALLBACK[i]);\n var got=XC_setFound(lines);try{XC_writeLine(XC_line())}catch(eW){}\n XC_toast('✅ 共获取 '+got.length+' 条路线:\\n'+got.map(XC_host).join('\\n'));\n XC_toast('已写入各网址按钮;点「⏱ 测试延时」把 ms 写进按钮名');XC_refresh();}\nfunction XC_probe(u){var h=XC_host(u),p='';\n if(h.indexOf('quickapi')>-1)p='\/api\/book\/info?bookId=207376';\n else if(h.indexOf('imgcdn')>-1)p='\/apk\/server_lm.txt';\n else if(h.indexOf('oss-cn')>-1)p='\/pic\/book\/taoxiaoshuo\/207376.jpg?x-oss-process=image\/resize,w_90\/format,webp';\n else if(h.indexOf('m.biduwenxue')>-1)p='\/api\/m\/2022-11-1\/privacy_app.html';\n else p='\/';\n return u+p+',{\"headers\":{\"User-Agent\":\"'+XC_UA+'\"},\"timeout\":8000}';}\nfunction XC_testAll(){\n var list=XC_found();\n XC_toast('⏱ 开始测速:共 '+list.length+' 条线路,逐个请求真实业务路径(绝不测搜索)…');\n var i,t0,b,ms,tag,best=-1,bestMs=999999;\n for(i=0;i<list.length;i++){ms=-1;tag='✗ 不可达';t0=Date.now();\n try{b=String(java.ajax(XC_probe(list[i])));\n \/\/ 本站特征:quickapi 系须 code:0;imgcdn 系须 server_lm.txt 的 androidVersion;\n \/\/ oss 图床系返回二进制(长度>1000);m 系隐私页须含 html 标签。绝不按纯长度放行第三方域。\n var hn=XC_host(list[i]);\n var ok=false;\n if(hn.indexOf('quickapi')>-1)ok=b.indexOf('\"code\":0')>-1;\n else if(hn.indexOf('imgcdn')>-1)ok=b.indexOf('androidVersion')>-1||b.indexOf('apiAddress')>-1;\n else if(hn.indexOf('oss-cn')>-1)ok=b.length>1000;\n else ok=(b.indexOf('<html')>-1||b.indexOf('<!DOCTYPE')>-1)&&b.length>500;\n var bad=b.indexOf('Exception')>-1||b.indexOf('timeout')>-1||b.indexOf('Request method')>-1;\n if(bad)tag='✗ 异常';\n else if(ok){ms=Date.now()-t0;tag=ms+'ms';if(ms<bestMs){bestMs=ms;best=i}}\n else tag='✗ 内容异常('+b.length+'B)';\n }catch(e){tag='✗ '+String(e).substring(0,28)}\n source.put('xcDelay'+i,tag);\n XC_toast(' ['+(i+1)+'\/'+list.length+'] '+XC_host(list[i])+' → '+tag);}\n if(best>=0){source.put('xcDelay'+best,'⚡'+bestMs+'ms');\n XC_toast('🏁 测速完成:最快 '+XC_host(list[best])+' '+bestMs+'ms(点对应网址按钮切换)')}\n else XC_toast('⚠ 测速完成:暂无可用线路,请先「🧭 一键从发布页获取网址路线」');\n XC_refresh();}\nfunction XC_checkLogin(){\n var d=XC_line();XC_toast('🔍 正在检查当前线路:'+XC_host(d));\n var b='',code=0;\n try{var r=java.connect(d+'\/api\/book\/info?bookId=207376',XC_hdr(),15000);\n b=String(r.body());try{code=r.code?r.code():0}catch(eC){code=0}}\n catch(e){XC_toast('❌ 检查失败:'+String(e).substring(0,90));return}\n if(b.indexOf('Exception')>-1||(code&&(code<200||code>=400))||b.indexOf('\"code\":0')<0){\n XC_toast('❌ 当前线路不可用('+(code?('HTTP '+code):'无有效数据')+'),建议测速后切换线路');return}\n XC_toast('✅ 游客态可用(免登会员,无需登录)|线路 '+XC_host(d)+' 正常返回 code:0|本书源不依赖登录');}\nfunction XC_curLineText(){var l=XC_line(),dl='';\n try{dl=XC_gv('xcDelay'+XC_found().indexOf(l),'')}catch(e){}\n return '📍 当前线路:'+XC_host(l)+(dl?'('+dl+')':'')+'|点下方网址按钮切换';}\nfunction XC_lineBtn(n){var list=XC_found(),i=Number(n)-1;\n if(i<0||i>=list.length)return '━━ 网址'+n+' 未获取 ━━';\n var cur=XC_line(),mark=(list[i]===cur)?'▶ ':' ';\n var dl=XC_gv('xcDelay'+i,'');if(dl)mark+=dl+' ';\n return mark+XC_host(list[i]);}\nfunction XC_switch(n){var list=XC_found(),i=Number(n)-1;\n if(i<0||i>=list.length){XC_toast('⚠ 网址 '+n+' 尚未获取,请先点「🧭 一键从发布页获取网址路线」');return}\n var old=XC_line(),nw=list[i];XC_toast('🔄 正在切换到 '+XC_host(nw)+' …');\n XC_writeLine(nw);XC_toast('✅ 已切换:'+XC_host(old)+' → '+XC_host(nw));\n XC_toast('📍 搜索\/发现\/详情\/目录\/正文全部跟随新线路;请下拉刷新发现页');XC_refresh();}\nfunction XC_reset(){XC_toast('↩ 正在恢复默认线路…');XC_writeLine(XC_LINE_DEFAULT);\n XC_toast('✅ 已恢复默认:'+XC_LINE_DEFAULT);XC_refresh();}\nfunction XC_showLines(){XC_toast('📋 当前全部路线('+XC_found().length+'):\\n'+XC_found().map(XC_host).join('\\n'))}\nfunction XC_web(){var p=XC_pub();try{java.startBrowser(p+'\/apk\/server_lm.txt',p);XC_toast('🌐 已打开发布页 '+XC_host(p))}\n catch(e){XC_toast('❌ 打开发布页失败:'+String(e).substring(0,60))}}\nfunction XC_refresh(){var ok=false;\n try{java.reLoginView();ok=true}catch(e){try{java.reLoginView(false);ok=true}catch(e2){ok=false}}\n if(!ok)XC_toast('ℹ 按钮文字可能未即时刷新:重新打开本面板即可看到 ▶ 标记与延时');}\nfunction login(e){if(e!=undefined){XC_toast(String(e));return}\n XC_toast('✅ 星辰小说书源:游客免登(免登会员),无需账号密码');\n XC_toast('📍 当前线路 '+XC_host(XC_line())+'|发布页 '+XC_pub());}\n",
"respondTime": 180000,
"ruleBookInfo": {
"author": "$.author",
"coverUrl": "$.coverUrl",
"init": "@js:\n(function(){\nvar XB='';try{XB=XC_base()}catch(eB){}\nif(!XB){try{XB=XC_ok(source.get('xcLine'))}catch(eB2){}}\nif(!XB)XB='https:\/\/quickapi.biduwenxue.com';\nfunction CV(c){c=String(c||'');if(!c||c==='null'||c==='undefined')return '';\n if(c.indexOf('http')===0)return c;\n return 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com\/'+c.replace(\/^\\\/+\/, '');}\nvar o={};try{o=JSON.parse(String(result||''))}catch(e){o={}}\nvar d=o.data||{}, b=d.book||o.book||d, a=d.author||{}, c=d.category||{};\nvar bid=b.id||'';\nreturn JSON.stringify({\n name:String(b.title||''),\n author:String(a.nickname||b.authorName||''),\n coverUrl:CV(b.cover),\n intro:'<br>\\n📂 分类:'+String(c.name||b.categoryName||'')+'\\n🎗 标签:'+String(b.keywords||'')\n +'\\n📖 字数:'+String(b.wordCount||'')+'\\n🕰 更新:'+String(b.updateTime||'')\n +'\\n📝 简介:\\n'+String(b.intro||'').replace(\/\\r\/g,''),\n kind:String(c.name||'')+'\\n'+(String(b.completionStatus)==='NORMAL'?'完结':'连载')+'\\n评分 '+String(b.bookGrade||''),\n wordCount:String(b.wordCount||''),\n lastChapter:String(b.lastChapterTitle||''),\n tocUrl:XB+'\/api\/book\/chapters?bookId='+bid+'&pageNum=1&pageSize=100000'\n});\n})()",
"intro": "$.intro",
"kind": "$.kind",
"lastChapter": "$.lastChapter",
"name": "$.name",
"tocUrl": "$.tocUrl",
"wordCount": "$.wordCount"
},
"ruleContent": {
"content": "$.data.content"
},
"ruleExplore": {
"author": "$.author",
"bookList": "@js:\n(function(){\nvar XB='';try{XB=XC_base()}catch(eB){}\nif(!XB){try{XB=XC_ok(source.get('xcLine'))}catch(eB2){}}\nif(!XB)XB='https:\/\/quickapi.biduwenxue.com';\nfunction CV(c){c=String(c||'');if(!c||c==='null'||c==='undefined')return '';\n if(c.indexOf('http')===0)return c;\n return 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com\/'+c.replace(\/^\\\/+\/, '');}\nvar o={};try{o=JSON.parse(String(result||''))}catch(e){o={}}\nvar d=o.data, arr=[], i, j;\nif(d && typeof d.length==='number' && d.length>0){\n if(d.length && d[0] && d[0].dataList){ \/\/ 精品 columnContent:摊平各栏目 dataList\n for(i=0;i<d.length;i++){var dl=d[i].dataList||[];for(j=0;j<dl.length;j++)arr.push(dl[j])}\n }else arr=d; \/\/ 榜单 rankBookList\n}else if(d && d.pageList && d.pageList.length){arr=d.pageList} \/\/ 分类 search\/lib\nelse if(d && d.pageList){arr=d.pageList}\nelse if(o.pageList){arr=o.pageList}\nvar out=new Packages.java.util.ArrayList();\nfor(i=0;i<arr.length;i++){\n var b=arr[i]||{};if(!b)continue;\n var bid=b.id||b.bookId;if(!bid)continue;\n var cn=b.categoryname||b.categoryName||'';\n var wc=b.wordcount||b.wordCount||'';\n var au=b.authorname||b.authorName||b.author||'';\n var gr=b.bookGrade||'';\n var ch=b.channelid||b.channelId||'';\n out.add(JSON.stringify({\n bookUrl: XB+'\/api\/book\/info?bookId='+bid,\n name: String(b.title||''),\n author: String(au),\n coverUrl: CV(b.cover),\n intro: String(b.intro||'').replace(\/\\r\/g,''),\n kind: String(cn)+(ch?('\\n'+(String(ch)==='1'?'男频':'女频')):'')+(gr?('\\n评分 '+gr):''),\n wordCount: String(wc)\n }));\n}\nreturn out;\n})()",
"bookUrl": "$.bookUrl",
"coverUrl": "$.coverUrl",
"intro": "$.intro",
"kind": "$.kind",
"name": "$.name",
"wordCount": "$.wordCount"
},
"ruleSearch": {
"author": "$.author",
"bookList": "@js:\n(function(){\nvar XB='';try{XB=XC_base()}catch(eB){}\nif(!XB){try{XB=XC_ok(source.get('xcLine'))}catch(eB2){}}\nif(!XB)XB='https:\/\/quickapi.biduwenxue.com';\nfunction CV(c){c=String(c||'');if(!c||c==='null'||c==='undefined')return '';\n if(c.indexOf('http')===0)return c;\n return 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com\/'+c.replace(\/^\\\/+\/, '');}\nvar o={};try{o=JSON.parse(String(result||''))}catch(e){o={}}\nvar d=o.data, arr=[], i, j;\nif(d && typeof d.length==='number' && d.length>0){\n if(d.length && d[0] && d[0].dataList){ \/\/ 精品 columnContent:摊平各栏目 dataList\n for(i=0;i<d.length;i++){var dl=d[i].dataList||[];for(j=0;j<dl.length;j++)arr.push(dl[j])}\n }else arr=d; \/\/ 榜单 rankBookList\n}else if(d && d.pageList && d.pageList.length){arr=d.pageList} \/\/ 分类 search\/lib\nelse if(d && d.pageList){arr=d.pageList}\nelse if(o.pageList){arr=o.pageList}\nvar out=new Packages.java.util.ArrayList();\nfor(i=0;i<arr.length;i++){\n var b=arr[i]||{};if(!b)continue;\n var bid=b.id||b.bookId;if(!bid)continue;\n var cn=b.categoryname||b.categoryName||'';\n var wc=b.wordcount||b.wordCount||'';\n var au=b.authorname||b.authorName||b.author||'';\n var gr=b.bookGrade||'';\n var ch=b.channelid||b.channelId||'';\n out.add(JSON.stringify({\n bookUrl: XB+'\/api\/book\/info?bookId='+bid,\n name: String(b.title||''),\n author: String(au),\n coverUrl: CV(b.cover),\n intro: String(b.intro||'').replace(\/\\r\/g,''),\n kind: String(cn)+(ch?('\\n'+(String(ch)==='1'?'男频':'女频')):'')+(gr?('\\n评分 '+gr):''),\n wordCount: String(wc)\n }));\n}\nreturn out;\n})()",
"bookUrl": "$.bookUrl",
"coverUrl": "$.coverUrl",
"intro": "$.intro",
"kind": "$.kind",
"name": "$.name",
"wordCount": "$.wordCount"
},
"ruleToc": {
"chapterList": "@js:\n(function(){\nvar XB='';try{XB=XC_base()}catch(eB){}\nif(!XB){try{XB=XC_ok(source.get('xcLine'))}catch(eB2){}}\nif(!XB)XB='https:\/\/quickapi.biduwenxue.com';\nvar o={};try{o=JSON.parse(String(result||''))}catch(e){o={}}\nvar d=o.data||{}, pu=d.pageUtil||{}, a=pu.pageList||d.pageList||((d&&typeof d.length==='number')?d:[]);\nvar opt=JSON.stringify({method:'POST',body:'x=1',headers:{'Content-Type':'application\/x-www-form-urlencoded'}});\nvar out=new Packages.java.util.ArrayList();\nfor(var i=0;i<a.length;i++){var c=a[i]||{};if(!c||!c.id)continue;\n out.add(JSON.stringify({\n name:String(c.title||''),\n url:XB+'\/api\/chapter\/info?bookId='+String(c.bookId||'')+'&chapterId='+String(c.id)+','+opt,\n updateTime:String(c.wordCount||'')+' 字 · '+String(c.publishTime||'')\n }));}\nreturn out;\n})()",
"chapterName": "$.name",
"chapterUrl": "$.url",
"updateTime": "$.updateTime"
},
"searchUrl": "@js:\n(function(){\nvar XB='';try{XB=XC_base()}catch(eB){}\nif(!XB){try{XB=XC_ok(source.get('xcLine'))}catch(eB2){}}\nif(!XB)XB='https:\/\/quickapi.biduwenxue.com';\nfunction CV(c){c=String(c||'');if(!c||c==='null'||c==='undefined')return '';\n if(c.indexOf('http')===0)return c;\n return 'https:\/\/biduwenxue-img.oss-cn-beijing.aliyuncs.com\/'+c.replace(\/^\\\/+\/, '');}\nreturn XB+'\/api\/search?keywords='+java.encodeURI(key)+'&pageNo='+page+'&pageSize=30,'+\n JSON.stringify({method:'POST',body:'x=1',headers:{'Content-Type':'application\/x-www-form-urlencoded'}});\n})()",
"weight": 0
}