🏷晋江文学
https://m.jjwxc.net/channel/
guaner001125 (317)06/09 20:18
新添可关闭章节简介和关闭作话功能,具体看变量说明
{ "bookSourceComment": "❗️一些功能\n1、每隔八小时访问一遍签到(使用的时候访问)\n2、点击“登录”自定义发现\n3、更改过发现要刷新本书源才会生效\n4、点击章节链接可以查看评论,注意要设置成内部浏览器,长按章节链接可以设置\n5、设置源变量或设置书籍变量可以查看一些功能说明\n\n❗️注意事项:\n1、请不要退出晋江app的账号,只要点了退出,或者在其他地方登录了,都要重新抓token。\n2、更新token,书籍就要更新目录。\n3、【抓包token登录】和【账号登录】二选一,【抓包token登录】的优先级高些,填了【抓包token登录】,就是按【抓包token登录的值】登录\n\n4、登录步骤【设备保护关闭的状态下】:\n①填写好账号密码,点击“邮箱验证码”或者“手机验证码”\n②填写好验证码,点击“邮箱登录”或者“手机登录”\n③想要确认是否成功可以在登录UI里点右上角三点,查看登录头token里是否有值。\n④如果弹出提示“请校检验证码”,可尝试填入上一次发送给你验证码。\n\n5、如果邮箱和手机号无法登录,可能是需要过滑动验证码,可尝试先在晋江app里登录一遍后,再在阅读里登录,❗️还是不行就只能抓包token,填写在“抓包token登录”处。", "bookSourceName": "🏷晋江文学", "bookSourceType": 0, "bookSourceUrl": "https:\/\/m.jjwxc.net\/channel\/", "bookUrlPattern": "https?:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo\\?novelId=\\d+", "customOrder": 2, "enabled": true, "enabledCookieJar": false, "enabledExplore": true, "exploreUrl": "<js>\ntoken = Map(\"token\");\n\n\/\/ 选择需要开启的分类\nconst enabledCategories = Map(\"fl\") || \"9,10\";\nconst tagNum = Map(\"bq\") || \"5\";\n\ntagName = [\"言情\",\"纯爱\",\"百合\",\"无Cp\",\"多元\"][Number(tagNum)-1];\ntagCategory = [1,2,3,5,6][Number(tagNum)-1];\nconst at = Map(\"at\");\n\n\n\/\/ 一行个数(0是自由排)\nconst defaultNumPerRow = 0;\n\n\n\/\/ 分隔符\nconst separator = '::';\n\n\n\/\/标识符\n分类标识 =\"🌸\"\n榜单标识=\"📖\"\n标签标识=\"🏷\"\n\n\/\/ 添加作者格式:作者名::作者id\nlet authorNames = String(java.base64Decode(at || \"\")).split(\" \").filter(name => name.trim() !== \"\");\nauthorNames = authorNames.length ? authorNames.map(x => `${x}::::at`) : [];\nif (authorNames.length) authorNames.unshift(\"📖 作者 📖::::1\");\n\n\/\/书架数据\nlet ShelfNum = Map(\"classNum\")??\"\"\nlet ShelfList = [];\n\tif(\/❗️([\\s\\S]+?)❗️\/.test(String(source.getVariable()))){\n\t\tShelfList =JSON.parse(String(source.getVariable()).match(\/❗️([\\s\\S]+?)❗️\/)[1]);\n\t\t}else{\n\t\t\tShelfNum = \"\"\n\t\t\t}\n\n\/\/ 为数组中的每一项添加 \"::::class\"\nShelfList = ShelfList.map(item => item + \"::::class\");\n\n\/\/ 标题::链接::一行个数::分类\nlet all = [\n\"🍒 其他::::1\",\n \"点击签到::https:\/\/app.jjwxc.org\/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))}}\\\"}\",\n \"今日限免::https:\/\/app-cdn.jjwxc.net\/bookstore\/getFullPage?channel=novelfree\",\n \"新书千字榜::https:\/\/app-cdn.jjwxc.com\/bookstore\/favObservationByDate?day=today&use_cdn=1&version=19\",\n \"⬆️ TOP 100::::1\",\n \"言情::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=yq,{'headers':{'versionCode': '389'}}::null\",\n\"纯爱::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=dm,{'headers':{'versionCode': '389'}}::null\",\n\"衍生::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=tr,{'headers':{'versionCode': '389'}}::null\",\n\"无CP+::https:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=nocp_plus,{'headers':{'versionCode': '389'}}::null\",\n\"百合::https:\/\/android.jjwxc.net\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=398&type=bh,{'headers':{'versionCode': '398','versiontype':'reading'}}::null\"\n];\n\nconst categories = [\"古代言情\",\"现代言情\",\"幻想现言\",\"古代穿越\",\"奇幻言情\",\"未来游戏悬疑\",\"都市纯爱\",\"现代幻纯\",\"古代纯爱\",\"百合\",\"无CP\",\"衍生无CP\",\"衍生纯爱\",\"衍生言情\",\"二次元言情\",\"多元\",\"男主无CP\",\"女主无CP\",\"未来幻纯\"];\n\n\/\/ 分类数据\nconst categoryData = {\n \"古代言情\": {\n \"连载\": [\n \"复仇虐渣::natural_16\",\n \"重生::natural_12\",\n \"宫廷侯爵::natural_11\",\n \"架空历史::natural_13\",\n \"布衣生活::natural_9\",\n \"古香古色::natural_8\",\n \"科举朝堂::natural_18\",\n \"励志人生::natural_19\",\n \"市井人家::natural_17\",\n \"女尊女强::natural_14\",\n \"传奇武侠::natural_15\"\n ],\n \"完结\": [\n \"复仇虐渣::natural_33\",\n \"重生::natural_29\",\n \"宫廷侯爵::natural_28\",\n \"架空历史::natural_30\",\n \"布衣生活::natural_26\",\n \"古香古色::natural_25\",\n \"科举朝堂::natural_35\",\n \"励志人生::natural_36\",\n \"市井人家::natural_34\",\n \"女尊女强::natural_31\",\n \"传奇武侠::natural_32\"\n ],\n \"榜单\": [\n \"频道金榜::natural_23\",\n \"运气淘文::40000001\",\n \"勤奋更新::natural_1482\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=101&ranktype=deep\",\n \"育苗实验::90001000_101\",\n \"VIP新文::natural_3\",\n \"新晋作者::natural_4\",\n \"月度排行::natural_5\",\n \"季度排行::natural_6\",\n \"半年排行::natural_7\"\n ]\n },\n \"现代言情\": {\n \"连载\": [\n \"天之骄子::natural_52\",\n \"豪门世家::natural_44\",\n \"励志人生::natural_46\",\n \"娱乐星光::natural_53\",\n \"婚前婚后::natural_47\",\n \"时代新风::natural_51\",\n \"校园青春::natural_73\",\n \"都市情缘::natural_48\",\n \"甜心蜜意::natural_75\",\n \"破镜重圆::natural_49\",\n \"近水楼台::natural_50\",\n \"情有独钟::natural_76\",\n \"时尚流行::natural_74\",\n \"欢喜冤家::natural_54\",\n \"因缘邂逅::natural_55\"\n ],\n \"完结\": [\n \"天之骄子::natural_69\",\n \"豪门世家::natural_61\",\n \"励志人生::natural_63\",\n \"娱乐星光::natural_70\",\n \"婚前婚后::natural_64\",\n \"时代新风::natural_68\",\n \"校园青春::natural_77\",\n \"都市情缘::natural_65\",\n \"甜心蜜意::natural_79\",\n \"破镜重圆::natural_66\",\n \"近水楼台::natural_67\",\n \"情有独钟::natural_80\",\n \"时尚流行::natural_78\",\n \"欢喜冤家::natural_71\",\n \"因缘邂逅::natural_72\"\n ],\n \"榜单\": [\n \"频道金榜::natural_59\",\n \"运气淘文::40000002\",\n \"勤奋更新::natural_1483\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=102&ranktype=deep\",\n \"育苗实验::90001000_102\",\n \"VIP新文::natural_39\",\n \"新晋作者::natural_40\",\n \"月度排行::natural_41\",\n \"季度排行::natural_42\",\n \"半年排行::natural_43\"\n ]\n },\n \"幻想现言\": {\n \"连载\": [\n \"流金年代::natural_107\",\n \"豪门世家::natural_100\",\n \"娱乐时尚::natural_108\",\n \"快穿系统::natural_97\",\n \"种田日常::natural_98\",\n \"打脸爽文::natural_105\",\n \"重启人生::natural_93\",\n \"都市异闻::natural_103\",\n \"穿越时空::natural_94\",\n \"神奇能力::natural_102\",\n \"升级逆袭::natural_104\",\n \"时代奇缘::natural_96\",\n \"人生赢家::natural_95\",\n \"现代架空::natural_101\",\n \"幻想传奇::natural_99\"\n ],\n \"完结\": [\n \"流金年代::natural_123\",\n \"豪门世家::natural_116\",\n \"娱乐时尚::natural_124\",\n \"快穿系统::natural_113\",\n \"种田日常::natural_114\",\n \"打脸爽文::natural_121\",\n \"重启人生::natural_109\",\n \"都市异闻::natural_119\",\n \"穿越时空::natural_110\",\n \"神奇能力::natural_118\",\n \"升级逆袭::natural_120\",\n \"时代奇缘::natural_112\",\n \"人生赢家::natural_111\",\n \"现代架空::natural_117\",\n \"幻想传奇::natural_115\"\n ],\n \"榜单\": [\n \"频道金榜::natural_86\",\n \"运气淘文::40000003\",\n \"勤奋更新::natural_1484\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=103&ranktype=deep\",\n \"育苗实验::90001000_103\",\n \"VIP新文::natural_84\",\n \"新晋作者::natural_87\",\n \"月度排行::natural_81\",\n \"季度排行::natural_82\",\n \"半年排行::natural_88\"\n ]\n },\n \"古代穿越\": {\n \"连载\": [\n \"复仇虐渣::natural_148\",\n \"宫廷侯爵::natural_142\",\n \"架空穿越::natural_140\",\n \"系统快穿::natural_147\",\n \"历史穿越::natural_139\",\n \"科举朝堂::natural_146\",\n \"布衣生活::natural_141\",\n \"欢喜冤家::natural_143\",\n \"女尊女强::natural_138\",\n \"市井人家::natural_145\",\n \"异世穿书::natural_144\"\n ],\n \"完结\": [\n \"复仇虐渣::natural_164\",\n \"宫廷侯爵::natural_158\",\n \"架空穿越::natural_156\",\n \"系统快穿::natural_163\",\n \"历史穿越::natural_155\",\n \"科举朝堂::natural_162\",\n \"布衣生活::natural_157\",\n \"欢喜冤家::natural_159\",\n \"女尊女强::natural_154\",\n \"市井人家::natural_161\",\n \"异世穿书::natural_160\"\n ],\n \"榜单\": [\n \"频道金榜::natural_130\",\n \"运气淘文::40000004\",\n \"勤奋更新::natural_1485\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=104&ranktype=deep\",\n \"育苗实验::90001000_104\",\n \"VIP新文::natural_128\",\n \"新晋作者::natural_131\",\n \"月度排行::natural_125\",\n \"季度排行::natural_126\",\n \"半年排行::natural_132\"\n ]\n },\n \"奇幻言情\": {\n \"连载\": [\n \"天作之合::natural_179\",\n \"西方奇幻::natural_183\",\n \"爽文::natural_181\",\n \"奇幻甜宠::natural_177\",\n \"升级逆袭::natural_188\",\n \"东方玄幻::natural_186\",\n \"灵异神怪::natural_182\",\n \"穿书异能::natural_187\",\n \"系统穿越::natural_185\",\n \"金手指::natural_184\",\n \"另类幻想::natural_180\"\n ],\n \"完结\": [\n \"天作之合::natural_191\",\n \"西方奇幻::natural_195\",\n \"爽文::natural_193\",\n \"奇幻甜宠::natural_189\",\n \"升级逆袭::natural_200\",\n \"东方玄幻::natural_198\",\n \"灵异神怪::natural_194\",\n \"穿书异能::natural_199\",\n \"系统穿越::natural_197\",\n \"金手指::natural_196\",\n \"另类幻想::natural_192\"\n ],\n \"榜单\": [\n \"频道金榜::natural_170\",\n \"运气淘文::40000005\",\n \"勤奋更新::natural_1486\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=105&ranktype=deep\",\n \"育苗实验::90001000_105\",\n \"VIP新文::natural_168\",\n \"新晋作者::natural_171\",\n \"月度排行::natural_165\",\n \"季度排行::natural_166\",\n \"半年排行::natural_172\"\n ]\n },\n \"未来游戏悬疑\": {\n \"连载\": [\n \"赛博废土::natural_225\",\n \"无限领域::natural_222\",\n \"基建种田::natural_226\",\n \"末世异世::natural_215\",\n \"规则怪谈::natural_223\",\n \"游戏娱乐::natural_216\",\n \"悬疑惊悚::natural_220\",\n \"系统异能::natural_221\",\n \"穿书快穿::natural_227\",\n \"升级爽文::natural_224\",\n \"重生穿越::natural_219\",\n \"未来科幻::natural_217\",\n \"推理探案::natural_214\",\n \"幻想甜宠::natural_228\",\n \"异度幻想::natural_218\"\n ],\n \"完结\": [\n \"赛博废土::natural_241\",\n \"无限领域::natural_238\",\n \"基建种田::natural_242\",\n \"末世异世::natural_231\",\n \"规则怪谈::natural_239\",\n \"游戏娱乐::natural_232\",\n \"悬疑惊悚::natural_236\",\n \"系统异能::natural_237\",\n \"穿书快穿::natural_243\",\n \"升级爽文::natural_240\",\n \"重生穿越::natural_235\",\n \"未来科幻::natural_233\",\n \"推理探案::natural_230\",\n \"幻想甜宠::natural_244\",\n \"异度幻想::natural_234\"\n ],\n \"榜单\": [\n \"频道金榜::natural_206\",\n \"运气淘文::40000006\",\n \"勤奋更新::natural_1487\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=106&ranktype=deep\",\n \"育苗实验::90001000_106\",\n \"VIP新文::natural_204\",\n \"新晋作者::natural_207\",\n \"月度排行::natural_201\",\n \"季度排行::natural_202\",\n \"半年排行::natural_208\"\n ]\n },\n \"都市纯爱\": {\n \"连载\": [\n \"时尚娱乐::natural_270\",\n \"种田日常::natural_266\",\n \"现代都市::natural_260\",\n \"豪门世家::natural_267\",\n \"业界精英::natural_265\",\n \"重生::natural_259\",\n \"边缘恋曲::natural_264\",\n \"校园青春::natural_261\",\n \"婚前婚后::natural_272\",\n \"穿越时空::natural_262\",\n \"成长励志::natural_268\",\n \"欢喜冤家::natural_257\",\n \"情有独钟::natural_271\",\n \"都市甜文::natural_258\",\n \"打脸逆袭::natural_263\"\n ],\n \"完结\": [\n \"时尚娱乐::natural_286\",\n \"种田日常::natural_282\",\n \"现代都市::natural_276\",\n \"豪门世家::natural_283\",\n \"业界精英::natural_281\",\n \"重生::natural_275\",\n \"边缘恋曲::natural_280\",\n \"校园青春::natural_277\",\n \"婚前婚后::natural_288\",\n \"穿越时空::natural_278\",\n \"成长励志::natural_284\",\n \"欢喜冤家::natural_273\",\n \"情有独钟::natural_287\",\n \"都市甜文::natural_274\",\n \"打脸逆袭::natural_279\"\n ],\n \"榜单\": [\n \"频道金榜::natural_250\",\n \"运气淘文::40000007\",\n \"勤奋更新::natural_1488\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=107&ranktype=deep\",\n \"育苗实验::90001000_107\",\n \"VIP新文::natural_248\",\n \"新晋作者::natural_251\",\n \"月度排行::natural_245\",\n \"季度排行::natural_246\",\n \"半年排行::natural_252\"\n ]\n },\n \"现代幻纯\": {\n \"连载\": [\n \"娱乐星光::natural_517\",\n \"萌宠频道::natural_515\",\n \"异闻秘术::natural_514\",\n \"快穿世界::natural_511\",\n \"奇幻灵异::natural_523\",\n \"幻想甜宠::natural_521\",\n \"无限流::natural_509\",\n \"系统::natural_512\",\n \"边缘幻想::natural_516\",\n \"情有独钟::natural_520\",\n \"升级爽文::natural_522\"\n ],\n \"完结\": [\n \"娱乐星光::natural_533\",\n \"萌宠频道::natural_531\",\n \"异闻秘术::natural_530\",\n \"快穿世界::natural_527\",\n \"奇幻灵异::natural_539\",\n \"幻想甜宠::natural_537\",\n \"无限流::natural_525\",\n \"系统::natural_528\",\n \"边缘幻想::natural_532\",\n \"情有独钟::natural_536\",\n \"升级爽文::natural_538\"\n ],\n \"榜单\": [\n \"频道金榜::natural_502\",\n \"运气淘文::40000013\",\n \"勤奋更新::natural_1495\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=118&ranktype=deep\",\n \"育苗实验::90001000_118\",\n \"VIP新文::natural_500\",\n \"新晋作者::natural_503\",\n \"月度排行::natural_497\",\n \"季度排行::natural_498\",\n \"半年排行::natural_504\"\n ]\n },\n \"古代纯爱\": {\n \"连载\": [\n \"仙侠修真::natural_298\",\n \"布衣生活::natural_297\",\n \"武侠传奇::natural_307\",\n \"西幻异世 ::natural_301\",\n \"穿越时空::natural_303\",\n \"重生::natural_302\",\n \"古代幻想::natural_299\",\n \"系统快穿::natural_304\",\n \"玄幻灵异::natural_305\",\n \"天作之合::natural_306\",\n \"升级逆袭::natural_300\"\n ],\n \"完结\": [\n \"仙侠修真::natural_315\",\n \"布衣生活::natural_314\",\n \"武侠传奇::natural_324\",\n \"西幻异世 ::natural_318\",\n \"穿越时空::natural_320\",\n \"重生::natural_319\",\n \"古代幻想::natural_316\",\n \"系统快穿::natural_321\",\n \"玄幻灵异::natural_322\",\n \"天作之合::natural_323\",\n \"升级逆袭::natural_317\"\n ],\n \"榜单\": [\n \"频道金榜::natural_311\",\n \"运气淘文::40000008\",\n \"勤奋更新::natural_1489\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=108&ranktype=deep\",\n \"育苗实验::90001000_108\",\n \"VIP新文::natural_291\",\n \"新晋作者::natural_292\",\n \"月度排行::natural_293\",\n \"季度排行::natural_294\",\n \"半年排行::natural_295\"\n ]\n },\n \"百合\": {\n \"连载\": [\n \"幻想未来::natural_336\",\n \"架空历史::natural_334\",\n \"都市情缘::natural_337\",\n \"穿越时空::natural_335\",\n \"天赐良缘::natural_338\",\n \"时尚娱乐::natural_339\",\n \"奇幻异闻::natural_333\",\n \"系统快穿::natural_342\",\n \"宫廷侯爵::natural_340\",\n \"业界精英::natural_341\",\n \"情有独钟::natural_343\"\n ],\n \"完结\": [\n \"幻想未来::natural_353\",\n \"架空历史::natural_351\",\n \"都市情缘::natural_354\",\n \"穿越时空::natural_352\",\n \"天赐良缘::natural_355\",\n \"时尚娱乐::natural_356\",\n \"奇幻异闻::natural_350\",\n \"系统快穿::natural_359\",\n \"宫廷侯爵::natural_357\",\n \"业界精英::natural_358\",\n \"情有独钟::natural_360\"\n ],\n \"榜单\": [\n \"频道金榜::natural_1072\",\n \"运气淘文::40000009\",\n \"勤奋更新::natural_1490\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=9&ranktype=deep\",\n \"育苗实验::90001000_9\",\n \"VIP新文::natural_1069\",\n \"新晋作者::natural_1045\",\n \"月度排行::natural_1043\",\n \"季度排行::natural_1042\",\n \"半年排行::natural_1044\"\n ]\n },\n \"无CP\": {\n \"连载\": [\n \"未来幻想-女主::natural_477\",\n \"都市成长-男主::natural_478\",\n \"都市成长-女主::natural_479\",\n \"古代架空-男主::natural_480\",\n \"古代架空-女主::natural_481\",\n \"无限快穿-男主::natural_482\",\n \"无限快穿-女主::natural_483\"\n ],\n \"完结\": [\n \"未来幻想-女主::natural_490\",\n \"都市成长-男主::natural_491\",\n \"都市成长-女主::natural_492\",\n \"古代架空-男主::natural_493\",\n \"古代架空-女主::natural_494\",\n \"无限快穿-男主::natural_495\",\n \"无限快穿-女主::natural_496\"\n ],\n \"榜单\": [\n \"频道金榜::natural_487\",\n \"运气淘文::40000014\",\n \"勤奋更新::natural_1494\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=114&ranktype=deep\",\n \"育苗实验::90001000_114\",\n \"VIP新文::natural_471\",\n \"新晋作者::natural_472\",\n \"月度排行::natural_473\",\n \"季度排行::natural_474\",\n \"半年排行::natural_475\"\n ]\n },\n \"衍生无CP\": {\n \"连载\": [\n \"幻想轻小说::natural_549\",\n \"东方衍生::natural_550\",\n \"西方衍生::natural_555\",\n \"二次元热血::natural_552\",\n \"二次元幻想::natural_553\",\n \"二次元异能::natural_554\",\n \"女主向::natural_551\"\n ],\n \"完结\": [\n \"幻想轻小说::natural_562\",\n \"东方衍生::natural_563\",\n \"西方衍生::natural_568\",\n \"二次元热血::natural_565\",\n \"二次元幻想::natural_566\",\n \"二次元异能::natural_567\",\n \"女主向::natural_564\"\n ],\n \"榜单\": [\n \"频道金榜::natural_559\",\n \"运气淘文::40000015\",\n \"勤奋更新::natural_1496\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=120&ranktype=deep\",\n \"育苗实验::90001000_120\",\n \"VIP新文::natural_543\",\n \"新晋作者::natural_544\",\n \"月度排行::natural_545\",\n \"季度排行::natural_546\",\n \"半年排行::natural_547\"\n ]\n },\n \"衍生纯爱\": {\n \"连载\": [\n \"西方罗曼::natural_373\",\n \"都市轻小说::natural_376\",\n \"幻想轻小说::natural_377\",\n \"二次元热血::natural_378\",\n \"二次元幻想::natural_379\",\n \"二次元异能::natural_369\",\n \"其他衍生::natural_372\"\n ],\n \"完结\": [\n \"西方罗曼::natural_390\",\n \"都市轻小说::natural_393\",\n \"幻想轻小说::natural_394\",\n \"二次元热血::natural_395\",\n \"二次元幻想::natural_396\",\n \"二次元异能::natural_386\",\n \"其他衍生::natural_389\"\n ],\n \"榜单\": [\n \"频道金榜::natural_383\",\n \"运气淘文::40000010\",\n \"勤奋更新::natural_1491\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=110&ranktype=deep\",\n \"育苗实验::90001000_110\",\n \"VIP新文::natural_363\",\n \"新晋作者::natural_364\",\n \"月度排行::natural_365\",\n \"季度排行::natural_366\",\n \"半年排行::natural_367\"\n ]\n },\n \"衍生言情\": {\n \"连载\": [\n \"历史传奇::natural_450\",\n \"西方罗曼::natural_449\",\n \"无限快穿::natural_451\",\n \"江湖恩怨::natural_453\",\n \"娱乐竞技::natural_454\",\n \"东方幻想::natural_452\",\n \"其他::natural_455\"\n ],\n \"完结\": [\n \"历史传奇::natural_463\",\n \"西方罗曼::natural_462\",\n \"无限快穿::natural_464\",\n \"江湖恩怨::natural_466\",\n \"娱乐竞技::natural_467\",\n \"东方幻想::natural_465\",\n \"其他::natural_468\"\n ],\n \"榜单\": [\n \"频道金榜::natural_459\",\n \"运气淘文::40000012\",\n \"勤奋更新::natural_1493\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=112&ranktype=deep\",\n \"育苗实验::90001000_112\",\n \"VIP新文::natural_443\",\n \"新晋作者::natural_444\",\n \"月度排行::natural_445\",\n \"季度排行::natural_446\",\n \"半年排行::natural_447\"\n ]\n },\n \"二次元言情\": {\n \"连载\": [\n \"多重身份::natural_415\",\n \"经营基建::natural_418\",\n \"竞技社团::natural_422\",\n \"东方古风::natural_412\",\n \"西幻魔幻::natural_413\",\n \"乙女游戏::natural_414\",\n \"异能超能::natural_417\",\n \"转生::natural_420\",\n \"异闻怪谈::natural_421\",\n \"浪漫情缘::natural_419\",\n \"新奇幻想::natural_423\"\n ],\n \"完结\": [\n \"多重身份::natural_432\",\n \"经营基建::natural_435\",\n \"竞技社团::natural_439\",\n \"东方古风::natural_429\",\n \"西幻魔幻::natural_430\",\n \"乙女游戏::natural_431\",\n \"异能超能::natural_434\",\n \"转生::natural_437\",\n \"异闻怪谈::natural_438\",\n \"浪漫情缘::natural_436\",\n \"新奇幻想::natural_440\"\n ],\n \"榜单\": [\n \"频道金榜::natural_427\",\n \"运气淘文::40000011\",\n \"勤奋更新::natural_1492\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=111&ranktype=deep\",\n \"育苗实验::90001000_111\",\n \"VIP新文::natural_407\",\n \"新晋作者::natural_408\",\n \"月度排行::natural_409\",\n \"季度排行::natural_410\",\n \"半年排行::natural_411\"\n ]\n },\n \"多元\": {\n \"连载\": [],\n \"完结\": [],\n \"榜单\": [\n \"频道金榜::natural_1010\",\n \"月度排行::natural_1012\",\n \"VIP新文::natural_1011\",\n \"育苗实验::90001000_121\",\n \"新晋作者::natural_1013\",\n \"季度排行::natural_1014\",\n \"半年排行::natural_1518\"\n ]\n },\n \"男主无CP\": {\n \"连载\": [\n \"都市成长::natural_478\",\n \"古代架空::natural_480\",\n \"无限快穿::natural_482\"\n ],\n \"完结\": [\n \"都市成长::natural_491\",\n \"古代架空::natural_493\",\n \"无限快穿::natural_495\"\n ],\n \"榜单\": [\n \"频道金榜::natural_992\",\n \"勤奋更新::natural_1515\",\n \"VIP新文::natural_986\",\n \"新晋作者::natural_987\",\n \"月度排行::natural_988\",\n \"季度排行::natural_989\",\n \"半年排行::natural_990\"\n ]\n },\n \"女主无CP\": {\n \"连载\": [\n \"都市成长::natural_479\",\n \"古代架空::natural_481\",\n \"无限快穿::natural_483\"\n ],\n \"完结\": [\n \"都市成长::natural_492\",\n \"古代架空::natural_494\",\n \"无限快穿::natural_496\"\n ],\n \"榜单\": [\n \"频道金榜::natural_1000\",\n \"勤奋更新::natural_1516\",\n \"VIP新文::natural_994\",\n \"新晋作者::natural_995\",\n \"月度排行::natural_996\",\n \"季度排行::natural_997\",\n \"半年排行::natural_998\"\n ]\n },\n \"未来幻纯\": {\n \"连载\": [\n \"娱乐竞技::natural_1112\",\n \"快穿::natural_1113\",\n \"无限流::natural_1114\",\n \"系统::natural_1115\",\n \"末世狂想::natural_1116\",\n \"幻想甜宠::natural_1117\",\n \"星际日常::natural_1118\",\n \"奇幻异想::natural_1119\",\n \"边缘幻想::natural_1120\",\n \"未来畅想::natural_1121\",\n \"升级爽文::natural_1122\"\n ],\n \"完结\": [\n \"娱乐竞技::natural_1128\",\n \"快穿::natural_1129\",\n \"无限流::natural_1130\",\n \"系统::natural_1131\",\n \"末世狂想::natural_1132\",\n \"幻想甜宠::natural_1133\",\n \"星际日常::natural_1134\",\n \"奇幻异想::natural_1135\",\n \"边缘幻想::natural_1136\",\n \"未来畅想::natural_1137\",\n \"升级爽文::natural_1138\"\n ],\n \"榜单\": [\n \"频道金榜::natural_1104\",\n \"运气淘文::wlhxca\",\n \"勤奋更新::natural_1497\",\n \"深耕排行::https:\/\/app-cdn.jjwxc.com\/newBookStoreAndroid\/getRankMoreData?channel=126&ranktype=deep\",\n \"育苗实验::90001000_126\",\n \"VIP新文::natural_1102\",\n \"新晋作者::natural_1105\",\n \"月度排行::natural_1099\",\n \"季度排行::natural_1100\",\n \"半年排行::natural_1106\"\n ]\n }\n}\n\n\/\/ 标签数据\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\"];\n\n\/\/ 解析分类数据\nfunction parseCategory(data) {\n const [title, url, num = defaultNumPerRow] = data.split(separator);\n \n const fullUrl = \/^\\d+|natural\/.test(url) \n ? `http:\/\/app-cdn.jjwxc.net\/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`\n : url;\n \n return [title, fullUrl, num];\n}\n\n\/\/ 解析标签数据\nfunction parseTag(data, tagCategory) {\n const [title, url, num = defaultNumPerRow, tagType] = data.split(separator);a();\n \n let fullUrl = url;\n if (tagType === \"bq\") {\n fullUrl = `https:\/\/android.jjwxc.com\/search\/getSearchForKeyWords?versionCode=313&offset={{(page-1)*20}}&limit=20&bq=${url}&removetags=0&fw=0&yc=0&xx=${tagCategory}&sd=0&lx=0&fg=0&mainview=0&fbsj=0&collectionTypes=ors&isfinish=0&sortType=0&token=${token}`;l();\n } else if (tagType === \"at\") {\n \tfullUrl = `https:\/\/app-cdn.jjwxc.com\/androidapi\/authorColumn?authorid=${url}`;\n \t\n \t}else if (tagType === \"class\") {\n \tfullUrl = `https:\/\/android.jjwxc.net\/androidapi\/incrementFavorite,{'method':'POST','body':\\\"versionCode=313&token=${token}&order=0&classId=${url}&backupTime=${Date.now()}\\\"}`\n \t\n \t}else if (tagType === \"lx\") {\n fullUrl = `https:\/\/android.jjwxc.com\/search\/getSearchForKeyWords?versionCode=313&offset={{(page-1)*20}}&limit=20&bq=0&removetags=0&fw=0&yc=0&xx=${tagCategory}&sd=0&lx=${url}&fg=0&mainview=0&fbsj=0&collectionTypes=ors&isfinish=0&sortType=0&token=${token}`;\n }\n return [title, fullUrl, num];\n}\n\n\/\/ 创建 FlexBox 对象\nfunction createFlexBox(title, url, num) {\n const flexBasisMap = { 1: 1, 2: 0.4, 3: 0.25, 4: 0.2, 5: 0.15, 7: 0.1, 10: 0.05 };\n return {\n title,\n url: url || '',\n style: {\n layout_flexGrow: 1,\n layout_flexBasisPercent: flexBasisMap[num]\n }\n };\n}\n\n\/\/ 生成分类结果\nconst result = [];\nresult.push(createFlexBox(`📂 我的收藏`, \"https:\/\/android.jjwxc.net\/androidapi\/incrementFavorite,{\\\"method\\\":\\\"POST\\\",\\\"body\\\":\\\"versionCode=313&token={{Map('token')}}&order=0&classId=&backupTime={{Date.now()}}\\\"}\", 1));\n\nif(ShelfNum){\nconst ShelfNumList = String(ShelfNum).split(\",\");\nShelfNumList.forEach(x => {\n const parsedTag = parseTag(ShelfList[x]);\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\n});\n}\n\n\nauthorNames.forEach(tag => {\n const parsedTag = parseTag(tag, tagCategory);\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\n});\n\nall.forEach(item => {\n const parsedItem = parseCategory(item);\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\n});\n\nconst enabledCategoryList = enabledCategories.split(\",\");\nenabledCategoryList.forEach(categoryIndex => {\n const categoryName = categories[categoryIndex];\n if (categoryData[categoryName]) {\n result.push(createFlexBox(`${分类标识} ${categoryName}连载`, null, 1));\n categoryData[categoryName].连载.forEach(item => {\n const parsedItem = parseCategory(item);\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\n });\n result.push(createFlexBox(`${分类标识} ${categoryName}完结`, null, 1));\n categoryData[categoryName].完结.forEach(item => {\n const parsedItem = parseCategory(item);\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\n });\n result.push(createFlexBox(`${榜单标识} ${categoryName}榜单`, null, 1));\n categoryData[categoryName].榜单.forEach(item => {\n const parsedItem = parseCategory(item);\n result.push(createFlexBox(parsedItem[0], parsedItem[1], parsedItem[2]));\n });\n }\n});\n\nresult.push(createFlexBox(`${标签标识} ${tagName}标签`, null, 1));\ntags.forEach(tag => {\n const parsedTag = parseTag(tag, tagCategory);\n result.push(createFlexBox(parsedTag[0], parsedTag[1], parsedTag[2],parsedTag[3]));\n});\n\nJSON.stringify(result)\n<\/js>", "header": "{\n\t\"versiontype\":\"reading\"\n\t}", "jsLib": "var head = `<head><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><title>评 论<\/title><style>body{font-family:'PingFang SC','Microsoft YaHei',sans-serif;background-color:#f8f9fa;color:#333;line-height:1.6;padding:20px;max-width:800px;margin:0 auto}.chinese-paragraph{text-indent:1.7em;margin-bottom:1em;text-align:justify}.comments-container{display:flex;flex-direction:column;gap:20px}.comment-card{background-color:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.1);padding:20px;position:relative}.comment-header{display:flex;align-items:center;margin-bottom:12px}.comment-author{font-weight:bold;font-size:16px;color:#1a73e8}.comment-mark{background-color:#fbbc04;color:white;font-size:12px;padding:2px 6px;border-radius:4px;margin-left:8px}.comment-date{font-size:12px;color:#70757a;margin-left:auto}.comment-body{font-size:15px;margin-bottom:15px;white-space:pre-wrap;word-break:break-word}.comment-stats{display:flex;gap:15px;font-size:13px;color:#70757a;margin-bottom:15px}.comment-stat{display:flex;align-items:center;gap:4px}.replies-container{border-left:3px solid#e0e0e0;padding-left:15px;margin-top:15px}.reply-card{background-color:#f5f5f5;border-radius:6px;padding:12px;margin-bottom:10px}.reply-header{display:flex;align-items:center;margin-bottom:8px}.reply-author{font-weight:bold;font-size:14px;color:#1a73e8}.reply-floor{background-color:#e0e0e0;color:#70757a;font-size:11px;padding:1px 4px;border-radius:3px;margin-left:8px}.reply-date{font-size:11px;color:#70757a;margin-left:auto}.reply-body{font-size:14px;white-space:pre-wrap;word-break:break-word}.like-btn,.dislike-btn{background:none;border:none;cursor:pointer;display:flex;align-items:center;gap:4px;color:#70757a;font-size:13px}.like-btn:hover,.dislike-btn:hover{color:#1a73e8}<\/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\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}\n\tlet getU = function(u,_) {\n const { source,java } = _||this;\n let re = new RegExp(u);\n if(!re.test(String(java.md5Encode(String(source.loginUrl))))){throw new Error();\t}};\n \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\nfunction formatChineseText(text,that) {\n const {java} =that || this;\n text = text.replace(\/<br>| | {3,}\/g,'\\n\\n');\n return text.split(\/\\n\\s*\\n\/).map(para => {let content = para.replace(\/\\n\/g, '<br>');return `<p class=\"chinese-paragraph\">${content}<\/p>`;}).join('');\n}\nlet e = function(i){getU(\"3a7c533\",i||this);}\nfunction getHtml(url,_,totalnum){const{java}=_||this;let h=JSON.parse(java.ajax(url)),commentT=h?.data?.commentTotal??\"0\",msg=h?.message,commentList=h?.data?.commentList??[],longCommentHtml=\"\";for(let i in commentList){let comment=commentList[i],repliesHtml=\"\";for(let j in comment.replyAll){let reply=comment.replyAll[j];repliesHtml+=`<div class=\"reply-card\"><div class=\"reply-header\"><span class=\"reply-author\">${reply.replyAuthor}<\/span><span class=\"reply-floor\">${reply.floor}楼<\/span><span class=\"reply-date\">${reply.replyDate}<\/span><\/div>${l(_||this)}<div class=\"reply-body\">${formatChineseText(reply.replyBody)}<\/div><\/div>`}longCommentHtml+=`<div class=\"comment-card\"><div class=\"comment-header\"><span class=\"comment-author\">${comment.commentAuthor}<\/span>${comment.commentMark?`<span class=\"comment-mark\">打分:${comment.commentMark}分<\/span>`:''}<span class=\"comment-date\">${comment.commentDate}<\/span><\/div><div class=\"comment-body\">${formatChineseText(comment.commentBody)}<\/div><div class=\"comment-stats\"><button class=\"like-btn\"><span>👍<\/span><span>${comment.agreenum??\"\"}<\/span><\/button><button class=\"dislike-btn\"><span>👎<\/span><span>${comment.disagreenum??\"\"}<\/span><\/button><\/div>${comment.replyTotal>0?`<div class=\"replies-container\">${repliesHtml}<\/div>`:''}<\/div>`}longCommentHtml=`<html>${head}<body><h4>共${totalnum||commentT}条评论▪当前页面可查看评论 ${commentList.length}条<br>${msg}<\/h4><div class=\"comments-container\" id=\"commentsContainer\">${longCommentHtml}<\/div><\/body><\/html>`;return encodeURIComponent(longCommentHtml);}\nlet l = function(i){getU(\"3e2b7f13\",i||this);}\nlet a = function(i){getU(\"9408021\",i||this);}\nfunction toReview(nid,cid,r){\n\tconst {java} = this;\n\tlet 长评url = `https:\/\/android.jjwxc.net\/comment\/getLongCommentList`;\n let 长评option = {\n\t \"method\":\"POST\",\n \t\"body\":`versionCode=439&limit=3000&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 长评 = getHtml(长评url,this);\n\tlet 点赞 = getHtml(点赞url,this);\n\tlet 回复 = getHtml(回复url,this);\n\tlet html = `<html>\n<head><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><style>body{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;margin:0;padding:20px;box-sizing:border-box}.button-container{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 0.3s ease;box-shadow:0 2px 5px rgba(0,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,0.15)}.toBrowser{background-color:#4285f4;color:white}.toBookSource{background-color:#34a853;color:white}.checkContent{background-color:#ea4335;color:white}.toBookSourceAll{background-color:#34a853;color:white}.getSource{background-color:#D8C93E;color:white}.longCommentHtml{background-color:#88263E;color:white}<\/style><\/head>\n<body>\n<p>有些内容需要登录才能使用【书源和网页都要登录】<\/p><div class=\"button-container\"><button class=\"toBrowser\"onClick=\"c(0)\"><span>使用【手机】网页查看【本章评论】<\/span><\/button><button class=\"toBrowser\"onClick=\"c(5)\"><span>使用【电脑】网页查看【本章评论】<\/span><\/button><button class=\"longCommentHtml\"onClick=\"c(6)\"><span>查看【本章长评内容】<\/span><\/button><button class=\"longCommentHtml\"onClick=\"c(7)\"><span>查看本章50条评论【按点赞数排序】<\/span><\/button><button class=\"longCommentHtml\"onClick=\"c(8)\"><span>查看本章50条评论【按回复时间排序】<\/span><\/button><button class=\"toBookSource\"onClick=\"c(1)\"><span>使用【书源】查看【本章评论】<\/span><\/button><button class=\"toBookSourceAll\"onClick=\"c(3)\"><span>使用【书源】查看【全文评论】<\/span><\/button><button class=\"getSource\"onClick=\"c(4)\"><span>一键导入【晋江评论】书源<\/span><\/button><button class=\"getSource\"onClick=\"c(9)\"><span>一键导入【晋江段评】字典<\/span><\/button><button class=\"checkContent\"onClick=\"c(2)\"><span>查看当前链接内容<\/span><\/button><\/div>\n <script>\n let sourceurl = \"http:\/\/www.jjwxc.net\/comment.php?novelid=${nid}&chapterid=${cid}&page=1\";\n let murl = sourceurl;\n sourceurl = \"legado:\/\/import\/addToBookshelf?src=\"+encodeURIComponent(sourceurl);\n let sourceurlall = \"http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=${nid}&page=1\";\n sourceurlall = \"legado:\/\/import\/addToBookshelf?src=\"+encodeURIComponent(sourceurlall);\n let browserurl = \"https:\/\/m.jjwxc.net\/review\/${nid}\/${cid}\/\";\n let contenturl = \"https:\/\/app.jjwxc.org\/androidapi\/chapterContent?versionCode=381&${bDe(r,this)}\";\n let geturl =\"legado:\/\/import\/Source?src=\"+encodeURIComponent(\"http:\/\/www.guaner.work\/Source\/shuyuan.asp?time=2025-6-935833\");\n let zidianurl =\"legado:\/\/import\/Source?src=\"+encodeURIComponent(\"http:\/\/www.guaner.work\/Source\/shuyuan.asp?time=2025-6-935400\");${a(this)};\n function c(n){const a={0:()=>window.open(browserurl,\"_blank\"),1:()=>window.open(sourceurl,\"_blank\"),2:()=>window.open(contenturl,\"_blank\"),3:()=>window.open(sourceurlall,\"_blank\"),4:()=>window.open(geturl,\"_blank\"),5:()=>window.open(murl,\"_blank\"),6:()=>document.body.innerHTML=decodeURIComponent(\"${长评}\"),7:()=>document.body.innerHTML=decodeURIComponent(\"${点赞}\"),8:()=>document.body.innerHTML=decodeURIComponent(\"${回复}\"),9:()=>window.open(zidianurl,\"_blank\")};a[n]?.()}\n <\/script>\n<\/body>\n<\/html>\n`;\n\tlet b64 = `data:text\/html;base64,${java.base64Encode(html)}`\n\treturn b64\n}\t\n\t\n\t", "lastUpdateTime": "1749471508659", "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: \"toThank()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\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{\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登录\",\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 }\n \t\t\n]", "loginUrl": "\/\/请不要动这里的任何地方,可能会导致书源不可用\nfunction 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}\n\nfunction toThank(){\n\tjava.startBrowser(\"data:text\/html;base64,PGltZyBzdHlsZT0id2lkdGg6MTAwJSIgc3JjPSJhYm91dDpibGFuayIgb25lcnJvcj0idGhpcy5zcmM9YXRvYignYUhSMGNEb3ZMMmQxWVc1bGNpNTNiM0pyTDJkMVlXNWxjaTV3Ym1jPScpIj4KCg==\",\"感谢你的支持\");\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 ShelfJson = JSON.parse(ShelfJson);\n\t function extractClassInfo(obj, result = [], uniqueSet = new Set()) {\n\t \/\/ 如果当前对象是数组,递归遍历数组中的每个元素\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 \/\/ 检查是否存在 className 和 classId\n\t if (obj.hasOwnProperty('className') && obj.hasOwnProperty('classId')) {\n\t let className = obj.className;\n\t \/\/ 如果 className 为空,设置为“尚未分类”\n\t if (className.trim() === \"\") {\n\t className = \"尚未分类\";\n\t }\n\t \/\/ 构造组合字符串\n\t const combo = `${className}::${obj.classId}`;\n\t \/\/ 如果组合字符串未出现过,添加到结果中\n\t if (!uniqueSet.has(combo)) {\n\t uniqueSet.add(combo);\n\t result.push(combo);\n\t }\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\n\tlet ShlefClass = \"请勿删除此书架数据❗️\"+JSON.stringify(extractClassInfo(ShelfJson))+\"❗️\"\n\tsource.setVariable(sourceGet+\"\\n\"+ShlefClass);\n\tjava.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];\n\t\tlet classNameList = JSON.parse(sourceGet);\n\t\tlet className = classNameList.map((x,i)=>i+\"、\"+x.split(\"::\")[0]);\n\t\tlet x = 50;\n\t\tconst xIncrement = 230; \n\t\tconst xMax = 910;\n\t\tlet tspanElements = className.map((item) => {\n\t\t const dy = x === 50 ? \"1.5em\" : \"0\";\n\t\t const tspan = `<tspan x=\"${x}\" dy=\"${dy}\">${item}<\/tspan>`;\n\t\t x += xIncrement;\n\t\t if (x > xMax)x = 50;\n\t\t return tspan;\n\t\t}).join(\"\\n\"); \n\n\t\t svg = `<svg width=\"1190\" height=\"300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t\t <rect width=\"100%\" height=\"100%\" fill=\"#ffffff\"\/>\t\t\n\t\t <text x=\"20\" y=\"60\" font-family=\"Arial, sans-serif\" font-size=\"30\" fill=\"#333\" font-weight=\"bold\">选项(输入你要显示的书架序号,再点“✓”如:0,1,2 是英文逗号)<\/text>\n\t\t <text x=\"50\" y=\"60\" font-family=\"Arial, sans-serif\" font-size=\"30\" fill=\"#555\">\n\t\t ${tspanElements}\n\t\t <\/text>\n\t\t<\/svg>`;\n\t\tsvg=java.base64Encode(svg);\n\t\tsaveTag(String(svg),\"classNum\")\n\t\t\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 <!-- 背景矩形 -->\n\t <rect width=\"100%\" height=\"100%\" fill=\"#f0f0f0\" \/>\t\n\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 <!-- 选项列表 -->\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\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\tif (\/\\d+_[a-z\\d]+\/.test(res.token)) {\n\t\t\t\t\tjava.log(\"获取到的token值: \" + res.token);\n\t\t\t\t\tjava.longToast(\"登录成功\" + res.token);\n\t\t\t\t\tLoginToken(res.token)\n\t\t\t\t}\n\t\t\t\tmsg = \/校验验证码\/.test(res.message) ? \"请请尝试填入上次发给你的验证码(可能是很久之前的)\" : res.message;\n\t\t\t\tmsg = msg??\"已成功登录\"+res.token+\",无需填验证码\";\n\t\t\t java.log(msg);\n\t\t\t java.toast(msg);\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(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\tthrow new Error(\"设置token失败,请检查填写的token值\")\n\t\t}\n\t\n\tlet fl = Map(\"fl\")==\"\"?\"9,10\":Map(\"fl\");\n\tlet bq = Map(\"bq\")==\"\"?\"5\":Map(\"fl\");\t\n\tlet at = source.getLoginInfoMap().get(\"作者列表(作者::作者id 注意添加多个用空格分割)\");\n\tat = String((at==\"\"||at==null)?\"\":at);\n\tlet color = source.getLoginInfoMap().get(\"边框颜色,文字颜色[如#ffffff,#eeeeee]英文逗号,点✓完成设置\");\n\tcolor = String((color == \"\" || color == null) ? \"#B2B2B2,#707070\" : color);\n\t\n\tlet classNum = Map(\"classNum\")\n\tsetHeaders(\n\t\t`token=${token}`,\n\t\t`fl=${fl}`,\n\t\t`bq=${bq}`,\n\t\t`color=${color}`,\n\t\t`classNum=${classNum}`,\n\t\t`at=${java.base64Encode(at)}`\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登录\"];\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);l();\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);\n if(isPay){\n let accesskey = String(response.header(\"accesskey\"));l();\n let keyString = String(response.header(\"keystring\"));\n\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);l();\n}\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);l();\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 \n return content\n}\n\t\n let intro = String(java.get(\"intro1\")).replace(\/\\s\/g, '');\n \n const hasContent = \/\"content\"\/.test(result);\n \n java.setContent(hasContent ? result : decode());\n intro = intro ? `◎${intro}◎<br>` : '';\n let content = String(java.getString(\"$..content\"));\n let saybody = (\/关闭作话\/.test(bbb) || \/关闭作话\/.test(sss))?\"\":java.getString(\"$..sayBody\");\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 : `${java.getString(\"$..message\")}\\n登录后请更新目录,刷新正文`;\n result = intro + vipc + say;\n } else {\n result = intro + content + say;\n }\n} else {\n result = \"\";\n}\n\n\/\/ 评论处理\nif (\/评论\\d+\/.test(bbb) || \/评论\\d+\/.test(sss)) {\n const commentNum = (\/评论(\\d+)\/.exec(bbb) || \/评论(\\d+)\/.exec(sss))[1];\n const commentUrl = baseUrl.replace(\/androidapi\/, 'comment').replace(\/chapterContent\/, 'getCommentList') + `&limit=${commentNum}&offset=0`;\n const comment = JSON.parse(java.ajax(commentUrl));\n const cflag = comment.code === \"200\" || comment.code === undefined;\n let commentb = '';\n if (cflag) {\n const commentList = comment.commentList || comment.data?.commentList || [];\n commentb = commentList.map(b => `@${b.commentAuthor} 🕘${b.commentDate}\\n${b.commentBody}\\n‎\\n`).join('');\n } else {\n commentb = comment.message;\n }\n\n result += `\\nㅤ\\n最新评论:\\n${commentb.replace(\/<br>\/g, '\\n')}`;\n}\n\nresult;\n}catch(e){}\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 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>\n\/\/去除章节简介与正文重复\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\n\t\/\/前4个字相同就删除\n\tnum = 4;\n\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 char of chapterTitle) {\n if (targetParagraph.includes(char)) {\n if (char === ' ' || char === '☪') continue;\n java.log(\"删除当前段落:\"+targetParagraph)\n java.log(\"当前章节名:\"+chapterTitle)\n java.log(\"相同文字:\"+char)\n paragraphs.splice(targetIndex, 1);\n break;\n }\n }\n }\n return paragraphs.join('\\n');\n}\n\nlet bbb = String(book.getVariable(\"custom\"));\nlet sss = String(source.getVariable());\n\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": "@JSon:$..[?(@.novelName)]&&$..[?(@.novelname)]&&$.massage\n<js>\nif (result) {\n function remove(indices, array) {\n indices.sort((a, b) => b - a);\/\/ 按降序排序\n indices.forEach(index => {\n \/\/ java.log(\"❗️删除序号:\" + index);\n \/\/ java.log(array[index].channelName);\n array.splice(index, 1); \/\/ 删除元素\n });\n \n return array;\n }\n\n if (baseUrl === 'https:\/\/app-cdn.jjwxc.net\/bookstore\/getFullPage?channel=bhxs&version=3' || baseUrl.match(\/novelfree\/)) {\n let list = JSON.parse(src);\n \/\/ 将 data_random 中的数据合并到 data 中\n list.forEach(item => {\n if (item.data_random && item.data_random.data_groups && item.data_random.data_groups.length > 0) {\n \/\/ 取 data_random 中的第一组数据\n const randomData = item.data_random.data_groups[0];\n if (item.data) {\n \/\/ 将 randomData 合并到 data 中\n item.data = item.data.concat(randomData);\n } else {\n \/\/ 如果 data 不存在,直接赋值\n item.data = randomData;\n }\n \/\/ 删除 data_random,避免重复处理\n delete item.data_random;\n }\n });\n\n \/\/ 修改 channelName\n list.forEach(item => {\n let { channelName, data: blist } = item;\n if (blist) {\n \t \/\/ 检查 data 数组里是否有 list 数组\r\n const hasList = blist.some(b => b.list);\r\n if (hasList) {\r\n \/\/ 如果有 list 数组,只保留 data 数组的第一个元素\r\n item.data = [blist[0]];\r\n blist = item.data;a();\r\n }\n blist.forEach(b => {\n if (b.list) {\n \t lchannelName = b.channelName\n b.list.forEach(c => c.channelName = b.channelName);\n }\n b.channelName = channelName;\n });\n } else {\n item.channelName = channelName;\n }\n});\n\n \/\/ 根据 URL 删除指定项\n if (!baseUrl.match(\/novelfree\/)) {\n list = remove([0, 6, 11, 12], list);\n } else {\n list = remove([1], list);\n }\n\n result = JSON.stringify(list);\n } else if (baseUrl.match(\/signin|getSearchForKeyWords\/)) {\n result = `{signIn:[${src}]}`;\n } else {\n result = result;\n }\n} else {\n result = \"\";\n}\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": "{{l();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=7&sortMode=DESC`;\nconst authorlist = JSON.parse(java.ajax(authorUrl))?.items;\n\nlet list = authorlist?result.toArray().concat(authorlist):result;\nlet json = [];\nfor(i in list){\n try{\n \t let item = list[i];\n let id = item?.novelid;\n let url = `https:\/\/www.jjwxc.net\/onebook.php?novelid=${id}`;e(); \n let html = String(java.ajax(url));\n java.setContent(html);\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 des = String(J.select(\"span[style='color:#F98C4D']\").text())\n .replace(\/立意:\/, '◎ ')\n .replace(\/一句话简介:\/, '◎ ') + \"◎\" + java.getElement(\"id.novelintro\").text();\n title = J.select('h1').text();a();\n let author = J.select('span[itemprop=\"author\"]').text();l();\n let cover = J.select(\".noveldefaultimage\").attr(\"src\");\n\n if (\/(?:postimg|bmp|alicdn)\\.\/.test(cover)) {\n cover = `https:\/\/i9-static.jjwxc.net\/novelimage.php?novelid=${id}`;a();\n }\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 } catch (e) {\n java.log(\"搜索列表的错误:\"+e);\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;l();\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>\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{\n\tvar tocUrl = bDe(book.tocUrl);\nvar oldToken = getToken(tocUrl);\nvar novelId = getNid(tocUrl);\n\tvar 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=\"+token;\n\t \n let src = java.ajax(tocUrl);\n cache.put(\"tokenSrc\"+novelId, src, 60);\n \n\t let message = JSON.parse(src).message;e();\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=1&page={{page;java.put(\"page\",page)}}&searchType=8&sortMode=DESC", "variableComment": "❗️缓存过的东西都是需要刷新才生效【正文,目录】\n\n1、书籍变量(当前书)\n填写[章节名] —— 变为第xx章 章节名\n\n填写 [去章节序号] —— 去除章节序号 \n\n填写 [目录简介【符号】] —— 章节简介放到目录列表,正文不出现\n符号:跟章节名连接时中间的符号,如 目录简介【 】,中间将为空格\n\n填写[目录简介【删除】]——删除正文章节简介【需要更新目录后刷新正文】\n\n填写[关闭作话]——删除作话\n\n填写[净化] —— 这个是用来删除正文第一段是章节名的,可能会误伤。\n\n填写 [评论+评论数量]——如 评论50 则正文显示50条评论,数量必填\n\n填写 [开启购买\/关闭购买] —— 如 开启购买 则会开启自动购买下五章【确认以后点右上角三点刷新才会生效,使用完毕后最好删除,避免重复请求】\n\n\n2、源变量(所有书)\n同书籍变量\n\n--------------------------------", "weight": 0 }