🏷晋江文学

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(\/&lt;br&gt;| | {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\"))?\"&nbsp;&nbsp;💰已开启自动购买下五章,建议删除书籍变量的[开启\/关闭购买]文字,避免刷新书籍时反复进行网络请求<br>\\nㅤ<br>\":\"\"}}\n&nbsp;\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&notUseBackpoint=&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": "&lrm;---------\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
}
广告