番茄小说
https://fanqienovel.com
qazplmning (6967)5天前
【🍅小说】 一定要看源里面的注释!!!!!!
{
"bookSourceComment": "此书源由「一头居」原创提供\n\n由于🍅站点网页端开启了试读机制,所以章节只能看到第10章,之后的需要下载APP或开通SVIP才能浏览(能解决的既可使用,解决不了的我还会出第二个版本)\n\n【反混淆】网页端正文与部分榜单文本使用 PUA 私用区字体加密,此源于 jsLib 内置 362 字映射表(0xE3E8 起)逐字还原,实测整本还原率 100%。",
"bookSourceGroup": "一头居",
"bookSourceName": "番茄小说",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/fanqienovel.com",
"bookUrlPattern": "https?:\/\/fanqienovel\\.com\/page\/\\d+",
"concurrentRate": "500",
"customButton": false,
"customOrder": 0,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "----------------男生全部----------------::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{fqCatOff(page)}}&limit=100&category_id={{fqCatId(page,1)}}&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n西方奇幻::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1141&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n东方仙侠::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1140&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n科幻末世::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=8&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n都市日常::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=261&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n都市修真::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=124&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n都市高武::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1014&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n历史古代::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=273&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n战神赘婿::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=27&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n都市种田::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=263&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n传统玄幻::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=258&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n历史脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=272&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n悬疑脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=539&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n都市脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=262&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n玄幻脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=257&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n悬疑灵异::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=751&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n抗战谍战::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=504&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n游戏体育::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=746&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n动漫衍生::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=718&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n男频衍生::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1016&gender=1&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n----------------女生全部----------------::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{fqCatOff(page)}}&limit=100&category_id={{fqCatId(page,0)}}&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n古风世情::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1139&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n科幻末世::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=8&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n游戏体育::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=746&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n女频衍生::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1015&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n玄幻言情::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=248&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n种田::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=23&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n年代::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=79&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n现言脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=267&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n宫斗宅斗::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=246&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n悬疑脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=539&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n古言脑洞::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=253&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n快穿::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=24&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n青春甜宠::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=749&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n星光璀璨::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=745&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n女频悬疑::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=747&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n职场婚恋::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=750&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n豪门总裁::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=748&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}\n民国言情::https:\/\/fanqienovel.com\/api\/rank\/category\/list?app_id=2503&rank_list_type=3&rankMold=1&offset={{(page-1)*100}}&limit=100&category_id=1017&gender=0&rank_version={{Math.floor(Date.now()\/3600000)*3600}}",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; SM-G975F) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36\", \"Accept\": \"text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\", \"Accept-Language\": \"zh-CN,zh;q=0.9\", \"Referer\": \"https:\/\/fanqienovel.com\/\"}",
"jsLib": "\n\/* ===== 番茄小说 PUA 字体反混淆库 =====\n * 网页端正文\/榜单文本会把常用字替换成 Unicode 私用区码位(U+E3E8~U+E55B),\n * 真实字形由 awesome-font 字体承载。此映射表已由字体逐字还原核对,\n * 覆盖 0xE3E8 起 362 个码位,实测整本还原率 100%。\n *\/\nvar FQM = \"D在主特家军然表场4要只v和?6别还g现儿岁??此象月3出战工相o男直失世F都平文什VO将真T那当?会立些u是十张学气大爱两命全后东性通被1它乐接而感车山公了常以何可话先pi叫轻M士w着变尔快l个说少色里安花远7难师放t报认面道S?克地度I好机U民写把万同水新没书电吃像斯5为y白几日教看但第加候作上拉住有法r事应位利你声身国问马女他Y比父xAHNsX边美对所金活回意到z从j知又内因点Q三定8Rb正或夫向德听更?得告并本q过记L让打f人就者去原满体做经K走如孩cG给使物?最笑部?员等受k行一条果动光门头见往自解成处天能于名其发总母的死手入路进心来h时力多开已许d至由很界n小与Z想代么分生口再妈望次西风种带J?实情才这?E我神格长觉间年眼无不亲关结0友信下却重己老2音字m呢明之前高PB目太e9起稜她也W用方子英每理便四数期中C外样a海们任\";\nvar FQB = 0xE3E8;\n\n\/* 还原 PUA 密文 *\/\nfunction fqD(t) {\n t = String(t == null ? \"\" : t);\n var o = \"\", i, c, k;\n for (i = 0; i < t.length; i++) {\n c = t.charCodeAt(i);\n k = c - FQB;\n if (k >= 0 && k < FQM.length) { o += FQM.charAt(k); } else { o += t.charAt(i); }\n }\n return o;\n}\n\n\/* 安全取值: fqG(o,'a') 等价于 o&&o.a,取不到返回 \"\" *\/\nfunction fqG(o, k) {\n if (o === undefined || o === null) { return \"\"; }\n var v = o[k];\n if (v === undefined || v === null) { return \"\"; }\n return v;\n}\n\n\/* 时间戳(秒) -> yyyy-MM-dd *\/\nfunction fqDate(v) {\n v = Number(v);\n if (!v || isNaN(v)) { return \"\"; }\n var d = new Date(v * 1000);\n var m = d.getMonth() + 1, dd = d.getDate();\n return d.getFullYear() + \"-\" + (m < 10 ? \"0\" + m : m) + \"-\" + (dd < 10 ? \"0\" + dd : dd);\n}\n\n\/* 依次取第一个非空字段 *\/\nfunction fqP(o, ks) {\n var i, v;\n for (i = 0; i < ks.length; i++) {\n v = o[ks[i]];\n if (v !== undefined && v !== null && v !== \"\") { return v; }\n }\n return \"\";\n}\n\n\/* 从页面 HTML 里提取 window.__INITIAL_STATE__ 并解析为对象\n * 该 JSON 含非法字面量 undefined,先替换为 null 再解析\n *\/\nfunction fqS(h) {\n h = String(h == null ? \"\" : h);\n var i = h.indexOf(\"window.__INITIAL_STATE__\");\n if (i < 0) { return null; }\n var j = h.indexOf(\"{\", i);\n if (j < 0) { return null; }\n var d = 0, ins = false, esc = false, q = \"\", k, e = -1, c;\n for (k = j; k < h.length; k++) {\n c = h.charAt(k);\n if (ins) {\n if (esc) { esc = false; }\n else if (c === \"\\\\\") { esc = true; }\n else if (c === q) { ins = false; }\n } else {\n if (c === '\"' || c === \"'\") { ins = true; q = c; }\n else if (c === \"{\") { d++; }\n else if (c === \"}\") { d--; if (d === 0) { e = k; break; } }\n }\n }\n if (e < 0) { return null; }\n var s = h.substring(j, e + 1).replace(\/([:,\\[])\\s*undefined\\s*([,}\\]])\/g, \"$1null$2\");\n try { return JSON.parse(s); } catch (err) { return null; }\n}\n\n\/* 从各种榜单\/搜索响应里取出书籍数组 *\/\nfunction fqL(o) {\n var d = fqG(o, \"data\");\n if (d === \"\") { d = o; }\n var cand = [fqG(d, \"search_book_data_list\"), fqG(d, \"book_list\"),\n fqG(d, \"list\"), fqG(d, \"data\"), fqG(o, \"book_list\")];\n var i;\n for (i = 0; i < cand.length; i++) {\n if (cand[i] !== \"\" && cand[i] !== null && cand[i].length) { return cand[i]; }\n }\n return [];\n}\n\n\/* 归一化一本书 -> 统一 JSON 串 *\/\nfunction fqB(b) {\n return JSON.stringify({\n n: fqD(fqP(b, [\"book_name\", \"bookName\"])),\n a: fqD(fqP(b, [\"author\"])),\n k: fqD(fqP(b, [\"category\"])),\n i: fqD(fqP(b, [\"book_abstract\", \"abstract\"])),\n w: fqP(b, [\"word_count\", \"wordNumber\"]),\n l: fqD(fqP(b, [\"last_chapter_title\", \"lastChapterTitle\", \"title\"])),\n t: fqDate(fqP(b, [\"last_chapter_time\", \"lastChapterUpdateTime\"])),\n c: fqP(b, [\"thumb_url\", \"thumbUri\"]),\n u: \"https:\/\/fanqienovel.com\/page\/\" + fqP(b, [\"book_id\", \"bookId\"])\n });\n}\n\n\/* 列表规则: 同时兼容 JSON 接口与 SSR 页面 *\/\nfunction fqParse(result) {\n var s = String(result == null ? \"\" : result).replace(\/^\\s+\/, \"\");\n var L = null, o;\n if (s.charAt(0) === \"{\") {\n try { o = JSON.parse(s); } catch (e) { o = null; }\n if (o !== null) { L = fqL(o); }\n }\n if (L === null) {\n var st = fqS(s);\n if (st !== null) { L = fqG(fqG(st, \"rank\"), \"book_list\"); if (L === \"\") { L = null; } }\n }\n return L;\n}\n\nfunction fqBookList(result) {\n var L = fqParse(result);\n if (L === null) { return []; }\n var out = [], i;\n for (i = 0; i < L.length; i++) { out.push(fqB(L[i])); }\n return out;\n}\n\n\/* 发现页: 榜单接口偶发返回空列表,自动重试 *\/\nfunction fqExplore(result) {\n var out = fqBookList(result);\n if (out.length > 0) { return out; }\n if (typeof baseUrl === \"undefined\" || baseUrl === null) { return out; }\n var u = String(baseUrl);\n if (u.indexOf(\"fanqienovel.com\/api\/\") < 0) { return out; }\n var i, r;\n for (i = 0; i < 3; i++) {\n r = \"\";\n try { r = String(java.ajax(u)); } catch (e) { r = \"\"; }\n if (r !== \"\") {\n out = fqBookList(r);\n if (out.length > 0) { return out; }\n }\n }\n return out;\n}\n\n\/* ===== 分类榜单分页 =====\n * 榜单接口 limit 上限 100;offset 可继续翻页,单分类实测约 313 本(4 页)。\n * 「频道全部」入口把 页码 映射为 (分类, 偏移):每 4 页对应一个分类。\n *\/\nvar FQ_MALE = [1141, 1140, 8, 261, 124, 1014, 273, 27, 263, 258, 272, 539, 262, 257, 751, 504, 746, 718, 1016];\nvar FQ_FEMALE = [1139, 8, 746, 1015, 248, 23, 79, 267, 246, 539, 253, 24, 749, 745, 747, 750, 748, 1017];\nvar FQ_PAGE_PER_CAT = 4; \/* 每个分类取 4 页 = 400 本上限 *\/\n\nfunction fqCatId(page, gender) {\n var ids = (Number(gender) === 0) ? FQ_FEMALE : FQ_MALE;\n var i = Math.floor((Number(page) - 1) \/ FQ_PAGE_PER_CAT);\n if (!(i >= 0)) { i = 0; }\n if (i >= ids.length) { i = ids.length - 1; }\n return ids[i];\n}\n\nfunction fqCatOff(page) {\n var k = (Number(page) - 1) % FQ_PAGE_PER_CAT;\n if (!(k >= 0)) { k = 0; }\n return k * 100;\n}\n\n\/* 频道一共能翻多少页(仅用于说明,不影响功能) *\/\nfunction fqCatTotalPage(gender) {\n var ids = (Number(gender) === 0) ? FQ_FEMALE : FQ_MALE;\n return ids.length * FQ_PAGE_PER_CAT;\n}\n",
"lastUpdateTime": "1791761996518",
"respondTime": 180000,
"ruleBookInfo": {
"author": "@js:fqD(String(JSON.parse(String(result)).author))",
"canReName": "true",
"coverUrl": "@js:String(JSON.parse(String(result)).thumbUri)",
"init": "@js:(function(){\n var st = fqS(String(result));\n if (st === null) { return \"{}\"; }\n var p = st.page;\n if (p === undefined || p === null) { return \"{}\"; }\n return JSON.stringify(p);\n})()",
"intro": "@js:fqD(String(JSON.parse(String(result)).abstract))",
"kind": "@js:(function(){\n var p = JSON.parse(String(result));\n var out = [];\n try {\n var a = JSON.parse(String(fqG(p, \"categoryV2\")));\n for (var i = 0; i < a.length; i++) { out.push(fqD(String(fqG(a[i], \"Name\")))); }\n } catch (e) {}\n if (out.length === 0) {\n var c = fqD(String(fqG(p, \"category\")));\n if (c !== \"\") { out.push(c); }\n }\n return out.join(\",\");\n})()",
"lastChapter": "@js:fqD(String(JSON.parse(String(result)).lastChapterTitle))",
"name": "@js:fqD(String(JSON.parse(String(result)).bookName))",
"tocUrl": "@js:(function(){\n var m = String(baseUrl).match(\/page\\\/(\\d+)\/);\n if (m === null) { return \"\"; }\n return \"https:\/\/fanqienovel.com\/api\/reader\/directory\/detail?bookId=\" + m[1];\n})()",
"wordCount": "@js:String(JSON.parse(String(result)).wordNumber)"
},
"ruleContent": {
"content": "@js:(function(){\n var st = fqS(String(result));\n var cd = fqG(fqG(st, \"reader\"), \"chapterData\");\n var c = fqD(String(fqG(cd, \"content\")));\n var imgs = [];\n c = c.replace(\/<img[^>]*?(\\{[^{}]*\"web_uri\"[^{}]*\\})[^>]*>\/gi, function (m, js) {\n var o = null;\n try { o = JSON.parse(js); } catch (e) { return \"\"; }\n var uri = fqG(o, \"web_uri\");\n if (uri === \"\") { return \"\"; }\n imgs.push(\"https:\/\/p6-novel.byteimg.com\/\" + uri + \"~tplv-resize:\" +\n fqG(o, \"width\") + \":\" + fqG(o, \"height\") + \".image\");\n return \"\\u0001\" + (imgs.length - 1) + \"\\u0001\";\n });\n c = c.replace(\/<\\\/p>\\s*<p>\/gi, \"\\n\");\n c = c.replace(\/<br\\s*\\\/?>\/gi, \"\\n\");\n c = c.replace(\/<\\\/?p[^>]*>\/gi, \"\\n\");\n c = c.replace(\/<\\\/img>\/gi, \"\");\n c = c.replace(\/<[^>]+>\/g, \"\");\n c = c.replace(\/ \/g, \" \");\n c = c.replace(\/<\/g, \"<\");\n c = c.replace(\/>\/g, \">\");\n c = c.replace(\/"\/g, '\"');\n c = c.replace(\/'\/g, \"'\");\n c = c.replace(\/&\/g, \"&\");\n c = c.replace(\/\\r\/g, \"\");\n c = c.replace(\/[ \\t]+\\n\/g, \"\\n\");\n c = c.replace(\/\\n{3,}\/g, \"\\n\\n\");\n c = c.replace(\/\\u0001(\\d+)\\u0001\/g, function (m, i) {\n return \"\\n<img src=\\\"\" + imgs[Number(i)] + \"\\\">\\n\";\n });\n return c.replace(\/^\\s+|\\s+$\/g, \"\");\n})()",
"imageStyle": "DEFAULT",
"replaceRegex": "##[\\u200b-\\u200f\\ufeff]##",
"title": "@js:fqD(String(fqG(fqG(fqS(String(result)), \"reader\"), \"chapterData\").title))"
},
"ruleExplore": {
"author": "@js:JSON.parse(String(result)).a",
"bookList": "@js:fqExplore(result)",
"bookUrl": "@js:JSON.parse(String(result)).u",
"coverUrl": "@js:JSON.parse(String(result)).c",
"intro": "@js:JSON.parse(String(result)).i",
"kind": "@js:JSON.parse(String(result)).k",
"lastChapter": "@js:JSON.parse(String(result)).l",
"name": "@js:JSON.parse(String(result)).n",
"wordCount": "@js:JSON.parse(String(result)).w"
},
"ruleSearch": {
"author": "@js:JSON.parse(String(result)).a",
"bookList": "@js:fqBookList(result)",
"bookUrl": "@js:JSON.parse(String(result)).u",
"checkKeyWord": "search_book_data_list",
"coverUrl": "@js:JSON.parse(String(result)).c",
"intro": "@js:JSON.parse(String(result)).i",
"kind": "@js:JSON.parse(String(result)).k",
"lastChapter": "@js:JSON.parse(String(result)).l",
"name": "@js:JSON.parse(String(result)).n",
"wordCount": "@js:JSON.parse(String(result)).w"
},
"ruleToc": {
"chapterList": "@js:(function(){\n var d = fqG(JSON.parse(String(result)), \"data\");\n var out = [];\n var cv = fqG(d, \"chapterListWithVolume\");\n var vn = fqG(d, \"volumeNameList\");\n var i, j, g, c, nm;\n if (cv !== \"\" && cv !== null) {\n for (i = 0; i < cv.length; i++) {\n g = cv[i];\n if (g === null || g === undefined) { continue; }\n if (g.length === 0) { continue; }\n if (cv.length > 1) {\n nm = \"\";\n if (vn !== \"\" && vn !== null) { if (vn[i] !== undefined) { nm = String(vn[i]); } }\n out.push(JSON.stringify({n: nm, u: \"\", v: true, t: \"共\" + g.length + \"章\"}));\n }\n for (j = 0; j < g.length; j++) {\n c = g[j];\n out.push(JSON.stringify({\n n: fqD(String(fqG(c, \"title\"))),\n u: \"https:\/\/fanqienovel.com\/reader\/\" + fqG(c, \"itemId\"),\n v: false,\n t: fqG(c, \"firstPassTime\"),\n p: fqG(c, \"needPay\"),\n x: fqG(c, \"isChapterLock\")\n }));\n }\n }\n }\n if (out.length === 0) {\n var ids = fqG(d, \"allItemIds\");\n for (i = 0; i < ids.length; i++) {\n out.push(JSON.stringify({n: \"第\" + (i + 1) + \"章\",\n u: \"https:\/\/fanqienovel.com\/reader\/\" + ids[i], v: false}));\n }\n }\n return out;\n})()",
"chapterName": "@js:JSON.parse(String(result)).n",
"chapterUrl": "@js:JSON.parse(String(result)).u",
"isPay": "@js:(function(){\n var o = JSON.parse(String(result));\n if (o.v === true) { return \"\"; }\n if (Number(o.p) > 0) { return \"true\"; }\n return \"\";\n})()",
"isVip": "@js:(function(){\n var o = JSON.parse(String(result));\n if (o.v === true) { return \"\"; }\n if (o.x === true) { return \"true\"; }\n return \"\";\n})()",
"isVolume": "@js:(function(){\n if (JSON.parse(String(result)).v === true) { return \"true\"; }\n return \"\";\n})()",
"updateTime": "@js:(function(){\n var t = JSON.parse(String(result)).t;\n if (t === undefined || t === null || t === \"\") { return \"\"; }\n if (typeof t === \"string\") { return t; }\n var d = new Date(Number(t) * 1000);\n var m = d.getMonth() + 1, dd = d.getDate();\n return d.getFullYear() + \"-\" + (m < 10 ? \"0\" + m : m) + \"-\" + (dd < 10 ? \"0\" + dd : dd);\n})()"
},
"searchUrl": "https:\/\/fanqienovel.com\/api\/author\/search\/search_book\/v1?filter=127,127,127,127&page_count=10&page_index={{page-1}}&query_word={{encodeURIComponent(key)}},{\"method\":\"POST\",\"body\":\"{}\",\"headers\":{\"Content-Type\":\"application\/json\"}}",
"variableComment": "此源无自定义变量。jsLib 中 FQM 为 PUA 字体映射表(0xE3E8 起 362 字),FQB 为映射起始码位;fqD 还原密文,fqS 解析 __INITIAL_STATE__,fqL\/fqB\/fqBookList 归一化各接口书籍列表,fqExploreAll 处理分类合并入口,FQ_MALE\/FQ_FEMALE 为男女频道分类 ID 表。",
"weight": 0
}