🏷晋江文学
https://m.jjwxc.net/channel/
guaner001125 (317)07/01 19:23
使用说明请在登录里查看
重构代码减小体积,移除正文显示评论功能
{ "bookSourceComment": "请点【登录】查看使用说明", "bookSourceName": "🏷晋江文学", "bookSourceType": 0, "bookSourceUrl": "https:\/\/m.jjwxc.net\/channel\/", "bookUrlPattern": "https?:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo\\?novelId=\\d+", "customOrder": 0, "enabled": true, "enabledCookieJar": true, "enabledExplore": true, "exploreUrl": "@js:\nlet token = Map(\"token\");\r\nconst enabledCategories = Map(\"fl\") || \"9,10\";\r\nconst tagNum = Map(\"bq\") || \"5\";\r\ntagName = [\"言情\",\"纯爱\",\"百合\",\"无Cp\",\"多元\"][Number(tagNum)-1];\r\ntagCategory = [1,2,3,5,6][Number(tagNum)-1];\r\nconst at = Map(\"at\");\r\nconst defaultNumPerRow = 0;\r\nconst separator = '::';\r\nconst 分类标识 =\"🌸\"\r\nconst 榜单标识=\"📖\"\r\nconst 标签标识=\"🏷\"\r\nlet authorNames = String(java.base64Decode(at || \"\")).split(\" \").filter(name => name.trim() !== \"\");\n\r\nauthorNames = authorNames.length ? authorNames.map(x => `${x}::::at`) : [];\r\nif (authorNames.length) authorNames.unshift(\"📖 作者 📖::::1\");\r\nlet ShelfNum = Map(\"classNum\")??\"\"\r\nlet ShelfList = [];\r\n\tif(\/❗️([\\s\\S]+?)❗️\/.test(String(source.getVariable()))){\r\n\t\tShelfList =JSON.parse(String(source.getVariable()).match(\/❗️([\\s\\S]+?)❗️\/)[1]);\r\n\t\t}else{\r\n\t\t\tShelfNum = \"\"\r\n\t\t\t}\r\n\r\nShelfList = ShelfList.map(item => item + \"::::class\");\r\nlet order = ShelfList.length?ShelfList[0].split(\"::\")[1].split(\",\")[2]:\"0\";\r\n\r\nlet baseApi= \"https:\/\/app.jjwxc.org\/\";\r\nlet topBase = `${baseApi}app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=`;\r\nlet topHeader = `,{\"headers\":{\"versionCode\": \"389\"}}`\r\nlet all = [\r\n \"🍒 其他::::1\",\r\n `点击签到::${baseApi}androidapi\/signin,{\\\"method\\\":\\\"POST\\\",\\\"body\\\":\\\"versionCode=313&sign={{enbody = String(Date.now())+':'+String(Map('token'));String(java.createSymmetricCrypto('DES\/CBC\/PKCS5Padding', String('KW8Dvm2N'), String('1ae2c94b')).encryptBase64(enbody))}}\\\"}`,\r\n `今日限免::${baseApi}bookstore\/getFullPage?channel=novelfree`,\r\n `新书千字榜::${baseApi}bookstore\/favObservationByDate?day=today&use_cdn=1&version=19`,\r\n \"⬆️ TOP 100::::1\",\r\n `言情::${topBase}yq${topHeader}::5`,\r\n `纯爱::${topBase}dm${topHeader}}::5`,\r\n `衍生::${topBase}tr${topHeader}::5`,\r\n `无CP+::${topBase}nocp_plus${topHeader}::5`,\r\n `百合::${topBase}bh${topHeader}::5`\r\n];\r\n\r\nconst categories = [\"古代言情\",\"现代言情\",\"幻想现言\",\"古代穿越\",\"奇幻言情\",\"未来游戏悬疑\",\"都市纯爱\",\"现代幻纯\",\"古代纯爱\",\"百合\",\"无CP\",\"衍生无CP\",\"衍生纯爱\",\"衍生言情\",\"二次元言情\",\"多元\",\"男主无CP\",\"女主无CP\",\"未来幻纯\"];\r\nconst cateType = [\"频道金榜\",\"运气淘文\",\"勤奋更新\",\"深耕排行\",\"育苗实验\",\"VIP新文\",\"新晋作者\",\"月度排行\",\"季度排行\",\"半年排行\"];\r\nconst cateTag = [\"连载\",\"完结\",\"榜单\"];\r\nconst na = \"natural_\";\r\nconst cateNum = [\r\n \/\/古代言情\r\n [\r\n [\"复仇虐渣\",\"重生\",\"宫廷侯爵\",\"架空历史\",\"布衣生活\",\"古香古色\",\"科举朝堂\",\"励志人生\",\"市井人家\",\"女尊女强\",\"传奇武侠\"],\r\n [`${na}16`,`${na}12`,`${na}11`,`${na}13`,`${na}9`,`${na}8`,`${na}18`,`${na}19`,`${na}17`,`${na}14`,`${na}15`],\r\n [`${na}33`,`${na}29`,`${na}28`,`${na}30`, `${na}26`,`${na}25`,`${na}35`,`${na}36`,`${na}34`,`${na}31`,`${na}32`],\r\n [`${na}23`,`40000001`,`${na}1482`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=101&ranktype=deep`,`90001000_101`,`${na}3`,`${na}4`,`${na}5`,`${na}6`,`${na}7`] \r\n ],\r\n \/\/现代言情\r\n [\r\n [\"天之骄子\",\"豪门世家\",\"励志人生\",\"娱乐星光\",\"婚前婚后\",\"时代新风\",\"校园青春\",\"都市情缘\",\"甜心蜜意\",\"破镜重圆\",\"近水楼台\",\"情有独钟\",\"时尚流行\",\"欢喜冤家\",\"因缘邂逅\"],\r\n [`${na}52`,`${na}44`,`${na}46`,`${na}53`,`${na}47`,`${na}51`,`${na}73`,`${na}48`,`${na}75`,`${na}49`,`${na}50`,`${na}76`,`${na}74`,`${na}54`,`${na}55`],\r\n [`${na}69`,`${na}61`,`${na}63`,`${na}70`,`${na}64`,`${na}68`,`${na}77`,`${na}65`,`${na}79`,`${na}66`,`${na}67`,`${na}80`,`${na}78`,`${na}71`,`${na}72`],\r\n [`${na}59`,\"40000002\",`${na}1483`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=102&ranktype=deep`,`90001000_102`,`${na}39`,`${na}40`,`${na}41`,`${na}42`,`${na}43`]\r\n ],\r\n \/\/幻想现言\r\n [\r\n [\"流金年代\",\"豪门世家\",\"娱乐时尚\",\"快穿系统\",\"种田日常\",\"打脸爽文\",\"重启人生\",\"都市异闻\",\"穿越时空\",\"神奇能力\",\"升级逆袭\",\"时代奇缘\",\"人生赢家\",\"现代架空\",\"幻想传奇\"],\r\n [`${na}107`,`${na}100`,`${na}108`,`${na}97`,`${na}98`,`${na}106`,`${na}105`,`${na}109`,`${na}104`,`${na}102`,`${na}103`,`${na}99`,`${na}96`,`${na}95`,`${na}94`], \r\n [`${na}123`,`${na}116`,`${na}124`,`${na}113`,`${na}114`,`${na}121`,`${na}109`,`${na}119`,`${na}110`,`${na}118`,`${na}120`,`${na}112`,`${na}111`,`${na}117`,`${na}115`],\r\n [`${na}86`,\"40000003\",`${na}1484`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=103&ranktype=deep`,\"90001000_103\",`${na}84`,`${na}87`,`${na}81`,`${na}82`,`${na}88`]\r\n ],\r\n \/\/古代穿越\r\n [\r\n [ \"复仇虐渣\",\"宫廷侯爵\",\"架空穿越\",\"系统快穿\",\"历史穿越\",\"科举朝堂\",\"布衣生活\",\"欢喜冤家\",\"女尊女强\",\"市井人家\",\"异世穿书\"],\r\n [`${na}148`,`${na}142`,`${na}140`,`${na}147`,`${na}139`,`${na}146`,`${na}141`,`${na}143`,`${na}138`,`${na}145`,`${na}144`],\r\n [`${na}164`,`${na}158`,`${na}156`,`${na}163`,`${na}155`,`${na}162`,`${na}157`,`${na}159`,`${na}154`,`${na}161`,`${na}160`],\r\n [ `${na}130`,\"40000004\",`${na}1485`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=104&ranktype=deep`,\"90001000_104\",`${na}128`,`${na}131`,`${na}125`,`${na}126`,`${na}132`]\r\n ],\r\n \/\/奇幻言情\r\n [\r\n [\"天作之合\",\"西方奇幻\",\"爽文\",\"奇幻甜宠\",\"升级逆袭\",\"东方玄幻\",\"灵异神怪\",\"穿书异能\",\"系统穿越\",\"金手指\",\"另类幻想\"],\r\n [`${na}179`,`${na}183`,`${na}181`,`${na}177`,`${na}188`,`${na}186`,`${na}182`,`${na}187`,`${na}185`,`${na}184`,`${na}180`],\r\n [`${na}191`,`${na}195`,`${na}193`,`${na}189`,`${na}200`,`${na}198`,`${na}194`,`${na}199`,`${na}197`,`${na}196`,`${na}192`],\r\n [`${na}170`,\"40000005\",`${na}1486`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=105&ranktype=deep`,\"90001000_105\",`${na}68`,`${na}71`,`${na}165`,`${na}166`,`${na}172`]\r\n ],\r\n \/\/未来游戏悬疑\r\n [\r\n [\"赛博废土\",\"无限领域\",\"基建种田\",\"末世异世\",\"规则怪谈\",\"游戏娱乐\",\"悬疑惊悚\",\"系统异能\",\"穿书快穿\",\"升级爽文\",\"重生穿越\",\"未来科幻\",\"推理探案\",\"幻想甜宠\",\"异度幻想\"],\r\n [`${na}225`,`${na}222`,`${na}226`,`${na}215`,`${na}223`,`${na}216`,`${na}220`,`${na}221`,`${na}227`,`${na}224`,`${na}219`,`${na}217`,`${na}214`,`${na}228`,`${na}218`],\r\n [`${na}241`,`${na}238`,`${na}242`,`${na}231`,`${na}239`,`${na}232`,`${na}236`,`${na}237`,`${na}243`,`${na}240`,`${na}235`,`${na}233`,`${na}230`,`${na}244`,`${na}234`],\r\n [`${na}206`,\"40000006\",`${na}1487`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=106&ranktype=deep`,\"90001000_106\",`${na}204`,`${na}207`,`${na}201`,`${na}202`,`${na}208`]\r\n ],\r\n \/\/都市纯爱\r\n [\r\n [\"时尚娱乐\",\"种田日常\",\"现代都市\",\"豪门世家\",\"业界精英\",\"重生\",\"边缘恋曲\",\"校园青春\",\"婚前婚后\",\"穿越时空\",\"成长励志\",\"欢喜冤家\",\"情有独钟\",\"都市甜文\",\"打脸逆袭\"],\r\n [`${na}270`,`${na}266`,`${na}260`,`${na}267`,`${na}265`,`${na}259`,`${na}264`,`${na}261`,`${na}272`,`${na}262`,`${na}268`,`${na}257`,`${na}271`,`${na}258`,`${na}263`],\r\n [`${na}286`,`${na}282`,`${na}276`,`${na}283`,`${na}281`,`${na}275`,`${na}280`,`${na}277`,`${na}288`,`${na}278`,`${na}284`,`${na}273`,`${na}287`,`${na}274`,`${na}279`],\r\n [`${na}250`,\"40000007\",`${na}1488`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=107&ranktype=deep`,\"90001000_107\",`${na}248`,`${na}251`,`${na}245`,`${na}246`,`${na}252`]\r\n ],\r\n \/\/现代幻纯\r\n [\r\n [\"娱乐星光\",\"萌宠频道\",\"异闻秘术\",\"快穿世界\",\"奇幻灵异\",\"幻想甜宠\",\"无限流\",\"系统\",\"边缘幻想\",\"情有独钟\",\"升级爽文\"],\r\n [`${na}517`,`${na}515`,`${na}514`,`${na}511`,`${na}523`,`${na}521`,`${na}509`,`${na}512`,`${na}516`,`${na}520`,`${na}522`],\r\n [`${na}533`,`${na}531`,`${na}530`,`${na}527`,`${na}539`,`${na}537`,`${na}525`,`${na}528`,`${na}532`,`${na}536`,`${na}538`],\r\n [`${na}502`,\"40000013\",`${na}1495`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=118&ranktype=deep`,\"90001000_118\",`${na}500`,`${na}503`,`${na}497`,`${na}498`,`${na}504`]\r\n ],\r\n \/\/古代纯爱\r\n [\r\n [\"仙侠修真\",\"布衣生活\",\"武侠传奇\",\"西幻异世\",\"穿越时空\",\"重生\",\"古代幻想\",\"系统快穿\",\"玄幻灵异\",\"天作之合\",\"升级逆袭\"],\r\n [`${na}298 `,`${na}297`,`${na}307`,`${na}301`,`${na}303`,`${na}302`,`${na}299`,`${na}304`,`${na}305`,`${na}306`,`${na}300`],\r\n [`${na}315`,`${na}314`,`${na}324`,`${na}318`,`${na}320`,`${na}319`,`${na}316`,`${na}321`,`${na}322`,`${na}323`,`${na}317`],\r\n [`${na}311`,\"40000008\",`${na}1489`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=108&ranktype=deep`,\"90001000_108\",`${na}291`,`${na}292`,`${na}293`,`${na}294`,`${na}295`]\r\n ],\r\n \/\/百合\r\n [\r\n [\"幻想未来\",\"架空历史\",\"都市情缘\",\"穿越时空\",\"天赐良缘\",\"时尚娱乐\",\"奇幻异闻\",\"系统快穿\",\"宫廷侯爵\",\"业界精英\",\"情有独钟\"],\r\n [`${na}336`,`${na}334`,`${na}337`,`${na}335`,`${na}338`,`${na}339`,`${na}333`,`${na}342`,`${na}340`,`${na}341`,`${na}343`],\r\n [`${na}353`,`${na}351`,`${na}354`,`${na}352`,`${na}355`,`${na}356`,`${na}350`,`${na}359`,`${na}357`,`${na}58`,`${na}360`],\r\n [`${na}1072`,\"40000009\",`${na}1490`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=9&ranktype=deep`,\"90001000_9\",`${na}1069`,`${na}1045`,`${na}1043`,`${na}1042`,`${na}1044`]\r\n ],\r\n \/\/无CP\r\n [\r\n [\"未来幻想-女主\",\"都市成长-男主\",\"都市成长-女主\",\"古代架空-男主\",\"古代架空-女主\",\"无限快穿-男主\",\"无限快穿-女主\"],\r\n [`${na}477`,`${na}478`,`${na}479`,`${na}480`,`${na}481`,`${na}482`,`${na}483`],\r\n [`${na}490`,`${na}491`,`${na}492`,`${na}493`,`${na}494`,`${na}495`,`${na}496`],\r\n [`${na}487`,`40000014`,`${na}1494`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=114&ranktype=deep`,`90001000_114`,`${na}471`,`${na}472`,`${na}473`,`${na}474`,`${na}475`]\r\n ],\r\n \/\/衍生无CP\r\n [\r\n [\"幻想轻小说\",\"东方衍生\",\"西方衍生\",\"二次元热血\",\"二次元幻想\",\"二次元异能\",\"女主向\"],\r\n [`${na}549`,`${na}550`,`${na}555`,`${na}552`,`${na}553`,`${na}554`,`${na}551`],\r\n [`${na}562`,`${na}563`,`${na}568`,`${na}565`,`${na}566`,`${na}567`,`${na}564`],\r\n [`${na}559`,`40000015`,`${na}1496`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=120&ranktype=deep`,`90001000_120`,`${na}543`,`${na}544`,`${na}545`,`${na}546`,`${na}547`]\r\n ],\r\n \/\/衍生纯爱\r\n [\r\n [\"西方罗曼\",\"都市轻小说\",\"幻想轻小说\",\"二次元热血\",\"二次元幻想\",\"二次元异能\",\"其他衍生\"],\r\n [`${na}373`,`${na}376`,`${na}377`,`${na}378`,`${na}379`,`${na}369`,`${na}372`],\r\n [`${na}390`,`${na}393`,`${na}394`,`${na}395`,`${na}396`,`${na}386`,`${na}389`],\r\n [`${na}383`,`40000010`,`${na}1491`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=110&ranktype=deep`,`90001000_110`,`${na}363`,`${na}364`,`${na}365`,`${na}366`,`${na}367`]\r\n ],\r\n \/\/衍生言情\r\n [\r\n [\"历史传奇\",\"西方罗曼\",\"无限快穿\",\"江湖恩怨\",\"娱乐竞技\",\"东方幻想\",\"其他\"],\r\n [`${na}450`,`${na}449`,`${na}451`,`${na}453`,`${na}454`,`${na}452`,`${na}455`],\r\n [`${na}463`,`${na}462`,`${na}464`,`${na}466`,`${na}467`,`${na}465`,`${na}468`],\r\n [`${na}459`,`40000012`,`${na}1493`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=112&ranktype=deep`,`90001000_112`,`${na}443`,`${na}444`,`${na}445`,`${na}446`,`${na}447`]\r\n ],\r\n \/\/二次元言情\r\n [\r\n [\"多重身份\",\"经营基建\",\"竞技社团\",\"东方古风\",\"西幻魔幻\",\"乙女游戏\",\"异能超能\",\"转生\",\"异闻怪谈\",\"浪漫情缘\",\"新奇幻想\"],\r\n [`${na}415`,`${na}418`,`${na}422`,`${na}412`,`${na}413`,`${na}414`,`${na}417`,`${na}420`,`${na}421`,`${na}419`,`${na}423`],\r\n [`${na}432`,`${na}435`,`${na}439`,`${na}429`,`${na}430`,`${na}431`,`${na}434`,`${na}437`,`${na}438`,`${na}436`,`${na}440`],\r\n [`${na}427`,`40000011`,`${na}1492`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=111&ranktype=deep`,`90001000_111`,`${na}407`,`${na}408`,`${na}409`,`${na}410`,`${na}411`]\r\n ],\r\n \/\/多元\r\n [\r\n [],[],[],\r\n [`${na}1010`,\"\",\"\",\"\",`90001000_121`,`${na}1011`,`${na}1013`,`${na}1012`,`${na}1014`,`${na}1518`]\r\n ],\r\n \/\/男主无CP\r\n [\r\n [\"都市成长\",\"古代架空\",\"无限快穿\"],\r\n [`${na}491`,`${na}493`,`${na}495`],\r\n [`${na}491`,`${na}493`,`${na}495`],\r\n [`${na}992`,\"\",`${na}1515`,\"\",\"\",`${na}986`,`${na}987`,`${na}988`,`${na}989`,`${na}990`]\r\n ],\r\n \/\/女主无CP\r\n [\r\n [\"都市成长\",\"古代架空\",\"无限快穿\"],\r\n [`${na}479`,`${na}481`,`${na}483`],\r\n [`${na}492`,`${na}494`,`${na}496`],\r\n [`${na}1000`,\"\",`${na}1516`,\"\",\"\",`${na}994`,`${na}995`,`${na}996`,`${na}997`,`${na}998`]\r\n ],\r\n \/\/未来幻纯\r\n [\r\n [\"娱乐竞技\",\"快穿\",\"无限流\",\"系统\",\"末世狂想\",\"幻想甜宠\",\"星际日常\",\"奇幻异想\",\"边缘幻想\",\"未来畅想\",\"升级爽文\"],\r\n [`${na}1112`,`${na}1113`,`${na}1114`,`${na}1115`,`${na}1116`,`${na}1117`,`${na}1118`,`${na}1119`,`${na}1120`,`${na}1121`,`${na}1122`],\r\n [`${na}1128`,`${na}1129`,`${na}1130`,`${na}1131`,`${na}1132`,`${na}1133`,`${na}1134`,`${na}1135`,`${na}1136`,`${na}1137`,`${na}1138`],\r\n [`${na}1104`,`wlhxca`,`${na}1497`,`${baseApi}newBookStoreAndroid\/getRankMoreData?channel=126&ranktype=deep`,`90001000_126`,`${na}1102`,`${na}1105`,`${na}1099`,`${na}1100`,`${na}1106`]\r\n ]\r\n]; \r\n\r\n\/\/ 标签数据\r\nconst tags = [\"轻松::262::::bq\",\"爽文::137::::bq\",\"甜文::124::::bq\",\"正剧::263::::bq\",\"穿书::134::::bq\",\"强强::19::::bq\",\"系统::122::::bq\",\"成长::183::::bq\",\"重生::75::::bq\",\"惊悚::9::::lx\",\"悬疑::10::::lx\",\"剧情::16::::lx\",\"快穿::125::::bq\",\"直播::142::::bq\",\"逆袭::184::::bq\",\"励志::121::::bq\",\"打脸::138::::bq\",\"女强::82::::bq\",\"异能::72::::bq\",\"基建::237::::bq\",\"救赎::329::::bq\",\"女配::96::::bq\",\"暗恋::314::::bq\",\"末世::81::::bq\",\"惊悚::29::::bq\",\"婚恋::78::::bq\",\"科幻::28::::bq\",\"炮灰::305::::bq\",\"开挂::344::::bq\",\"经营::180::::bq\",\"脑洞::273::::bq\",\"烧脑::269::::bq\",\"爱情::1::::lx\",\"武侠::2::::lx\",\"奇幻::3::::lx\",\"仙侠::4::::lx\",\"游戏::5::::lx\",\"传奇::6::::lx\",\"科幻::7::::lx\",\"童话::8::::lx\",\"都市::30::::bq\",\"校园::185::::bq\",\"综漫::6::::bq\",\"星际::135::::bq\",\"日常::268::::bq\",\"柯南::241::::bq\",\"年下::21::::bq\",\"咒回::240::::bq\",\"沙雕::266::::bq\",\"美食::99::::bq\",\"生子::20::::bq\",\"群像::356::::bq\",\"萌宠::205::::bq\",\"文野::208::::bq\",\"治愈::265::::bq\",\"团宠::287::::bq\",\"爆笑::261::::bq\",\"西幻::143::::bq\",\"魔幻::27::::bq\",\"综艺::335::::bq\",\"热血::267::::bq\",\"废土::281::::bq\",\"清穿::18::::bq\",\"朝堂::178::::bq\",\"虫族::260::::bq\",\"玄学::206::::bq\",\"萌娃::302::::bq\",\"钓系::298::::bq\",\"电竞::328::::bq\",\"港风::282::::bq\",\"全息::276::::bq\",\"宫斗::74::::bq\",\"剧透::343::::bq\",\"科举::174::::bq\",\"机甲::97::::bq\",\"虐文::42::::bq\",\"网王::1::::bq\",\"原神::371::::bq\",\"古早::275::::bq\",\"师徒::292::::bq\",\"家教::12::::bq\",\"江湖::35::::bq\",\"忠犬::312::::bq\",\"武侠::11::::bq\",\"七五::8::::bq\",\"宅斗::73::::bq\",\"腹黑::290::::bq\",\"权谋::326::::bq\",\"失忆::320::::bq\",\"猎人::5::::bq\",\"洪荒::67::::bq\",\"卡牌::357::::bq\",\"职场::98::::bq\",\"御姐::310::::bq\",\"盲盒::345::::bq\",\"吐槽::270::::bq\",\"替身::286::::bq\",\"预知::346::::bq\",\"创业::330::::bq\",\"足球::368::::bq\",\"BE::317::::bq\",\"HE::318::::bq\",\"ABO::259::::bq\",\"APP::338::::bq\",\"NPC::293::::bq\",\"哨向::369::::bq\",\"田园::58::::bq\",\"中二::375::::bq\",\"群穿::352::::bq\",\"奇谭::197::::bq\",\"囤货::322::::bq\",\"位面::350::::bq\",\"学霸::309::::bq\",\"傲娇::294::::bq\",\"民国::61::::bq\",\"鬼灭::254::::bq\",\"开荒::331::::bq\",\"商战::123::::bq\",\"转生::362::::bq\",\"锦鲤::349::::bq\",\"齐神::201::::bq\",\"血族::69::::bq\",\"网红::141::::bq\",\"现实::271::::bq\",\"扶贫::324::::bq\",\"封神::215::::bq\",\"冰山::296::::bq\",\"聊斋::188::::bq\",\"天降::308::::bq\",\"美娱::140::::bq\",\"毒舌::299::::bq\",\"非遗::323::::bq\",\"吃货::297::::bq\",\"御兽::365::::bq\",\"悲剧::264::::bq\",\"港台::87::::bq\",\"网配::84::::bq\",\"曲艺::306::::bq\",\"婆媳::80::::bq\",\"恶役::359::::bq\",\"轻小说::17::::lx\",\"娱乐圈::64::::bq\",\"无限流::83::::bq\",\"升级流::139::::bq\",\"种田文::66::::bq\",\"年代文::173::::bq\",\"万人迷::295::::bq\",\"美强惨::291::::bq\",\"少年漫::90::::bq\",\"马甲文::243::::bq\",\"克苏鲁::283::::bq\",\"白月光::313::::bq\",\"单元文::355::::bq\",\"高智商::311::::bq\",\"读心术::337::::bq\",\"时尚圈::182::::bq\",\"迪化流::370::::bq\",\"龙傲天::289::::bq\",\"论坛体::354::::bq\",\"对照组::316::::bq\",\"古穿今::65::::bq\",\"红楼梦::15::::bq\",\"反套路::274::::bq\",\"神豪流::348::::bq\",\"纸片人::288::::bq\",\"日韩泰::86::::bq\",\"签到流::351::::bq\",\"读档流::340::::bq\",\"召唤流::347::::bq\",\"大冒险::198::::bq\",\"姐弟恋::186::::bq\",\"模拟器::358::::bq\",\"乙女向::360::::bq\",\"少女漫::14::::bq\",\"吐槽役::366::::bq\",\"犬夜叉::257::::bq\",\"红包群::341::::bq\",\"中世纪::280::::bq\",\"对话体::353::::bq\",\"情有独钟::39::::bq\",\"穿越时空::60::::bq\",\"天作之合::52::::bq\",\"天之骄子::54::::bq\",\"豪门世家::33::::bq\",\"宫廷侯爵::32::::bq\",\"仙侠修真::68::::bq\",\"破镜重圆::47::::bq\",\"业界精英::101::::bq\",\"灵异神怪::26::::bq\",\"幻想空间::25::::bq\",\"先婚后爱::315::::bq\",\"欢喜冤家::41::::bq\",\"悬疑推理::128::::bq\",\"游戏网游::92::::bq\",\"时代奇缘::22::::bq\",\"青梅竹马::62::::bq\",\"因缘邂逅::45::::bq\",\"现代架空::126::::bq\",\"相爱相杀::103::::bq\",\"花季雨季::31::::bq\",\"未来架空::127::::bq\",\"恋爱合约::48::::bq\",\"英美衍生::17::::bq\",\"体育竞技::70::::bq\",\"近水楼台::46::::bq\",\"超级英雄::132::::bq\",\"东方玄幻::144::::bq\",\"布衣生活::38::::bq\",\"乔装改扮::51::::bq\",\"规则怪谈::361::::bq\",\"复仇虐渣::145::::bq\",\"异世大陆::57::::bq\",\"高岭之花::301::::bq\",\"市井生活::175::::bq\",\"赛博朋克::277::::bq\",\"女扮男装::136::::bq\",\"随身空间::56::::bq\",\"第四天灾::285::::bq\",\"前世今生::49::::bq\",\"灵魂转换::23::::bq\",\"西方罗曼::59::::bq\",\"阴差阳错::53::::bq\",\"都市异闻::181::::bq\",\"天选之子::307::::bq\",\"史诗奇幻::199::::bq\",\"时代新风::210::::bq\",\"抽奖抽卡::339::::bq\",\"日久生情::332::::bq\",\"异想天开::190::::bq\",\"边缘恋歌::44::::bq\",\"排球少年::253::::bq\",\"异闻传说::196::::bq\",\"制服情缘::85::::bq\",\"三教九流::36::::bq\",\"神话传说::367::::bq\",\"古代幻想::189::::bq\",\"古典名著::130::::bq\",\"平步青云::55::::bq\",\"灵气复苏::284::::bq\",\"西方名著::16::::bq\",\"荒野求生::319::::bq\",\"赶山赶海::325::::bq\",\"性别转换::24::::bq\",\"真假千金::334::::bq\",\"刀剑乱舞::258::::bq\",\"星穹铁道::372::::bq\",\"多重人格::300::::bq\",\"极品亲戚::336::::bq\",\"骑士与剑::63::::bq\",\"亡灵异族::192::::bq\",\"交换人生::342::::bq\",\"魔法少女::256::::bq\",\"原始社会::279::::bq\",\"七年之痒::79::::bq\",\"蒸汽朋克::278::::bq\",\"古典衍生::20::::lx\",\"东方衍生::18::::lx\",\"西方衍生::19::::lx\",\"历史衍生::91::::bq\",\"其他衍生::21::::lx\",\"追爱火葬场::321::::bq\"];\r\n\r\nfunction parseCategory(data) {\n\t\r\n const [title, url, num = defaultNumPerRow] = data.split(separator);\r\n const fullUrl = \/^\\d+|natural|wlhxca\/.test(url) \r\n ? `${baseApi}bookstore\/getFullPage?channelBody=%7B%22${url}%22%3A%7B%22offset%22%3A%22{{(page-1)*25}}%22%2C%22limit%22%3A%2225%22%7D%7D&versionCode=148`\r\n : url;\r\n return [title, fullUrl, num];\r\n}\r\n\r\nfunction parseCategoryText(data){\r\n let cateTypeNum = data.split(\",\");\r\n let cateList = [];\r\n for(let i in cateTypeNum){\r\n let name = categories[cateTypeNum[i]];\r\n let list = cateNum[cateTypeNum[i]];\r\n for(let j in cateTag){ \r\n switch (Number(j)) {\r\n case 0:\r\n case 1:{ \r\n list[0].length?cateList.push(`${分类标识}${name}${cateTag[j]}::::1`):null; \r\n for(let k in list[0]){ \r\n cateList.push(`${list[0][k]}::${list[Number(j)+1][k]}`);\r\n }\r\n break;\r\n }\r\n case 2:{\r\n cateList.push(`${榜单标识}${name}${cateTag[j]}::::1`);\r\n for(k in cateType){\r\n list[Number(j)+1][k]?cateList.push(`${cateType[k]}::${list[Number(j)+1][k]}`):null;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return cateList;\r\n}\r\n\r\nfunction parseTag(data, tagCategory) {\n\tjava.log(data);\r\n const [title, url, num = defaultNumPerRow, tagType] = data.split(separator);\r\n let fullUrl = url;\r\n let params = `search\/getSearchForKeyWords?versionCode=313&offset={{(page-1)*20}}&limit=20&removetags=0&fw=0&yc=0&xx=${tagCategory}&sd=0&fg=0&mainview=0&fbsj=0&collectionTypes=ors&isfinish=0&sortType=0&token={\\{Map(\"token\")}}`;\r\n if (tagType === \"bq\") {\r\n fullUrl = `${baseApi}${params}&bq=${url}`;\r\n } else if (tagType === \"at\") {\r\n \tfullUrl = `${baseApi}androidapi\/authorColumn?authorid=${url}`;\r\n \t}else if (tagType === \"class\") {\r\n \t\tlet nn = url.split(\",\");\r\n \tfullUrl = `${baseApi}androidapi\/incrementFavorite,{\"method\":\"POST\",\"body\":\"versionCode=313&token=${token}&order={\\{java.put(\"order\",${nn[2]})}}&classId=${nn[0]}&backupTime=${Date.now()}\"}`\r\n \t}else if (tagType === \"lx\") {\r\n fullUrl = `${baseApi}${params}&lx=${url}`\r\n }\r\n return [title, fullUrl, num];\r\n}\r\n\r\nfunction createFlexBox(title, url, num) {\r\n const flexBasisMap = { 1: 1, 2: 0.4, 3: 0.25, 4: 0.2, 5: 0.15, 7: 0.1, 10: 0.05 };\r\n return {\r\n title,\r\n url: url || '',\r\n style: {\r\n layout_flexGrow: 1,\r\n layout_flexBasisPercent: flexBasisMap[num]\r\n }\r\n };\r\n}\r\n\r\nconst result = [];\nresult.push(createFlexBox(\"📂 我的收藏\", `https:\/\/android.jjwxc.net\/androidapi\/incrementFavorite,{\\\"method\\\":\\\"POST\\\",\\\"body\\\":\\\"versionCode=313&token={{Map('token')}}&order={\\{java.put('order',${order})}}&classId=&backupTime={{Date.now()}}\\\"}`, \"1\"));\n\r\nif(ShelfNum){\r\nconst ShelfNumList = String(ShelfNum).split(\",\").slice(1);\r\nShelfNumList.forEach(x => {\r\n const parsedTag = parseTag(ShelfList[x]);\r\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\r\n});\r\n}\n\r\nauthorNames.forEach(tag => {\r\n const parsedTag = parseTag(tag, tagCategory);\r\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\r\n});\r\n\r\nall.forEach(item => {\r\n const parsedItem = parseCategory(item);\r\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\r\n});\n\r\nparseCategoryText(enabledCategories ).forEach(item => {\r\n const parsedItem = parseCategory(item);\r\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\r\n});\n\r\nresult.push(createFlexBox(`${标签标识} ${tagName}标签`, null, 1));\r\ntags.forEach(tag => {\r\n const parsedTag = parseTag(tag, tagCategory);\r\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\r\n});\r\n\r\nJSON.stringify(result);", "header": "@js:\nJSON.stringify({\n\t\"User-Agent\":java.getWebViewUA(),\n\t\"versiontype\":\"reading\"\n\t})", "jsLib": "var head = `<head><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><meta charset=\"utf-8\"><title>评 论<\/title><style>\nbody{background:#f8f9fa;color:#333;line-height:1.6;padding:20px;max-width:800px;margin:0 auto}\n.cp{text-indent:1.7em;margin-bottom:1em;text-align:justify}\n.ccnt{display:flex;flex-direction:column;gap:20px}.ef{width: 24px; display: inline-block; vertical-align: middle; margin-top: -4px;}\n.cc{background:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.1);padding:20px;position:relative}\n.ch{display:flex;align-items:center;margin-bottom:12px}\n.ca{font-weight:bold;font-size:16px;color:#1a73e8}\n.cm{font-size:12px;color:#70757a;margin-left:8px}\n.cd{font-size:12px;color:#70757a;margin-left:auto}\n.cb{font-size:15px;margin-bottom:15px;white-space:pre-wrap;word-break:break-word}\n.cs{font-size:13px;color:#70757a;margin-bottom:15px}\n.cs p{display:flex;justify-content:flex-end;}\n.cs p span+span{margin-left:10px;}\n.rcnt{border-left:3px solid #e0e0e0;padding-left:15px;margin-top:15px}\n.rc{background:#f5f5f5;border-radius:6px;padding:12px;margin-bottom:10px}\n.rh{display:flex;align-items:center;margin-bottom:8px}\n.ra{font-weight:bold;font-size:14px;color:#1a73e8}\n.rf{background:#e0e0e0;color:#70757a;font-size:11px;padding:1px 4px;border-radius:3px;margin-left:8px}\n.rd{font-size:11px;color:#70757a;margin-left:auto}\n.rb{font-size:14px;white-space:pre-wrap;word-break:break-word}\n<\/style><\/head>`;\n\nfunction encode(data){\n\tconst { java } = this;\n\treturn java.createSymmetricCrypto(\"DES\/CBC\/PKCS5Padding\", String(\"KW8Dvm2N\"), String(\"1ae2c94b\")).encryptBase64(data)\n\t}\n\t\nfunction getHeaderMap(_){\n\t const { source,java } = _ || this;\n let infomap = String(source.getLoginHeader()).replace(\/^#\/,'');\n infomap = (infomap!=\"null\"&&infomap!=\"\")?infomap:\"{}\";\n return JSON.parse(infomap);\n\t}\n\nfunction setHeaders(){\n \tconst { source,java } = this;\n \tlet map = getHeaderMap(this);\n \tfor(let i=0;i<arguments.length;i++){\n \t\tlet k =arguments[i].split(\"=\")[0];\n \t\tlet v =arguments[i].split(\"=\")[1];\n \t\tmap[k] = v;\n \t\t}\n source.putLoginHeader(\"#\"+JSON.stringify(map))\n\t}\n\t\nfunction getToken(d){\n\treturn d.match(\/token=(.*?)&\/)[1];\n\t}\n\nfunction getNid(d){\n\treturn d.match(\/novelId=(\\d+)\/)[1];\n\t}\nfunction Map(e,that) { \n\t const { source } = that || this;\n return getHeaderMap(that||this)[e]??\"\"\n}\n\nfunction bDe(d,that){\n\tconst { java } = that || this;\n\tlet re,token,novelId,chapterId;\n\tif(\/^http\/.test(d)){\n\t\ttoken =\/\\d+_[\\w\\d]{16,}\/.test(d)?\"token=\"+ d.match(\/\\d+_[\\w\\d]{16,}\/)[0]:\"token=\";\n novelId=d.match(\/novelId=\\d+\/)[0];\n chapterId = \/chapterId=\\d+\/.test(d)?\"&\"+d.match(\/chapterId=\\d+\/)[0]:\"\";\n re = `${token}&${novelId}${chapterId}`;\n\t\t}else{re = String(java.base64Decode(String(d).match(\/base64,([^,]+),*\/)[1]));}\n\treturn re\n\t}\n\t\n\nfunction replaceEmoticons(t){const n=t=>`<img class=\"ef\" src=\"${t}\"\/>`, o={'化了':n('20240813133734_66baf11eca900_736.png'),'可怜':n('20240813133538_66baf0aa48da0_272.png'),'点赞':n('like.png'),'问号':n('question.png'),'亲亲':n('kiss.png'),'求求你了':n('20250513142416_6822e59075a3b_751.png'),'狗头':n('dog.png'),'星星眼':n('star.png'),'害羞':n('shy.png'),'坏笑':n('bad_smile.png'),'爱心眼':n('love_heart.png'),'让我康康':n('look.png'),'猫头':n('20240813134245_66baf2554d0c0_482.png'),'三花猫头':n('20240813134304_66baf2688507d_882.png'),'垂耳兔头':n('20240813134345_66baf29111f22_694.png'),'竖耳兔头':n('20240813134441_66baf2c986c2b_931.png'),'熊猫头':n('20240813134502_66baf2deb9a59_203.png'),'菜狗':n('20240813134018_66baf1c223617_332.png'),'奶茶':n('milk.png'),'橘糖':n('20240813132714_66baeeb282db3_126.png'),'紫糖':n('20240813132746_66baeed24ae82_531.png'),'药丸':n('20240813132902_66baef1e7590e_674.png'),'柠檬':n('20240813133018_66baef6a49f76_858.png'),'饭饭':n('20250513142708_6822e63c630d3_583.png'),'空碗':n('20250513142731_6822e653b7bac_594.png'),'比心':n('hand_heart.png'),'鼓掌':n('clap.png'),'666':n('666.png'),'摆手':n('wave.png'),'合十':n('20240813132056_66baed38130c1_545.png'),'抱拳':n('20250327163246_67e50d2e50aa5_351.png'),'托腮':n('sigh.png'),'爆哭':n('cry.png'),'笑哭':n('laugh.png'),'彩虹屁':n('rainbow.png'),'撒花':n('flower.png'),'加油':n('go.png'),'闭嘴':n('shut.png'),'白眼':n('eyes.png'),'裂开':n('break.png'),'墨镜':n('20240809171403_66b5dddb9b4a9_201.png'),'吃瓜':n('20240813133503_66baf08792cb4_971.png'),'哦哦哦':n('20250327162901_67e50c4d70e05_616.png'),'抱抱':n('20250327162653_67e50bcdc4107_345.png'),'摸头':n('20250327162816_67e50c2004946_460.png'),'哈哈大笑':n('20250327162728_67e50bf002312_926.png'),'捂脸偷看':n('20240813133808_66baf140db042_203.png'),'摊手':n('20240813133559_66baf0bfe94a8_123.png'),'无奈':n('20250327163425_67e50d916f9f7_934.png'),'捂脸笑哭':n('20250327162314_67e50af266b86_726.png'),'眼镜':n('20250513142108_6822e4d4908c7_855.png'),'好的':n('20250513142306_6822e54a95fec_363.png'),'求你了':n('20250513142345_6822e5719d933_198.png'),'小丑':n('20240813134155_66baf223161c9_172.png'),'害怕':n('fear.png'),'愤怒':n('anger.png'),'狗头叼玫瑰':n('20250513142003_6822e493665f5_485.png'),'鸽子':n('dove.png'),'发财':n('rich.png'),'好运莲莲':n('20240813132511_66baee37a0048_173.png'),'玫瑰':n('20240813132550_66baee5e5f847_433.png'),'猫爪':n('20240813132824_66baeef888f6a_514.png'),'烟花':n('20250513142645_6822e6257d8f0_243.png'),'元宝':n('20250513142558_6822e5f6c2986_398.png'),'裤子':n('20250513142753_6822e669080b5_216.png'),'耳朵':n('20240813133118_66baefa6c51c9_627.png'),'心碎':n('broken_heart.png'),'红心':n('red_heart.png'),'橙心':n('orange_heart.png'),'黄心':n('yellow_heart.png'),'绿心':n('green_heart.png'),'青心':n('cyan_heart.png'),'蓝心':n('blue_heart.png'),'紫心':n('purple_heart.png'),'粉心':n('pink_heart.png'),'加一':n('20250513142841_6822e699f2124_862.png'),'减一':n('20250513142916_6822e6bc011ee_516.png')};return t.replace(\/\\[([^\\]]+)\\]\/g,(t,r)=>o[r.trim()]||t)\n\t}\n\n\nfunction formatChineseText(text,that) {\n const {java} =that || this;\n text = text.replace(\/<br>| | {3,}|<\\\/?br>\/g,'\\n\\n');\n return text.split(\/\\n\\s*\\n\/).map(para => {let content = para.replace(\/\\n\/g, '<br>');return `<p class=\"cp\">${content}<\/p>`;}).join('');\n}\nfunction getJsonHtml(url,_,type){\n\tconst{java}=_||this;\n\tlet h=JSON.parse(java.ajax(url)),ct=h?.data?.commentTotal??\"0\",msg=h?.message,cl=h?.data?.commentList??[];\n\tif(\/您尚未购买该VIP章节|^1004\/.test(msg)&&!\/getLongCommentList|paragraph_id\/.test(url)){\n\t\tlet bid = url.match(\/novelId=(\\d+)\/)[1];\n\t\tlet cid = url.match(\/chapterId=(\\d+)\/)[1];\n\t\tlet sort = url.match(\/commentSort=(\\d+)\/)[1];\n\t\tlet buckurl = `https:\/\/s8-static.jjwxc.net\/comment_json.php?commentSort=${sort}&chapterid=${cid}&novelid=${bid}`;\n\t\th=JSON.parse(java.ajax(buckurl)),ct=(h?.body??[]).length??\"0\",msg=h?.message??\"\",cl=h?.body??[];\n\t\t}\n return\tgetHtml(ct,cl,_||this,type,msg);\n\t}\n\t\n\tfunction formatDate(datetime) {\n let t = new Date() \/ 1000;\n var l = t - datetime;\n if (l < 0) {\n return \"刚刚\";\n }\n var arrayObj = [\n [31536000, \"年前\"],\n [2592000, \"个月前\"],\n [604800, \"星期前\"],\n [86400, \"天前\"],\n [3600, \"小时前\"],\n [60, \"刚刚\"],\n [1, \"刚刚\"]\n ];\n for (var index in arrayObj) {\n var c = Math.floor(l \/ arrayObj[index][0]);\n if (0 < c) {\n if (\"刚刚\" == arrayObj[index][1]) {\n return arrayObj[index][1];\n } else {\n return c + arrayObj[index][1];\n }\n }\n }\n}\n\nfunction rHtml(list){\nlet jj=list;function rCts(cs) {var html = '';for (var i = 0; i < cs.length; i++) {var c = cs[i],rH=\"\";if (c.rep && c.rep.length > 0) {for (var j = 0; j < c.rep.length; j++) {var r = c.rep[j];rH += '<div class=\"rc\">' +'<div class=\"rh\">' +'<span class=\"ra\">' + r.a + '<\/span>' +'<span class=\"rd\">' + r.d + '<\/span>' +'<\/div>' +'<div class=\"rb\">' + r.b + '<\/div>' +'<\/div>';}};html += '<div class=\"cc\">' +'<div class=\"ch\">' +'<span class=\"ca\">' + c.a + '<\/span>' +(c.m!==\"undefined\" ? '<span class=\"cm\">' + c.m + '分<\/span>' : '') +'<span class=\"cd\">' + c.d + '<\/span>' +'<\/div>' +'<div class=\"cb\">' + c.b + '<\/div>' +'<div class=\"cs\">' +'<p>' +(c.r ? '<span>' + c.r + '<\/span>' : '') +'<span>♥' + (c.ag || '0') + '<\/span>' +'<span>♡' + (c.dis || '0') + '<\/span>' +'<\/p>' +'<\/div>' +(rH ? '<div class=\"rcnt\">' + rH + '<\/div>' : '') +'<\/div>';};return '<div class=\"ccnt\" id=\"ccnt\">' + html + '<\/div>';};\nif (typeof document !== 'undefined') {\n document.getElementById('cont').innerHTML = rCts(jj);\n const ef = document.querySelectorAll('img.ef');\n ef.forEach(img => {\n img.src = \"https:\/\/i9-static.jjwxc.net\/tmp\/emoji\/\" + img.src;\n });\n } else {\n return rCts(jj).replace(\/class=\"ef\" src=\"(.*?)\"\/g, 'class=\"ef\" src=\"https:\/\/i9-static.jjwxc.net\/tmp\/emoji\/$1\"');\n }\n}\n\nfunction createScriptWithParams(params) {\n return `\n <script>\n (${rHtml.toString()})(${JSON.stringify(params)});\n <\/script>\n `;\n}\n\n\nfunction getHtml(ct,cl,_,type,msg){\nconst {java} = _||this;let list = [],cllen= cl.length;\nfor(let i in cl){\nlet c = cl[i],reply = (c?.replyAll??c?.reply),rl = [];\nlet re=\/^([\\[\\]橘糖紫糖]|嗑到了|kswl|\\[.*?\\]|\\d+\\.\\d+\\.\\d+|.刷|打卡|\\s)+$|为营造更好的评论环境,\/;\nif(re.test(c.commentBody??c.commentbody)){cllen--;continue;}\nfor(let j in reply){\nlet r = reply[j];\nrl.push({\nb:`${formatChineseText(replaceEmoticons(r.replyBody??r.commentbody))}`,\na:`${(r.replyAuthor??r.commentauthor)+(r?.isAuthor===\"1\"?\"[作者]\":\"\")}`,\nd:`${formatDate(r.comment_date_time)??(r.replyDate||r.commentdate)}`\n})\n}\n\nlist.push({\nb:`${formatChineseText(replaceEmoticons(c.commentBody??c.commentbody))}`,\na:`${(c.commentAuthor??c.commentauthor)+(c?.isAuthor===\"1\"?\"[作者]\":(c?.bulletinComment===\"1\"?\"[公告]\":\"\"))}`,\nd:`${formatDate(c.comment_date_time)??(c.commentDate||c.commentdate)}`,\nr:`${c.subscriptionicon?(c.subscriptionrate?`📖${c.subscriptionrate}`:(c.subscriptionicon.includes(\"rate_novelallbuy\")?`📖100%`:`${c.subscriptionicon.replace(\/src=(.*?)\\s\/g,'src=\"https:$1\"').replace(\/(?:background|border|border-radius):.*?;\/g,'')}`)):\"\"}`,\nag:`${c.agreenum??\"0\"}`,\ndis:`${c.disagreenum??\"0\"}`,\nm:`${c.commentMark}`,\nrep:rl\n});\n}\nlet scriptTag;\nif(type===1){\n\tscriptTag = createScriptWithParams(list);\n\t}else{\n\tscriptTag = rHtml(list);\n}\n\nlet html = `<html>${head}<body><p>▪当前显示${cllen}条评论▪${msg}<\/p><div id=\"cont\"><\/div>${scriptTag}<\/body><\/html>`;\nreturn encodeURIComponent(html);\n}\n\nfunction toReview(nid,cid,r){\n\tconst {java,source} = this;\n\tlet sss = String(source.getVariable());\n\tlet 长评url = `https:\/\/android.jjwxc.net\/comment\/getLongCommentList`;\n let 长评option = {\n\t \"method\":\"POST\",\n \t\"body\":`versionCode=439&limit=100&offset=0&${bDe(r,this)}`\n\t}\n\tlet 点赞url = `https:\/\/android.jjwxc.net\/comment\/getCommentList?versionCode=439&limit=50&offset=0&commentSort=2&${bDe(r,this)}`;\n\tlet 回复url = `https:\/\/android.jjwxc.net\/comment\/getCommentList?versionCode=439&limit=50&offset=0&commentSort=0&${bDe(r,this)}`;\n 长评url = 长评url+\",\"+JSON.stringify(长评option);\n \n\tjava.longToast(\"数据加载中....请稍候\");\n\tlet 长评,点赞,回复;\n\tif(\/评论点赞\/.test(sss)){\n\t\t return `data:text\/html;base64,${java.base64Encode(decodeURIComponent(getJsonHtml(点赞url,this,1)))}`;\n\t\t}else if(\/评论回复\/.test(sss)){\n\t\t\t回复 = getJsonHtml(回复url,this,1);\n\t\t\treturn `data:text\/html;base64,${java.base64Encode(decodeURIComponent(getJsonHtml(回复url,this)))}`;\n\t\t\t}else{\n\t 长评 = getJsonHtml(长评url,this);\n\t 点赞 = getJsonHtml(点赞url,this);\n\t 回复 = getJsonHtml(回复url,this);\n\tlet html=`<html><head><meta name=viewport content=\"width=device-width,initial-scale=1\"><meta charset=\"utf-8\"><style>body{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;margin:0;padding:20px;box-sizing:border-box}.btn-c{display:flex;flex-direction:column;gap:15px;width:100%;max-width:400px}button{padding:12px 20px;border:none;border-radius:8px;font-size:16px;font-weight:500;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 5px rgba(0,0,0,.1);display:flex;align-items:center;justify-content:center}button:hover{transform:translateY(-2px);box-shadow:0 4px 8px rgba(0,0,0,.15)}.b1{background:#4285f4;color:#fff}.b2{background:#34a853;color:#fff}.b3{background:#ea4335;color:#fff}.b4{background:#88263E;color:#fff}.b5{background:#D8C93E;color:#000}<\/style><\/head><body><p>有些内容需要登录才能使用【书源和网页都要登录】<\/p><div class=btn-c><button class=b1 onclick=c(0)><span>使用【手机】网页查看【本章评论】<\/span><\/button><button class=b1 onclick=c(5)><span>使用【电脑】网页查看【本章评论】<\/span><\/button><button class=b4 onclick=c(6)><span>查看【本章长评内容】<\/span><\/button><button class=b4 onclick=c(7)><span>查看本章50条评论【按点赞数排序】<\/span><\/button><button class=b4 onclick=c(8)><span>查看本章50条评论【按回复时间排序】<\/span><\/button><button class=b2 onclick=c(1)><span>使用【书源】查看【本章评论】<\/span><\/button><button class=b2 onclick=c(3)><span>使用【书源】查看【全文评论】<\/span><\/button><button class=b5 onclick=c(4)><span>一键导入【晋江评论】书源<\/span><\/button><button class=b3 onclick=c(2)><span>查看当前链接内容<\/span><\/button><\/div><script>let u=\"http:\/\/www.jjwxc.net\/comment.php?novelid=${nid}&chapterid=${cid}&page=1\",m=u,u1=\"legado:\/\/import\/addToBookshelf?src=\"+encodeURIComponent(u),u2=\"http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=${nid}&page=1\",u3=\"legado:\/\/import\/addToBookshelf?src=\"+encodeURIComponent(u2),u4=\"https:\/\/m.jjwxc.net\/review\/${nid}\/${cid}\/\",u5=\"https:\/\/app.jjwxc.org\/androidapi\/chapterContent?versionCode=381&${bDe(r,this)}\",u6=\"legado:\/\/import\/Source?src=\"+encodeURIComponent(\"http:\/\/www.guaner.work\/Source\/shuyuan.asp?time=2025-6-935833\"),u7=\"legado:\/\/import\/Source?src=\"+encodeURIComponent(\"http:\/\/www.guaner.work\/Source\/shuyuan.asp?time=2025-6-935400\");function c(n){const a={0:()=>open(u4,\"_blank\"),1:()=>open(u1,\"_blank\"),2:()=>open(u5,\"_blank\"),3:()=>open(u3,\"_blank\"),4:()=>open(u6,\"_blank\"),5:()=>open(m,\"_blank\"),6:()=>document.body.innerHTML=decodeURIComponent(\"${长评}\"),7:()=>document.body.innerHTML=decodeURIComponent(\"${点赞}\"),8:()=>document.body.innerHTML=decodeURIComponent(\"${回复}\"),9:()=>open(u7,\"_blank\")};a[n]?.()}<\/script><\/body><\/html>`;\n\t\n\treturn `data:text\/html;base64,${java.base64Encode(html)}`;\n}\n}\t", "lastUpdateTime": "1751369024504", "loginCheckJs": "if(!cache.getFile(\"jjtime\")) {\n cache.putFile(\"jjtime\", true, 23200);\n const enbody = `${String(Date.now())}:${Map(\"token\")}`;\n const option = {\n method: \"POST\",\n body: `versionCode=313&sign=${encode(enbody)}`\n };\n const jjsign = java.ajax(\"https:\/\/app.jjwxc.org\/androidapi\/signin,\" + JSON.stringify(option));\n java.toast(JSON.parse(jjsign).message);\n}result", "loginUi": "[\n{\n \t name:\"📜使用说明\",\n \t type: \"button\",\n action: \"toShi()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n{\n \t name:\"☕️支持源作者\",\n \t type: \"button\",\n action: \"toThank()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n \t{\n \t name:\"🔍搜索设置\",\n \t type: \"button\",\n action: \"SearchSet()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n \t{\n \t name:\"💰网页充值\",\n \t type: \"button\",\n action: \"recharge()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n \t\n{\n \t name:\"📚书架获取\",\n \t type: \"button\",\n action: \"getShelf()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n \t\n{\n \t name:\"📚书架选择\",\n \t type: \"button\",\n action: \"showShelf()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n \t},\n \t{\n \"name\": \"🌸分类选择\",\n \"type\": \"button\",\n \"action\": \"getFl()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n },\n \t{\n\t\tname: \"🏷标签选择\",\n\t\ttype: \"button\",\n\t\taction: \"getTag()\",\n\t\t\"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.4\n }\n\t},\n\t\t{\n \t\tname:\"作者列表(作者::作者id 注意添加多个用空格分割)\",\n \t\ttype:\"text\"\n \t\t},\n \t\t\n\t{\n \t name:\"抓包token登录[与账号登录二选一,账号登录会让旧token失效,要删除这里]\",\n \t type:\"password\"\n \t},\n {\n \t name:\"账号\",\n \t type:\"text\"\n \t},\n \t{\n \t name:\"密码\",\n \t type:\"password\"\n \t},\n \t{\n \t name:\"验证码(填完验证码后,要点👤登录)\",\n \t type:\"text\"\n \t},\n \n {\n name: \"📮邮箱验证码和👤登录\",\n type: \"button\",\n action: \"getCode('email')\"\n },\n {\n name: \"📱手机验证码和👤登录\",\n type: \"button\",\n action: \"getCode('phone')\"\n } \t\t\n]", "loginUrl": "function saveTag(svg,tagType){\n\tlet code = String(java.getVerificationCode('data:image\/svg+xml;base64,'+svg));\n if(\/(\\d,*)*\/.test(code)){\n\t setHeaders(`${tagType}=${code}`)\n\t java.toast(\"已保存数据....请刷新发现\")\n\t}\n}\nfunction toShi(){\n\tlet html = `<html><head><base href=\"https:\/\/gitee.com\/guaner001125\/booksource\/raw\/master\/%E5%9B%BE%E7%89%87\/\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"><style>.c{margin:10px;border:1px solid #ddd}.t{padding:10px;cursor:pointer;background:#f5f5f5}.i{display:none;padding:10px;text-align:center}img{max-width:100%}<\/style><\/head><body><div class=c><div class=t onclick=t('a')>抓包token说明 +<\/div><div class=i id=a><img src=token.webp><\/div><\/div><div class=c><div class=t onclick=t('b')>使用说明 +<\/div><div class=i id=b><img src=shiyong.webp><\/div><\/div><div class=c><div class=t onclick=t('c')>源变量设置说明 +<\/div><div class=i id=c><img src=source1.webp><\/div><\/div><\/div><script>function t(e){let o=document.getElementById(e);o.style.display=o.style.display=='block'?'none':'block';o.previousElementSibling.innerHTML=o.style.display=='block'?o.previousElementSibling.innerHTML.replace('+','-'):o.previousElementSibling.innerHTML.replace('-','+')}<\/script><\/body><\/html>`;\n\tjava.longToast(\"当前书源版本:V25.0701.1905\");\n java.startBrowser(`data:text\/html;base64,${java.base64Encode(html)}`,\"使用说明\");\n \n\t\n\t}\n\t\nfunction recharge(){\n\tlet userurl = \"https:\/\/app.jjwxc.org\/androidapi\/getUserCenter,\"+JSON.stringify({\n\t\t\"method\":\"POST\",\n\t\t\"body\":\"versionCode=443&token=\"+Map(\"token\")\n\t\t});\ntry{\nlet h = JSON.parse(java.ajax(userurl));\nif(h.nickName){\nlet toast = `\\n用户:👤${h.nickName}\\n余额:${h.balance}点\\n月石:${h.coinstotal}个`;\n\tjava.longToast(toast);\n\tjava.log(toast);\n}else{\n\tjava.longToast(\"❌阅读未登录\");\n\t}\n\t}catch(e){\n\t\tjava.log(e)\n\t\t}\n\t\t\n\t\tPackages.java.lang.Thread.sleep(800);\n\tjava.startBrowser(\"https:\/\/m.jjwxc.net\/pay\/\",\"晋江网页充值\");\n\t}\nfunction SearchSet(){\n\ttry{\n\tlet html = `<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"><title>🔍搜索设置<\/title><style>body{font-family:Arial;max-width:600px;margin:0 auto;padding:20px}h1{text-align:center}.note{text-align:center;color:green;font-weight:bold;margin:10px 0}.section{margin-bottom:20px}.buttons{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0}button{padding:8px 15px;font-size:16px;border:1px solid #ddd;border-radius:4px;cursor:pointer}#output{margin:15px 0;padding:10px;background:#f9f9f9;border-radius:4px}.selected{background:#d4edff;border-color:#4a90e2}<\/style><\/head><body><h1>搜索设置<\/h1><p class=\"note\">选择完以后点击右上角的\"✓\"确定<\/p><div id=\"output\"><div>当前选择:<\/div><div id=\"type-output\">搜索【类型】: 未选择<\/div><div id=\"searchtype-output\">搜索【排序】: 未选择<\/div><\/div><div class=\"section\"><div><b>搜索类型<\/b>(除作者和书名外需关闭精确搜索)<\/div><div class=\"buttons\" id=\"type-btns\"><\/div><\/div><div class=\"section\"><div><b>搜索排序<\/b><\/div><div class=\"buttons\" id=\"sort-btns\"><\/div><\/div><script>var config={types:{\"1\":\"书名\",\"4\":\"主角\",\"5\":\"配角\",\"6\":\"其他\",\"2\":\"作者\"},sorts:{\"1\":\"积分\",\"7\":\"相关性\",\"2\":\"最近更新\",\"3\":\"最新发表\",\"4\":\"字数\",\"5\":\"收藏数\",\"9\":\"完结高分\",\"8\":\"大众化指数\",\"10\":\"随机排序\"}};var searchParams='${Map(\"search\")}'||\"1,8\";var searchArray=searchParams.split(\",\");var typeValue=searchArray[0];var sortValue=searchArray[1];var current={type:{value:typeValue,name:typeValue?config.types[typeValue]:null},sort:{value:sortValue,name:sortValue?config.sorts[sortValue]:null}};function initButtons(container,items,type){var buttonsHTML='';for(var value in items){if(items.hasOwnProperty(value)){var name=items[value];var isSelected=current[type].value===value;buttonsHTML+='<button onclick=\"select(\\\\''+type+'\\\\',\\\\''+name+'\\\\',\\\\''+value+'\\\\')\"'+(isSelected?' class=\"selected\"':'')+'>'+name+'<\/button>'}}container.innerHTML=buttonsHTML}function select(type,name,value){current[type]={name:name,value:value};var buttons=document.getElementById(type+'-btns').querySelectorAll('button');for(var i=0;i<buttons.length;i++){buttons[i].classList.toggle('selected',buttons[i].textContent===name)}updateOutput()}function updateOutput(){document.getElementById('type-output').textContent='搜索【类型】: '+(current.type.name||\"未选择\")+(current.type.value?'('+current.type.value+')':'');document.getElementById('searchtype-output').textContent='搜索【排序】: '+(current.sort.name||\"未选择\")+(current.sort.value?'('+current.sort.value+')':'')}initButtons(document.getElementById('type-btns'),config.types,'type');initButtons(document.getElementById('sort-btns'),config.sorts,'sort');updateOutput();<\/script><\/body><\/html>\n`;\nlet base64 = `data:text\/html;base64,${java.base64Encode(html)}`;\nlet body = java.startBrowserAwait(base64,\"搜索设置\",false).body();\nlet search = (body.match(\/搜索【类型】:.*?\\((\\d+)\\)\/)?.[1]??1)+\",\"+(body.match(\/搜索【排序】:.*?\\((\\d+)\\)\/)?.[1]??8);\nsetHeaders(`search=${search}`);\n\n}catch(e){\n\tjava.log(e)\n\t}\n\t}\n\nfunction toThank(){\n\tjava.startBrowser(\"data:text\/html;base64,PGltZyBzdHlsZT0id2lkdGg6MTAwJSIgc3JjPSJhYm91dDpibGFuayIgb25lcnJvcj0idGhpcy5zcmM9YXRvYignYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2WjNWaGJtVnlNREF4TVRJMUwySnZiMnR6YjNWeVkyVXZjbUYzTDIxaGMzUmxjaThsUlRVbE9VSWxRa1VsUlRjbE9Ea2xPRGN2WjNWaGJtVnlMbmRsWW5BPScpIj4KCg==\",\"感谢你的支持\");\t\n\t}\n\t\nfunction getShelf(){\n let sourceGet = String(source.getVariable()).replace(\/\\n*(?:请勿删除此书架数据)*❗️[\\s\\S]+?❗️\/g,'');\n\tlet token = Map(\"token\");\n\tlet ShelfUrl = `https:\/\/android.jjwxc.net\/androidapi\/incrementFavorite,{'method':'POST','body':\\\"versionCode=313&token=${token}&order=1&classId=&backupTime=${Date.now()}\\\"}`\n\tlet ShelfJson = String(java.ajax(ShelfUrl));\n\t\n ShelfJson = JSON.parse(ShelfJson);\n\t function extractClassInfo(obj, result = [], uniqueSet = new Set()) {\n\t if (Array.isArray(obj)) {\n\t for (let item of obj) {\n\t extractClassInfo(item, result, uniqueSet);\n\t }\n\t } else if (typeof obj === 'object' && obj !== null) { \n\t if (obj.hasOwnProperty('className') && obj.hasOwnProperty('classId')) {\n\t let className = obj.className;\n\t if (className.trim() === \"\") {\n\t className = \"尚未分类\";\n\t } \n\t const combo = `${className}::${obj.classId}`;\t \n\t if (!uniqueSet.has(combo)) {\n\t uniqueSet.add(combo);\n\t result.push(combo);\n\t }\n\t }\n\t for (let key in obj) {\n\t extractClassInfo(obj[key], result, uniqueSet);\n\t }\n \t\t }\n \t\treturn result;\n\t }\n let shelf = extractClassInfo(ShelfJson)\n shelf.unshift(\"我的收藏::-1,1,0\");\n\tlet ShlefClass = \"请勿删除此书架数据❗️\"+JSON.stringify(shelf)+\"❗️\"\n\tsource.setVariable(sourceGet+\"\\n\"+ShlefClass);\n\tMap(\"token\")?\n\tjava.longToast(\"已获取书架数据,请点击选择显示的书架\"):java.longToast(\"请先登录\")\n}\n\nfunction showShelf(){\n\ttry{\n\t\tif(!\/❗️([\\s\\S]+?)❗️\/.test(String(source.getVariable()))){\n\t\t\tjava.longToast(\"请先点击获取书架数据,只需点一次\");\n\t\t\treturn \"\"\n\t\t}\n\t\tlet sourceGet = String(source.getVariable()).match(\/❗️([\\s\\S]+?)❗️\/)[1];\nlet html = `<html><head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"><title>书架管理<\/title><style>body{font-family:Arial,sans-serif;max-width:800px;margin:0 auto;padding:20px}h1{text-align:center}.a{margin:10px 0;padding:10px;border:1px solid #ddd;border-radius:5px}.b{font-weight:bold;margin-bottom:5px}.c{color:#666;font-size:.9em;margin-left:5px}.d{background-color:#f5f5f5;padding:15px;margin-bottom:20px}.e{display:flex;align-items:center;gap:15px;margin-top:8px}select{padding:5px}.f{margin-right:10px}.g{background-color:#f0f8ff}<\/style><\/head><body><h1>书架管理<\/h1><p class=\"note\">选择完以后点击右上角的\"✓\"确定并刷新发现<\/p><div class=\"d\"><h3>全局排序设置<\/h3><div class=\"e\"><select id=\"h\" onchange=\"i()\"><option value=\"0\">-- 全局排序方式 --<\/option><option value=\"1\">按更新时间<\/option><option value=\"2\">按收藏时间<\/option><option value=\"3\">按作品收藏数<\/option><option value=\"4\">按作品字数<\/option><\/select><\/div><\/div><div id=\"j\"><\/div><script>\nvar k=${sourceGet},l=k.map(function(m,n){var o=m.split(\"::\"),p=o[1].split(\",\");return{q:o[0],r:p[0],s:p[1]===\"1\",t:p[2]||\"0\",u:n,v:o[0]===\"我的收藏\"}});\nvar m=l.find(function(m){return m.q===\"我的收藏\"});\nif(!m)l.unshift({q:\"我的收藏\",r:\"-1\",t:\"0\",s:true,v:true,u:0});\nl.forEach(function(m,n){m.u=n});\nfunction w(){var x=document.getElementById(\"j\");x.innerHTML=\"\";l.forEach(function(m,n){var y=document.createElement(\"div\");y.className=m.v?\"a g\":\"a\";var z=document.createElement(\"div\");z.className=\"b\";z.appendChild(document.createTextNode(m.q+\" (ID: \"+m.r+\")\"));var A=document.createElement(\"span\");A.className=\"c\",A.id=\"B_\"+n,z.appendChild(A);var C=document.createElement(\"div\");C.className=\"e\";var D=document.createElement(\"input\");D.type=\"checkbox\",D.className=\"f\",D.checked=m.s,D.disabled=m.v,D.onchange=function(){m.s=this.checked,E(n)};var F=document.createElement(\"select\");F.id=\"G_\"+n,F.onchange=function(){m.t=this.value,E(n)},F.innerHTML='<option value=\"0\">-- 选择排序方式 --<\/option><option value=\"1\">按更新时间<\/option><option value=\"2\">按收藏时间<\/option><option value=\"3\">按作品收藏数<\/option><option value=\"4\">按作品字数<\/option>',F.value=m.t||\"0\";C.appendChild(D),C.appendChild(document.createTextNode(\"启用\")),C.appendChild(F),y.appendChild(z),y.appendChild(C),x.appendChild(y),E(n)})}\nfunction E(n){var m=l[n];m&&(n=document.getElementById(\"B_\"+n))&&(n.textContent=(m.s?\"1\":\"0\")+\",\"+([\"0\",\"1\",\"2\",\"3\",\"4\"][m.t]||\"0\"))}\nfunction i(){var H=document.getElementById(\"h\").value;if(H!==\"0\"){l.forEach(function(m,n){m.t=H;var I=document.getElementById(\"G_\"+n);I&&(I.value=H,E(n))})}}\nw();\n<\/script><\/body><\/html>`;\n\nlet base64 = `data:text\/html;base64,${java.base64Encode(html)}`;\nlet body = java.startBrowserAwait(base64,\"书架管理\",false).body();\n\nlet Jsoup = org.jsoup.Jsoup.parse(body);\nlet shelfElements = Jsoup.select(\"div.b\");\nlet result = Array.from(shelfElements).map(el => {\n let text = el.text().trim();\n let match = text.match(\/^(.+?)\\s*\\(ID:([\\-\\d\\s]+)\\)(\\d+),(\\d+)$\/);\n if (!match) return null;\n let name = match[1].trim();\n let id = (match[2] || '').trim(); \n let enabled = match[3];\n let sortId = match[4];\n return `${name}::${id},${enabled},${sortId}`;\n}).filter(Boolean);\n\nsourceGet = String(source.getVariable()).replace(\/\\n*(?:请勿删除此书架数据)*❗️[\\s\\S]+?❗️\/g,'');\nlet ShlefClass = \"请勿删除此书架数据❗️\"+JSON.stringify(result)+\"❗️\"\n\tsource.setVariable(sourceGet+\"\\n\"+ShlefClass);\n\tlet shelfshow = Jsoup.select(\"div.b:has(span:contains(1,))\").toArray().map(x=>{\nreturn String(x.select(\"span\").attr(\"id\")).replace(\/B_\/,'')\n\t}).join(\",\");\nsetHeaders(\"classNum=\"+shelfshow);\n\tjava.toast(\"设置成功,请刷新发现\");\n\t}catch(e){\n\t\tjava.log(e)\n\t}\n}\n\nfunction getFl(){\n\tlet svg=`<svg width=\"1150\" height=\"300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t <rect width=\"100%\" height=\"100%\" fill=\"#f0f0f0\" \/>\t\n\t <text x=\"20\" y=\"60\" font-family=\"Arial, sans-serif\" font-size=\"35\" fill=\"#333\" font-weight=\"bold\">选项(填写需要的序号后,点“✓”确认,如:2,5【默认为9,10】)<\/text>\t\n\t <text x=\"50\" y=\"60\" font-family=\"Arial, sans-serif\" font-size=\"30\" fill=\"#555\">\n\t <tspan x=\"150\" dy=\"1.5em\">0. 古代言情<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">1. 现代言情<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">2. 幻想现言<\/tspan>\n\t <tspan x=\"900\" dy=\"0\">3. 古代穿越<\/tspan>\n\t <tspan x=\"150\" dy=\"1.5em\">4. 奇幻言情<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">5. 未来游戏悬疑<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">6. 都市纯爱<\/tspan>\n\t <tspan x=\"900\" dy=\"0\">7. 现代幻纯<\/tspan>\n\t <tspan x=\"150\" dy=\"1.5em\">8. 古代纯爱<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">9. 百合<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">10. 无CP<\/tspan>\n\t <tspan x=\"900\" dy=\"0\">11. 衍生无CP<\/tspan>\n\t <tspan x=\"150\" dy=\"1.5em\">12. 衍生纯爱<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">13. 衍生言情<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">14. 二次元言情<\/tspan>\n\t <tspan x=\"900\" dy=\"0\">15. 多元<\/tspan>\n\t <tspan x=\"150\" dy=\"1.5em\">16. 男主无CP<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">17. 女主无CP<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">18. 未来幻纯<\/tspan>\n\t <\/text>\n\t<\/svg>`;\n\tsvg=java.base64Encode(svg);\n\tsaveTag(svg,\"fl\")\n}\n\nfunction getTag(){\n\tlet svg=`<svg width=\"1150\" height=\"300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t <!-- 背景矩形 -->\n\t <rect width=\"100%\" height=\"100%\" fill=\"#f0f0f0\" \/>\t\n\t <!-- 标题 -->\n\t <text x=\"20\" y=\"40\" font-family=\"Arial, sans-serif\" font-size=\"35\" fill=\"#333\" font-weight=\"bold\">选项(填写需要的序号后,点“✓”确认,如:2【默认为5,只能单选】)<\/text>\t\n\t <!-- 选项列表 -->\n\t <text x=\"60\" y=\"60\" font-family=\"Arial, sans-serif\" font-size=\"50\" fill=\"#555\">\n\t <tspan x=\"150\" dy=\"2.5em\">1. 言情<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">2. 纯爱<\/tspan>\n\t <tspan x=\"650\" dy=\"0\">3. 百合<\/tspan>\n\t <tspan x=\"150\" dy=\"1.5em\">4. 无CP<\/tspan>\n\t <tspan x=\"400\" dy=\"0\">5. 多元<\/tspan>\n\t <\/text>\n\t<\/svg>`;\n\tsvg=java.base64Encode(svg);\n\tsaveTag(svg,\"bq\")\n}\n\nfunction getloginUrl() {\n\tlet 账号 = result.get(\"账号\");\n\tlet 密码 = result.get(\"密码\");\n\tlet en = encode(密码);\n\tlet id = (\"846\"+Date.now()+\"4893\") + \":\" + java.androidId() + \"d4:\";\n\tlet sign = encode(Date.now() + \"_\" + id + \"_\");\n\tlet loginUrl = `https:\/\/app.jjwxc.org\/androidapi\/login?versionCode=401&loginName=${encodeURIComponent(账号)}&encode=1&loginPassword=${encodeURIComponent(en)}&sign=${encodeURIComponent(sign)}&identifiers=${encodeURIComponent(id)}&autologin=1`;\n\treturn loginUrl\n}\n\nfunction getCode(t) {\n\ttry {\n\t\tlet 验证码 = result.get(\"验证码(填完验证码后,要点👤登录)\");\n\t\tlet 账号 = result.get(\"账号\");\n\t\tlet 密码 = result.get(\"密码\");\n\t\tif (!\/^\\d{4,}\/.test(验证码)) {\n\t\t\tlet res = JSON.parse(java.ajax(getloginUrl()));\n\t\t\tif (res.code == \"221003\") {\n\t\t\t\tlet url = \"https:\/\/app.jjwxc.org\/\/appDevicesecurityAndroid\/getDeviceSecurityCode\";\n\t\t\t\tbody = \"versionCode=401&username=\" + encodeURIComponent(账号) + \"&checktype=\" + t;\n\t\t\t\toption = {\n\t\t\t\t\t\"method\": \"POST\",\n\t\t\t\t\t\"body\": String(body)\n\t\t\t\t}\n\t\t\t\tmsg = JSON.parse(java.ajax(url + \",\" + JSON.stringify(option))).data.message;\n\t\t\t\tjava.toast(msg);\n\t\t\t} else {\n\t\t\t\tmsg = \/校验验证码\/.test(res.message) ? \"请请尝试填入上次发给你的验证码(可能是很久之前的)\" : res.message;\n\t\t\t\tmsg = msg??\"✅登录成功\\n❗️请你删除抓包token里的值,以免被旧值覆盖\\n🆕最新token值:\"+res.token+\"\\n✅无需填验证码\";\n\t\t\t java.log(msg);\n\t\t\t java.longToast(msg);\n\t\t\t if (\/\\d+_[a-z\\d]+\/.test(String(res.token))) {\n\t\t\t\t\tjava.log(\"获取token值, \" + res.token);\n\t\t\t\t\tLoginToken(String(res.token))\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tlet getCodeurl = getloginUrl() + \"&checktype=\" + t + \"&checkdevicecode=\" + 验证码;\n\t\t\tlet data = java.ajax(getCodeurl);\n\t\t\tlet token = JSON.parse(data).token ?? JSON.parse(data).message;\n\t\t\tjava.longToast(\"✅登录成功\\n❗️请你删除抓包token里的值,以免被旧值覆盖\\n🆕最新token值:\"+token);\n\t\t\tjava.log(\"获取到的token值: \" + token)\n\t\t\tLoginToken(token)\n\t\t}\n\t} catch (e) {\n\t\tjava.log(e)\n\t}\n}\n\t\nfunction LoginToken(token){\n\ttry{\n\ttoken = String(token).replace(\/undefined|token=|\\s|&.*\/g,'');\n\ttoken = \/^\\d+_\\w{32}$\/.test(token)?token:\"\";\n\tif(token==\"\"){\n\t\tjava.log(\"设置token失败,请检查填写的token值\")\n\t\t}\n\t\n\tlet fl = Map(\"fl\")==\"\"?\"9,10\":Map(\"fl\");\n\tlet search = Map(\"search\")==\"\"?\"1,8\":Map(\"search\");\n\tlet bq = Map(\"bq\")==\"\"?\"5\":Map(\"bq\");\t\n\tlet at = source.getLoginInfoMap().get(\"作者列表(作者::作者id 注意添加多个用空格分割)\");\n\tat = String((at==\"\"||at==null)?\"\":at);\n\tlet classNum = Map(\"classNum\");\n\t\n\tsetHeaders(\n\t\t`token=${token}`,\n\t\t`fl=${fl}`,\n\t\t`bq=${bq}`,\n\t\t`classNum=${classNum}`,\n\t\t`at=${java.base64Encode(at)}`,\n\t\t`search=${search}`\n\t)\n}catch(e){\n\tjava.log(e);\n\t}\n}\n\t\nfunction login(){\n\tlet token = Map(\"token\");\n\tlet t = source.getLoginInfoMap()[\"抓包token登录[与账号登录二选一,账号登录会让旧token失效,要删除这里]\"];\t\t\n\tif(t!=\"\"&&t!=null)token = t;\t\n\tLoginToken(token);\n\t}", "respondTime": 180000, "ruleBookInfo": { "author": "$.authorName", "canReName": "1", "coverUrl": "{{$.originalCover||$.novelCover}}\n<js>\nif(\/(?:postimg|bmp|alicdn)\\.\/.test(result)){\n\tjava.setContent(src);\n\tresult = \"https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid={{$.novelId}}\"\n\t}else{\n\t\tresult = result\n\t\t}\n\t\theader = {\n\t\t\"headers\":{\n\t\t\t\"referer\":result.match(\/(^https?:\\\/\\\/.*?\\\/)\/)[1]\n\t\t\t}\n\t\t}\nresult = (result +\",\"+ JSON.stringify(header)).replace(\/wx\\d+\/,'wx2')\n<\/js>", "intro": "<js>\n\/\/请假条\ntry{\na=JSON.parse(java.ajax('http:\/\/app.jjwxc.org\/androidapi\/getnovelOtherInfo?novelId='+baseUrl.match(\/(\\d+)\/)[1]+'&type=novelbasicinfo&versionCode=163'));\n\njava.put(\"pv\",a.novelreview)\n\n$=a.novelLeave;\nn='\\n';\nleave=$?.leaveContent?'————————•————————'+n+''+n+$?.leaveDateBack+n+''+''+' '+$?.leaveContent+n+$?.leaveDate.replace(\/请假时间:\/,'⌚️')+n+$.leaveIntro:'';\njava.put('leave',leave);\njava.put('intro',JSON.parse(result).novelIntro.replace(\/\\#\/g,'#'));\nresult}catch(err){\njava.log(err);\njava.put('leave',\"\");\njava.put('intro',\"\");\n}\n<\/js>\n{{\/开启购买\/.test(book.getVariable(\"custom\"))?\" 💰已开启自动购买下五章,建议删除书籍变量的[开启\/关闭购买]文字,避免刷新书籍时反复进行网络请求<br>\\nㅤ<br>\":\"\"}}\n \n📖{{$.novelIntroShort##。$}}📖\n{{'\\nㅤ'}}<br>\n\n🏆{{$.ranking}} 🍼{{$.nutrition_novel}} 📝{{$.comment_count}} 🔖{{$.novelStyle}}\n◉ 最新:{{java.get(\"lastChapter\")}}<br>\n◉ 标签:{{$.novelTags##,|\\s##🏷}}<br>\n◉ {{$.protagonist##,|,|;|;##、}}<br>\n◉ {{$.costar##,|,|;|;##、}}<br>\n◉ {{$.other##,|,|;|;##、}}<br>\n◉ 视角:{{$.mainview}}<br>\n◉ 评分:{{java.get(\"pv\")}}<br>\n◉ 收藏:{{$.novelbefavoritedcount}}<br>\n{{String(java.get('intro')).replace(\/立意:\/,'◎◎ 立意:')}}<br>{{java.get('leave')}}<br>\n{{'\\n'+''}}\n添加作者:{{$.authorName}}::{{$.authorId}}\n<js>\nresult=String(result);\nli=result.match(\/◎ 立意.*\/)?'ㅤ\\n'+result.match(\/(◎ 立意.*?<br>)\/)[1]:'';\nString(result).replace(\/📖📖|📖''📖\/,'').replace(\/(◉ 收藏.*?<br>)\/,'$1\\n'+li+'ㅤ\\n'+'————————•————————\\n').replace(\/◎◎ 立意.*<br>\/,'').replace(\/(?:◉ 标签:|◉ 主角:|◉ 配角:|◉ 其它:|◉ 视角:|◉ 评分:|◉ 最新:|ㅤ\\n◎ 立意:)<br>\/g,'')<\/js>", "kind": "{{step=java.getString('$.novelStep')=='2'?'已完结':'连载中';}},{{$.novelClass}}##-##,", "lastChapter": "<js>\ntry{\n\tnovelId = baseUrl.match(\/(\\d+)\/)[1];\nlastStr = java.ajax(\"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1\");\n\ncache.put(\"有卷名src\"+novelId, lastStr, 60)\n\nlast=JSON.parse(lastStr).chapterlist;\n$=last[last.length-1];\nvip= ($.isvip!=='0');\npoint=($.point=='0');\nchapterMessage =\/福利番外\/.test($.chapterMessage);\nvip = (point&&vip)?\"\":\"🔒\"\nvip = chapterMessage?\"🎁\":vip;\nchapterMessage =\/限免\/.test($.chapterMessage);\nvip = chapterMessage?\"🆓\":vip;\n\nchapterid=$.chapterid;\nchaptername=$.chaptername;\ndate=$.chapterdate;\nresult = vip+chapterid+'.'+chaptername+'•'+date;\n\njava.put(\"lastChapter\",result)\n}\ncatch(err){\nresult=\"请刷新或暂无目录\"\n}\n<\/js>", "name": "$.novelName", "tocUrl": "@js:\ntoken = Map(\"token\");\nnovelId=baseUrl.match(\/novelId=(\\d+)\/)[1];\nurl = `token=${token}&novelId=${novelId}`;\nresult = `data:token;base64,${java.base64Encode(url)},{\"type\":\"jjwx\"}`;", "wordCount": "$.novelSizeformat||novelsizeformat" }, "ruleContent": { "content": "<js>\ntry{\nconst bbb = book.getVariable(\"custom\");\nconst sss = source.getVariable();\nif (\/jjwxc|vipContent\/.test(baseUrl)) {\n\tfunction decode(){\n\tbaseUrl = `https:\/\/app.jjwxc.org\/androidapi\/chapterContent?versionCode=381&${bDe(baseUrl)}`;\t \n \/\/let date = \"Mobile \" + Date.now();\n let response = java.get(baseUrl, {});\n let content = String(response.body());\n isPay = !\/\"content\"\/.test(content)&&!\/\"data\":{}\/.test(content);\n if(isPay){\n let accesskey = String(response.header(\"accesskey\"));\n let keyString = String(response.header(\"keystring\"));\n let accesskeyLen = accesskey.length;\n let v6 = accesskey.charCodeAt(accesskeyLen - 1);\n let v9 = 0;\nfor (var i = 0; i < accesskey.length; i++) {\n v9 += accesskey.charCodeAt(i);\n}\n let v15 = v9 % keyString.length;\n let v17 = Math.floor(v9 \/ 65);\n let v18 = keyString.length;\n let v43 = keyString.substring(v15, v17 + v15 > v18 ? v18 : v17 + v15);;\n let v32 = content.length;\n let [v38, dest] = (v6 & 1) !== 0 ? [content.slice(-12), content.slice(0, -12)] : [content.slice(0, 12), content.slice(12)];\n let key = java.md5Encode(v43 + v38).slice(0, 8);\n let iv = java.md5Encode(v38).slice(0, 8);\n content = java.createSymmetricCrypto(\"DES\/CBC\/PKCS5Padding\", key, iv).decryptStr(dest);\n } \n return content\n}\n\t\n let intro = String(java.get(\"intro1\")).replace(\/\\s\/g, ''); \n const hasContent = \/\"content\"\/.test(result); \n java.setContent(hasContent ? result : decode());\n intro = intro ? `◎${intro}◎<br>` : '';\n let content = String(java.getString(\"$..content\"));\n let saybody = String((\/关闭作话\/.test(bbb) || \/关闭作话\/.test(sss))?\"\":java.getString(\"$..sayBody\"));\n \n saybody = saybody.replace(\/(?:.*(?:蟹蟹|扔了|感谢|投出|灌溉营养液|送的|谢谢).*?(?:手榴|月票|霸王票|小天使|火箭炮|深水鱼雷|浅水炸弹|地雷|营养液)([xX]\\d+)*.*|非常感谢大家对我的支持,我会继续努力的!|.*?瓶[;~]|“.*?”(?:营养液|手榴弹|月票|霸王票|小天使|火箭炮|深水鱼雷|浅水炸弹|地雷)x\\d+|读者.*?(月石|营养液).*|地雷感谢:[\\s\\S]+)\/g,'');\n \n let say = \/[\\u4e00-\\u9fa5]\/.test(saybody) \n ? `\\n【📢作者有话说】\\n${saybody}` : '';\n \n if (\/token|vipContent\/.test(baseUrl)) {\t \n const vipc = content.length > 30\n ? java.createSymmetricCrypto(\"DES\/CBC\/PKCS5Padding\", \"KW8Dvm2N\", \"1ae2c94b\").decryptStr(content) \n : `${\/23110\/.test(String(java.getString(\"$..message\")))?\"请使用安卓端的token\":java.getString(\"$..message\")}\\n❗️登录后请先更新目录,再刷新正文`;\n result = intro + vipc + say;\n } else {\n result = intro + content + say;\n }\n} \nresult;\n}catch(e){\n\tjava.log(e)\n\t}\n<\/js>\n##为营造更好的评论环境,近期网站要求发评须进行实名认证,未实名用户评论暂时仅在对应作者后台及发评用户后台可见.*|获取正文失败[\\s\\S]+|◎\\s+?◎|◎undefined◎", "imageStyle": "TEXT", "payAction": "baseUrl = bDe(baseUrl);\ncid = baseUrl.match(\/chapterId=(\\d+)\/)[1];\nnid = baseUrl.match(\/novelId=(\\d+)\/)[1];\ntoken = Map(\"token\");\nenbody = String(Date.now())+\":\"+token+\":\"+nid;\nsign = encode(enbody)\nbody = \"versionCode=287&novelId=\"+nid+\"&chapters=\"+cid+\"&orderType=15&isautoBuy=0&autosubscribeStatus=0¬UseBackpoint=&sign=\"+sign;\nurl = \"https:\/\/android.jjwxc.net\/androidapi\/buy,\"\npost = {\n\t\"method\":\"POST\",\n\t\"body\":String(body)\n\t}\n a = java.ajax(url+JSON.stringify(post));\n \n if(\/购买成功\/.test(JSON.parse(a).message)){\n \tjava.longToast(JSON.parse(a).message);\n \tresult = true\n \t}else{\n \t\tmm = JSON.parse(a).message==\"\"?JSON.parse(a).popupdata.popupmessage+\"\\n❗️进晋江app进行一次验证后❗️才能在阅读app使用购买功能\":JSON.parse(a).message;\n \t\tjava.longToast(mm);\n \t\t}", "replaceRegex": "<js>\nc = chapter;\nif(\/^◎\/.test(result) ){\n\tchapter = result.match(\/◎([\\s\\S]+?)(…)*◎\/)[1].replace(\/\\s\/g,'').replace(\/,\/g,',');\n\tchapter2=result.match(\/◎[\\s\\S]+?◎([\\s\\S]+)\/)[1].replace(\/\\s\/g,'').replace(\/,\/g,',');\n\tnum = 4;\tif(chapter.substring(0,num)==chapter2.substring(0,num)){\n\t\tresult = result.replace(\/◎[\\s\\S]+?◎\\s*\/,'')\n\t}else{result}\n}else{result}\n\nfunction removeDuplicatedParagraphs(text, chapterTitle) {\n var paragraphs = text.split('\\n');\n var firstParagraph = paragraphs[0].trim();\n var containsSpecialChar = firstParagraph.includes('◎');\n var targetIndex = containsSpecialChar ? 1 : 0;\n var targetParagraph = paragraphs[targetIndex].trim();\n var lastChar = targetParagraph.charAt(targetParagraph.length - 1);\n var isPunctuation = \/[——◎。!?,;:\\?!,;:》 】)”’…~\"'\\)]\/.test(lastChar);\n \n if (!isPunctuation) {\n for (var i = 0; i < chapterTitle.length - 1; i++) {\n var twoChars = chapterTitle.substring(i, i + 2);\n if (twoChars === ' ' || twoChars.includes('☪')) continue;\n \n if (targetParagraph.includes(twoChars)) {\n java.log(\"删除当前段落:\" + targetParagraph);\n java.log(\"当前章节名:\" + chapterTitle);\n java.log(\"相同连续文字:\" + twoChars);\n paragraphs.splice(targetIndex, 1);\n break;\n }\n }\n }\n return paragraphs.join('\\n');\n}\n\n\nlet bbb = String(book.getVariable(\"custom\"));\nlet sss = String(source.getVariable());\n\nif(\/净化\/.test(sss)||\/净化\/.test(bbb))result = removeDuplicatedParagraphs(result, title);\nresult = result.replace(\/<br\\\/>\/g,'\\n');\n\nresult\n<\/js>" }, "ruleExplore": { "author": "$.authorName||$.authorname", "bookList": "<js>\nif(\/incrementFavorite\/.test(baseUrl)){\nlet order = Number(java.get(\"order\"));\nfunction sortBooks(data, order) {\n let sortedData = JSON.parse(data).addData;\n switch(order) {\n case 1: \n sortedData.sort((a, b) => { \t\n return Date.parse(b.chapterdateNewest.replace(\/ \/,'T')) - Date.parse(a.chapterdateNewest.replace(\/ \/,'T'));\n });\n break; \n case 2:\n sortedData.sort((a, b) => {\n return Number(b.favoriteDate) - Number(a.favoriteDate);\n });\n break; \n case 3:\n sortedData.sort((a, b) => {\n return Number(b.novelbefavoritedcount) - Number(a.novelbefavoritedcount);\n });\n break; \n case 4: \n sortedData.sort((a, b) => {\n return Number(b.original_novelsize) - Number(a.original_novelsize);\n });\n break; \n default:\n break;\n }\n return sortedData;\n}\nresult = JSON.stringify(sortBooks(src,order))\n\t}\nresult\n<\/js>\n@JSon:$..[?(@.novelName)]&&$..[?(@.novelname)]&&$.massage\n<js>\nresult = (baseUrl.match(\/signin|getSearchForKeyWords\/))?`{signIn:[${src}]}`:result;\n<\/js>\n$..[?(@.novelName)]&&$..[?(@.novelname)]&&$.signIn[*]", "bookUrl": "http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId={{$.novelid||$.novelId}}@put:{id:$.novelid||$.novelId}", "coverUrl": "@JSon:$.cover||$.novelCover||$.ebookurl||$.novel_cover\n<js>\nif(\/(?:postimg|bmp|alicdn)\\.\/.test(result)){\n\tjava.setContent(src);\n\tresult = \"https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid={{$.novelId}}\"\n\t}else{\n\t\tresult = result\n\t\t}\n\t\theader = {\n\t\t\"headers\":{\n\t\t\t\"referer\":result.match(\/(^https?:\\\/\\\/.*?\\\/)\/)[1]\n\t\t\t}\n\t\t}\nresult = (result +\",\"+ JSON.stringify(header)).replace(\/wx\\d+\/,'wx2')\n<\/js>", "intro": "‎---------\n📁{{$.className}}\n🏷{{$.novelClass||$.type##-##🏷}}\n📖{{$.novelIntroShort||$.novelintroshort}}\n<js>\nfree=\"{{$.freeDate}}\";\nif(free!=\"\"){\nresult=result+\"\\n🗓 限免日期:\"+free+\"\\n\"\n}else{\nresult=result\n}\n<\/js>\n##(?:🏷|📁)\\s+", "kind": "{{java.getString('$.novelStep||$.novelstep')=='2'?'已完结':'连载中';}},{{$.channelName&&$.tags##\\s+##,}}", "lastChapter": "第{{$.maxChapterId}}章##第章", "name": "$.novelName||$.novelname||$.message", "wordCount": "$.novelSizeformat||$.novelSize" }, "ruleSearch": { "author": "$.author", "bookList": "$.items[:10]\n<js>\nlet page = java.get(\"page\");\nlet key = java.get(\"key\");\nlet authorUrl = `https:\/\/app.jjwxc.org\/androidapi\/search?versionCode=191&keyword=${key}&type=2&page=${page}&searchType=8&sortMode=DESC`;\nlet authorlist = JSON.parse(java.ajax(authorUrl))?.items;\nlet list = authorlist?result.toArray().concat(authorlist):result.toArray();\nlet json = [];\nlet urls = list.map(x=>{return `https:\/\/www.jjwxc.net\/onebook.php?novelid=${x?.novelid}`});\nlet htmls = java.ajaxAll(urls);\nhtmls.forEach((x,i)=>{\n \t\t let html = String(x.body());\t \n \t\t java.setContent(html); \n \t\t let id = String(java.getString(\"@text.wap阅读点击:@a@text\")).match(\/(\\d+)$\/)[1];\n let J = org.jsoup.Jsoup.parse(html);\n let authorid = J.select('h1+span>a, h2 a').attr(\"href\").match(\/(\\d+)\/)[1];\n let character_name = \"主角:\"+J.select('.character_name').text();\n let des = character_name+String(J.select(\"span[style='color:#F98C4D']\").text())\n .replace(\/立意:\/, '◎立意:')\n .replace(\/一句话简介:\/, '◎一句话简介:') + \"◎\" + java.getElement(\"id.novelintro\").text();\n title = J.select('h1').text();\n let author = J.select('span[itemprop=\"author\"]').text();\n let cover = J.select(\".noveldefaultimage\").attr(\"src\");\n if (\/(?:postimg|bmp|alicdn)\\.\/.test(cover)) {\n cover = `https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid=${id}`;\n }\n let header = {\n headers: {\n referer: cover.match(\/(^https?:\\\/\\\/.*?\\\/)\/)[1]\n }\n };\n cover = `${cover},${JSON.stringify(header)}`.replace(\/wx\\d+\/, 'wx2');\n\n let cat = String(J.select('a[style=\"text-decoration:none;color: red;\"]').text()).replace(\/\\s\/g, ',');\n let status = String(J.select('span[itemprop=\"updataStatus\"]').text());\n \n let size = String(J.select('span[itemprop=\"wordCount\"]').text()).replace(\/字\/, '');\n let n = String(java.getElement('@@id.oneboolt@tag.tr.-2@span').text())\n .replace(\/\\n\/, '•')\n .replace(\/\\*最新更新\/, '')\n .replace(\/(.*?)\\[(?:VIP|福利番外)\\]\/, '🔒$1');\n let num = java.getElement('@@id.oneboolt@tag.tr.-2@tag.td.0').text();\n let genre = J.select('[itemprop=\"genre\"]').text().split('-')[1];\n let view = html.match(\/<span>作品视角:<\\\/span>([^<]+)<\\\/li>\/)[1].replace(\/\\s\/g, '');\n \n json.push({\n title,\n author,\n cat: `${view},${status},${genre},${cat}`,\n size,\n url: `https:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=${id}`,\n des,\n new: `${num}、${n}`.replace(\/(\\d+、)🔒\/, '🔒$1').replace(\/^章节、|、$\/, ''),\n cover\n });\n});\nJSON.stringify(json)\n<\/js>\n$.[*]", "bookUrl": "$.url", "checkKeyWord": "冰山前妻不想拿我be剧本", "coverUrl": "$.cover", "intro": "$.des", "kind": "$.cat", "lastChapter": "$.new", "name": "$.title", "wordCount": "$.size" }, "ruleToc": { "chapterList": "<js>\ntry{\nbaseUrl = bDe(baseUrl);\nvar novelId=getNid(baseUrl);\nvar token = Map(\"token\");\n\nvar 有卷名src =!cache.get(\"有卷名src\"+novelId)?java.ajax(\"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1\"):cache.get(\"有卷名src\"+novelId);\n\n有卷名src = JSON.parse(有卷名src);\n\nvar message = 有卷名src?.message;\nif(\/\\d+_[\\w\\d]{16,}\/.test(token)&&!\/1058\/.test(message)){\n\t\nlet \ttokenUrl = \"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1&token=\"+token;\n\t\nlet tokenSrc = (!cache.get(\"tokenSrc\"+novelId)||\/登入验证失败\/.test(cache.get(\"tokenSrc\"+novelId)))?JSON.parse(java.ajax(tokenUrl)):JSON.parse(cache.get(\"tokenSrc\"+novelId));\n\n\ncache.delete(\"有卷名src\"+novelId);\n\n\nlet lessData = tokenSrc.chapterlist;\n\nlet moreData = 有卷名src.chapterlist;\nif(lessData!==undefined){\nfor(let item of lessData) {\n let match = moreData.find(moreItem => moreItem.chapterid === item.chapterid && moreItem.chaptertype === item.chaptertype);\n if(match) {\n Object.assign(match, item);\n }\n}\n}\nJSON.stringify(moreData)\n}else{\n\tresult = JSON.stringify(有卷名src)\n\t}\n}catch(e){\n\tjava.log(e)\n\t}\n<\/js>\n$.chapterlist[*]||$.[*]\n\n<js>\n\nfunction readEncrypt(novelid,flag) {\n\t token = Map(\"token\"); \n \tFORUMSIGNTAG = 1;\n READSIGNTAG = 0;\n\t strArr = [token,novelid,\"autosubscribe\",flag]; \n\t sb = new Date().getTime().toString();\n length = strArr.length;\n for ( i2 = READSIGNTAG; i2 < length; i2 += FORUMSIGNTAG) {\n str = strArr[i2];\n sb+=\":\";\n sb+=str;\n } \n let option = {\n\t \t\"method\":\"POST\", \t\"body\":\"versionCode=313&sign=\"+encode(sb)\n\t \t}\n\t \nurl = \"https:\/\/android.jjwxc.com\/androidapi\/autoSubscribe,\"+JSON.stringify(option)\n\n java.longToast(JSON.parse(java.ajax(url)).message)\n }\n \n if(\/(开启|关闭)购买\/.test(book.getVariable(\"custom\"))){\n \ta = \/关闭购买\/.test(book.getVariable(\"custom\"))?\"cancel\":(\/开启购买\/.test(book.getVariable(\"custom\"))?\"open\":\"cancel\");\n \t\n readEncrypt(result[0].novelid,a)\n \t}\n \t\nresult = result[0]==\"1058\"||result[0]==\"1068\"?JSON.stringify([{\"chaptername\":\"暂无目录\",\"chapterid\":\"\",\"islock\":\"0\"}]):result;\n<\/js>\n$.[*]", "chapterName": "<js>\n$=result;title=$.chaptername;title=String(title).replace(\/^\\s+\/,'');intro=$.chapterintro;vip=$.isvip!='0';lock=$.islock!='0';type=$.chaptertype=='1'?true:false;num=!type?$.chapterid+\" ☪ \":'';\nbbb = book.getVariable(\"custom\");sss = source.getVariable();\nif(\/去章节序号\/.test(bbb) || \/去章节序号\/.test(sss)){\nnum=''\n}\nif(\/章节名\/.test(bbb) || \/章节名\/.test(sss)){\nnum=!type?\"第\"+$.chapterid+\"章 \":'';\n}\ntitle=type?'📖 '+title+' 📖':title;\nif( (\/目录简介\/.test(bbb) || \/目录简介\/.test(sss))&&!\/📖\/.test(title)){\n\tfu = \/目录简介【(.*?)】\/.test(bbb)?bbb.match(\/目录简介【(.*?)】\/)[1]:sss.match(\/目录简介【(.*?)】\/)[1];\n\ttitle = title +(fu===\"删除\"?\"\":fu+intro)\n\t}else{\n\t\tjava.put(\"intro1\",intro);\n\t\t}\nl=lock?'[此章节已锁]':'';\nresult=num+title+l;\n<\/js>", "chapterUrl": "@js:\nbaseUrl = bDe(baseUrl);\nnovelId=getNid(baseUrl);\ntoken = Map(\"token\");\n$=result;\nchapterid=$.chapterid;\nvip=$.isvip!='0';\ntype=$.chaptertype=='1';\nif( !type){\nif(!vip){\nresult='https:\/\/app.jjwxc.net\/androidapi\/chapterContent?novelId='+novelId+'&chapterId='+chapterid\n}else{\nurl = `token=${token}&novelId=${novelId}&chapterId=${chapterid}`;\nresult = `data:vipContent;base64,${java.base64Encode(url)}`\n\t}\nresult = result +`,{\t\"js\":\"book?result:toReview(${novelId},${chapterid},'${result}')\",\"type\":\"jjwx\"}`;\n}else{ result=\"\"}", "isPay": "<js>\npoint=(\"{{$.point}}\"=='0');\nchapterMessage =!\/VIP|番外\/.test(\"{{$.chapterMessage}}\")\nif(chapterMessage||point){\n\tresult=true\n\t}else{\n\t\tresult=false\n\t\t}\n<\/js>", "isVip": "<js>\nvip = (\"{{$.isvip}}\"!=\"0\");\ntype = (\"{{$.chaptertype}}\"=='1');\nresult = !type?(vip?true:false):false\n<\/js>", "isVolume": "<js>\n\"{{$.chaptertype}}\"=='1'?true:false;\n<\/js>", "preUpdateJs": "try{\nvar tocUrl = bDe(book.tocUrl);\nvar oldToken = getToken(tocUrl);\nvar novelId = getNid(tocUrl);\nvar newToken = Map(\"token\");\n\t\nif(\/^\\d+_[\\w\\d]{16,}\/.test(newToken)){\n\t tocUrl = \"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1&token=\"+newToken;\n\t \n let src = java.ajax(tocUrl);\n cache.put(\"tokenSrc\"+novelId, src, 60);\n\t let message = JSON.parse(src).message;\n\t if(\/登入验证失败\/.test(message)){\n\t \t setHeaders(\"token=\"); \t \t \n\t java.longToast(\"登录token已失效,已清除token值,请重新登录\");\n\t java.refreshTocUrl(); \n\t }else if(newToken != oldToken){\n\t \/\/java.longToast(\"目录链接更改为新token\");\n\t \tjava.refreshTocUrl();\n\t }else{\n\t\t\t \tcache.put(\"tokenSrc\"+novelId, src, 60)\n\t\t} \n\t}else if(\/token=&\/.test(tocUrl)){\n\t\t\t java.refreshTocUrl();\n\t\t\t \/\/ java.longToast(\"更新目录链接的token\");\n\t\t\t} \n\t}catch(e){\n\tjava.log(\"这是错误:\"+e);\n\t}", "updateTime": "{{$.chaptersize}}字•{{$.chapterdate}}•{{$.chapterintro##^\\s*}}##^•|0000-00-00.*|^0字•|•$" }, "searchUrl": "https:\/\/android.jjwxc.net\/androidapi\/search?versionCode=191&keyword={{key;java.put(\"key\",key)}}&type={{Map(\"search\").split(\",\")[0]||1}}&page={{page;java.put(\"page\",page)}}&searchType={{Map(\"search\").split(\",\")[1]||8}}&sortMode=DESC", "variableComment": "请点【登录】查看使用说明", "weight": 0 }