🏷晋江文学

https://m.jjwxc.net/channel/

guaner001125 (317)6天前

❗️更新了上一版书源的,请更新这一版,上一版书源搜索出现大问题了❗️


当前书源测试阅读版本为3.25.030422

二维码导入
{
    "bookSourceComment": "每隔八小时访问一遍签到(搜索的时候访问)\n\n点击“登录”自定义发现\n更改过发现要刷新本书源才会生效\n\n\n❗️注意事项:\n1、请不要退出晋江app的账号,只要点了退出,或者在其他地方登录了,都要重新抓token。\n\n2、更新token,书籍就要更新目录。\n\n3、登录步骤:\n①填写好账号密码,点击“邮箱验证码”或者“手机验证码”\n②填写好验证码,点击“邮箱登录”或者“手机登录”\n③点击右上角的“✓”,弹出提示“成功”\n④想要确认是否成功可以在登录UI里点右上角三点,查看登录头token里是否有值。\n\n4、如果邮箱和手机号无法登录,可能是需要过滑动验证码,可尝试先在晋江app里登录一遍后,再在阅读里登录,还是不行就只能抓包token,填写在“抓包token登录”处。",
    "bookSourceGroup": "①🔰  正版,②🌸  常用",
    "bookSourceName": "🏷晋江文学",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/m.jjwxc.net\/channel\/",
    "bookUrlPattern": "http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo\\?novelId=\\d+",
    "customOrder": 0,
    "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\/\/ 一行个数\nconst defaultNumPerRow = 4;\n\/\/ 分隔符\nconst separator = '::';\n\n\n\/\/标识符\n分类标识 =\"🌸\"\n榜单标识=\"📖\"\n标签标识=\"🏷\"\n\n\/\/ 添加作者格式:作者名::作者id\nlet authorNames = decodeURIComponent(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(source.getLoginHeaderMap().get('token'));String(java.createSymmetricCrypto('DES\/CBC\/PKCS5Padding', String('KW8Dvm2N'), String('1ae2c94b')).encryptBase64(enbody))}}\\\"}\",\n  \"今日限免::https:\/\/app-cdn.jjwxc.net\/bookstore\/getFullPage?channel=novelfree\",\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:\/\/app.jjwxc.org\/app.jjwxc\/android\/reading\/TopOneHundred\/getRankData?versionCode=389&type=bh,{'headers':{'versionCode': '389'}}::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);\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}`;\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=1&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={{source.getLoginHeaderMap().get('token')}}&order=1&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\nJSON.stringify(result);\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\n\n<\/js>",
    "header": "<js>\nlet date=\"Mobile \"+Date.now();\nresult = JSON.stringify({\n\t\"User-Agent\": String(date),\n\t\"versiontype\":\"reading\"\n\t})\n<\/js>",
    "jsLib": "function encode(data){\n\tconst { java } = this;\n  return\tjava.createSymmetricCrypto(\"DES\/CBC\/PKCS5Padding\", String(\"KW8Dvm2N\"), String(\"1ae2c94b\")).encryptBase64(data)\n\t}\n\t\nfunction Map(e) { \n\t  const { source } = this;\n    let infomap = source.getLoginHeaderMap();\n    let map = (infomap !== null && infomap.get(e)) ? infomap.get(e) : '';\n    return String(map);\n}\n\n\t\nfunction setHead(k,v){\n\tconst { source } = this;\n  let  infomap = source.getLoginHeaderMap();\n  let map = (infomap !== null && infomap !== \"\")?infomap:{};\n  map[k] = v;\n  source.putLoginHeader(JSON.stringify(map))\n\t}",
    "lastUpdateTime": "1741912899320",
    "loginCheckJs": "",
    "loginUi": "[\n{\n    \t  name:\"获取书架数据\",\n    \t  type: \"button\",\n       action: \"getShelf()\"\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{\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('email')\"\n    },\n    {\n        name: \"①获取手机验证码\",\n        type: \"button\",\n        action: \"getCode('phone')\"\n    },\n    {\n        name: \"②手机登录\",\n        type: \"button\",\n        action: \"getCode('phone')\"\n    },\n\t\t{\n    \t\tname:\"作者列表(作者::作者id 注意添加多个用空格分割)\",\n    \t\ttype:\"text\"\n    \t\t}\n]",
    "loginUrl": "<js>\n\n\/\/请不要改书源的任何地方,请点击“登录”后再填写\n\n\/\/保存标签等序号\nfunction saveTag(svg,tagType){\n\tlet Code = String(java.getVerificationCode('data:image\/svg+xml;base64,'+svg));\n    if(\/(\\d,*)*\/.test(Code)){\n\t    Map = source.getLoginHeaderMap();\n\t    Map == (Map == null||Map==\"\")?{}:Map\n\t    Map[tagType]=Code;\n\t    source.putLoginHeader(JSON.stringify(Map))\n\t    java.toast(\"已保存数据\")\n\t}\n}\n\nfunction rd() {\n    let n = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n    let s = \"\";\n    for (let i = 0; i < 20; i++) {\n        let r = Math.floor(Math.random() * 10);\n        s += n[r];\n    }\n    return s;\n}\n\n\/\/获取书架数据\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\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\t \n\t\t\/\/ 初始 x 值\n\t\tlet x = 50;\n\t\t\/\/ x 的增量\n\t\tconst xIncrement = 230; \/\/ 250 - 20 = 230\n\t\t\/\/ x 的最大值\n\t\tconst xMax = 910;\n\t\t\/\/ 生成 <tspan> 元素的字符串\n\t\tlet tspanElements = className.map((item) => {\n\t\t    \/\/ 如果 x 为 20,dy 为 \"1.5em\",否则为 \"0\"\n\t\t    const dy = x === 50 ? \"1.5em\" : \"0\";\n\t\t    \/\/ 构造 <tspan> 元素\n\t\t    const tspan = `<tspan x=\"${x}\" dy=\"${dy}\">${item}<\/tspan>`;\n\t\t    \/\/ 更新 x 的值\n\t\t    x += xIncrement;\n\t\t    \/\/ 如果 x 超过最大值,重置为 20\n\t\t    if (x > xMax) {\n\t\t        x = 50;\n\t\t    }\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  <!-- 背景矩形 -->\n\t\t  <rect width=\"100%\" height=\"100%\" fill=\"#ffffff\"\/>\n\t\t\n\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\n\t\t  <!-- 选项列表 -->\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\" \/>\n\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>\n\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\" \/>\n\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>\n\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\n\nfunction getloginUrl(){\n\tlet 账号 = result.get(\"账号\");\n\tlet 密码 = result.get(\"密码\");\n\tlet en = encode(密码);\n\tlet id = rd()+\":\"+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\t\n\t\tif(!\/^\\d{4,}\/.test(验证码)){\n\t\t\tlet res = \tJSON.parse(java.ajax(getloginUrl()));\n\t\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\t}\n\t\t\t\t\tmsg = JSON.parse(java.ajax(url+\",\"+JSON.stringify(option))).data.message;\n\t\t\t\t\tjava.toast(msg);\n\t\t\t}else{\n\t\t\t\t\tjava.toast(res.message)\n\t\t\t\t}\n\t\t}else{\n\t\t\tlet lurl = getloginUrl()+\"&checktype=\"+t+\"&checkdevicecode=\"+验证码;\n\t\t\tlet token = JSON.parse(java.ajax(lurl)).token;\n\t\t\tjava.longToast(\"获取到:\"+token+\"\\n\"+\"请点右上角的✓\");\n\t\t\tjava.log(\"token值:\"+token)\n\t\t\tsource.putLoginHeader(token)\n\t\t}\n\t}catch(e){\n\t\tjava.log(e)\n\t}\n}\n\nfunction getToast(){\n\tjava.toast(\"用来看的,别点了,确认请点右上角的✓\")\n\t};\n\t\nfunction login(){\n\tlet token;\n\tMap = source.getLoginInfoMap()??{};\n\tLoginMap = source.getLoginHeaderMap()??{}\n\ttoken = source.getLoginHeader();\n\tlet t = source.getLoginInfoMap()[\"抓包token登录\"];\n\tif(t!=\"\"&&t!=null)token = t;\n\tif(\/\\{\/.test(token))token = LoginMap[\"token\"]??\"\";\n\t\n\tlet fl = LoginMap[\"fl\"]??\"\";\n\tfl = (fl==\"\"||fl==null)?\"9,10\":fl;\n\t\n\tlet bq = LoginMap[\"bq\"]??\"\";\n\tbq = (bq==\"\"||bq==null)?\"5\":bq;\n\t\n\tlet at = Map.get(\"作者列表(作者::作者id 注意添加多个用空格分割)\");\n\tat = (at==\"\"||at==null)?\"\":at;\n\tclassCode = LoginMap[\"classNum\"]??\"\";\n\t\n\t option = {\n\t \t\"token\":String(token),\n\t \t\"fl\":String(fl),\n\t \t\"bq\":String(bq),\n\t \t\"at\":encodeURIComponent(String(at)),\n\t \t\"classNum\":classCode\n\t \t}\n\tsource.putLoginHeader(JSON.stringify(option))\n}\n\n<\/js>",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "$.authorName",
        "canReName": "1",
        "coverUrl": "{{$.novelCover}}\n<js>\n\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\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>",
        "init": "",
        "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🏆{{$.ranking}}    🍼{{$.nutrition_novel}}    📝{{$.comment_count}}    🔖{{$.novelStyle}}\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{last=JSON.parse(java.ajax('http:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId='+baseUrl.match(\/(\\d+)\/)[1])).chapterlist;\n$=last[last.length-1];\nvip=$.isvip?'🔒':'';\nchapterid=$.chapterid;\nchaptername=$.chaptername;\ndate=$.chapterdate;\nvip+chapterid+'.'+chaptername+'•'+date}\ncatch(err){\nresult=\"请刷新或暂无目录\"\n}\n<\/js>",
        "name": "$.novelName",
        "tocUrl": "@js:\ntoken = Map(\"token\");\nnovelId=baseUrl.match(\/novelId=(\\d+)\/)[1]\nif(\/\\d+_[\\w\\d]{16,}\/.test(token)){\n\turl = \"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1&token=\"+token;\n\t}else{\nurl = \"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1\"\n}",
        "wordCount": ""
    },
    "ruleContent": {
        "content": "<js>\nfunction decode() {\n    let date = \"Mobile \" + Date.now();\n    let response = java.get(baseUrl, {\"User-Agent\": String(date)});\n    let content = String(response.body());\n    let accesskey = String(response.header(\"accesskey\"));\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);\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);\n\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\n    let key = java.md5Encode(v43 + v38).slice(0, 8);\n    let iv = java.md5Encode(v38).slice(0, 8);\n    return java.createSymmetricCrypto(\"DES\/CBC\/PKCS5Padding\", key, iv).decryptStr(dest);\n}\n\nif (\/jjwxc\/.test(baseUrl)) {\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\n    const content = String(java.getString(\"$..content\"));\n    const saybody = java.getString(\"$..sayBody\");\n    const say = \/[\\u4e00-\\u9fa5]\/.test(saybody) \n                      ? `\\n【📢作者有话说】\\n${saybody}` : '';\n\n    if (\/token\/.test(baseUrl)) {\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\/\/ 评论处理\nconst bbb = book.getVariable(\"custom\");\nconst sss = source.getVariable();\nif (\/评论\/.test(bbb) || \/评论\/.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&lrm;\\n`).join('');\n    } else {\n        commentb = comment.message;\n    }\n\n    result += `\\nㅤ\\n最新评论:\\n${commentb.replace(\/&lt;br&gt;\/g, '\\n')}`;\n}\n\nresult;\n<\/js>\n##为营造更好的评论环境,近期网站要求发评须进行实名认证,未实名用户评论暂时仅在对应作者后台及发评用户后台可见.*|获取正文失败[\\s\\S]+|◎\\s+?◎|◎undefined◎",
        "imageStyle": "TEXT",
        "nextContentUrl": "",
        "payAction": "cid = baseUrl.match(\/chapterId=(\\d+)\/)[1];\nnid = baseUrl.match(\/novelId=(\\d+)\/)[1];\ntoken = Map(\"token\");\n\nenbody = String(Date.now())+\":\"+token+\":\"+nid;\nsign = encode(enbody)\n\nbody = \"versionCode=287&novelId=\"+nid+\"&chapters=\"+cid+\"&orderType=15&isautoBuy=0&autosubscribeStatus=0&notUseBackpoint=&sign=\"+sign;\n\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    \n \t\tjava.longToast(mm);\n \t\t\n \t\t}",
        "replaceRegex": "<js>\n\/\/去除章节简介与正文重复\nif(\/^◎\/.test(result) ){\nchapter = result.match(\/◎([\\s\\S]+?)(…)*◎\/)[1].replace(\/\\s\/g,'').replace(\/,\/g,',');\n\nchapter2=result.match(\/◎[\\s\\S]+?◎([\\s\\S]+)\/)[1].replace(\/\\s\/g,'').replace(\/,\/g,',');\n\n\/\/前4个字相同就删除\nnum = 4\nif(chapter.substring(0,num)==chapter2.substring(0,num)){\n\tresult = result.replace(\/◎[\\s\\S]+?◎\/,'')\n\t}else{result}\n}else{result}\n\n\n\/*\n——◎。!?,;:、.?!,;:》 】)”’…~\"')\n如果不是以这些标点符号结尾,里面有一个字符跟章节名相同了就会被删除\n*\/\n\tfunction removeDuplicatedParagraphs(text, chapterTitle) {\n    var paragraphs = text.split('\\n');\n    \n    \/\/ 检查第一段是否包含特定字符 ◎\n    var firstParagraph = paragraphs[0].trim();\n    var containsSpecialChar = firstParagraph.includes('◎');\n    \n    \/\/ 根据是否包含特殊字符决定处理哪一段\n    var targetIndex = containsSpecialChar ? 1 : 0;\n    var targetParagraph = paragraphs[targetIndex].trim();\n    \n    \/\/ 检查目标段落结尾是否有标点符号\n    var lastChar = targetParagraph.charAt(targetParagraph.length - 1);\n    var isPunctuation = \/[——◎。!?,;:、\\.\\?!,;:》 】)”’…~\"'\\)]\/.test(lastChar);\n    \n    if (!isPunctuation) {\n        \/\/ 只要有一个字与章节名相同就删除\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\n    return paragraphs.join('\\n');\n}\nconst bbb = book.getVariable(\"custom\");\nconst sss = source.getVariable();\nif(\/净化\/.test(sss)||\/净化\/.test(bbb))result = removeDuplicatedParagraphs(result, title);\n\nresult.replace(\/<br\\\/>\/g,'\\n')\n<\/js>",
        "sourceRegex": "",
        "webJs": ""
    },
    "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\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;\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": "$.novelIntroShort||$.novelintroshort\n<js>\nfree=\"{{$.freeDate}}\";\nif(free!=\"\"){\nresult=\"限免日期:🗓\"+free+\"\\n\"+result\n}else{\nresult=result\n}\n<\/js>",
        "kind": "@JSon:$.mainview&&$.channelName&&$.tags&&$.novelSizeformat&&$.className##\\s+##,",
        "lastChapter": "第{{$.maxChapterId}}章##第章",
        "name": "$.novelName||$.novelname||$.message",
        "wordCount": "$.novelStep||$.novelstep\n@js:result==2?'已完结':'连载中';\nif(result==\"\")\"\""
    },
    "ruleSearch": {
        "author": "author",
        "bookList": "$.items[:10]\n<js>\nif(!cache.get(\"jjtime\")) {\n    cache.put(\"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}\n\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 = result.toArray().concat(authorlist);\nlet json = [];\n\nfor(i in list){\n    try{\n    \t   let item = list[i];\n        let id = item?.novelid;\n        let url = `http:\/\/www.jjwxc.net\/onebook.php?novelid=${id}`;     \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();\n        let author = J.select('span[itemprop=\"author\"]').text();\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}`;\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 = J.select('span[itemprop=\"updataStatus\"]').text();\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        java.log(title)\njava.log(`http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=${id}`)\n\n        json.push({\n            title,\n            author,\n            cat: `${view},${status},${cat},${genre}`,\n            size,\n            url: `http:\/\/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}\n\njson;\n<\/js>\n",
        "bookUrl": "url",
        "checkKeyWord": "穿进刑侦文",
        "coverUrl": "cover",
        "intro": "des",
        "kind": "cat",
        "lastChapter": "new",
        "name": "title",
        "wordCount": "size"
    },
    "ruleToc": {
        "chapterList": "<js>\nmessage = JSON.parse(src).message;\nnovelId=baseUrl.match(\/novelId=(\\d+)\/)[1];\n\nif(\/token=\\d+_[\\w\\d]{16,}\/.test(baseUrl)&&!\/1058\/.test(message)){\nlet lessData = JSON.parse(src).chapterlist;\n\n有卷名url = \"https:\/\/android.jjwxc.net\/androidapi\/chapterList?novelId=\"+novelId+\"&more=0&whole=1\";\n\nlet moreData = JSON.parse(java.ajax(有卷名url)).chapterlist;\n\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}\nJSON.stringify(moreData)\n}else{\n\tresult = src\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+\"  ☪ \":'';\n\n\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+intro\n\t}else{\n\t\tjava.put(\"intro1\",intro);\n\t\t}\nl=lock?'[此章节已锁]':'';\nresult=num+title+l;\n<\/js>",
        "chapterUrl": "@js:\n$=result;\nchapterid=$.chapterid;\nvip=$.isvip!='0';\ntype=$.chaptertype=='1';\nif( !type){\nif(!vip){\nresult='https:\/\/app.jjwxc.net\/androidapi\/chapterContent?novelId='+baseUrl.match(\/novelId=(\\d+)\/)[1]+'&chapterId='+chapterid\n}else{\n\tMap = source.getLoginHeaderMap();\nMap = Map==null?{}:Map;\n\turl =\"https:\/\/app.jjwxc.org\/androidapi\/chapterContent?novelId=\"+baseUrl.match(\/novelId=(\\d+)\/)[1]+\"&versionCode=381&token=\"+Map[\"token\"]+\"&chapterId=\"+chapterid\n\t}\n}else{ result=\"\"}",
        "formatJs": "",
        "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": "tocUrl = book.tocUrl;\nif(\/token=\\d+_[\\w\\d]{16,}\/.test(tocUrl)){\n   let src = \tjava.ajax(tocUrl);\n\t message = JSON.parse(src).message;\n\t if(\/登入验证失败\/.test(message)){\n\t \t     newToken = Map(\"token\");\t     \n\t \t     oldToken = tocUrl.match(\/token=(\\d+_[\\w\\d]{16,})\/)[1];    \n\t \t     if(newToken == oldToken)setHead(\"token\",\"\");  \t  \t      \n\t       java.longToast(\"登录token已失效,请重新登录\");\n\t       java.refreshTocUrl();\n\t    }\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": "1、书籍变量(当前书)\n填写 [去章节序号] —— 去除章节序号\n填写[章节名]  ——  变为第xx章 章节名\n\n填写 [目录简介【符号】] —— 章节简介放到目录列表,正文不出现 符号:跟章节名连接时中间的符号,如 目录简介【 】,中间将为空格\n\n填写 [评论+评论数量]——如 评论50  则可以显示50条评论,数量必填\n\n填写 [开启购买\/关闭购买]  —— 如 开启购买 则会开启自动购买下五章【确认以后点右上角三点刷新才会生效,使用完毕后最好删除,避免重复请求】\n\n填写[净化] —— 这个是用来删除正文第一段是章节名的,可能会误伤。\n\n2、源变量(所有书)\n同书籍变量",
    "weight": 0
}
广告