完本小说网
https://www.finalbooks.work
yezechuandl (3004)07/22 14:13
//2025.7.22 ◎夜泽川◎
{ "bookSourceComment": "\/\/2025.7.22 ◎夜泽川◎", "bookSourceGroup": "网络,自制", "bookSourceName": "完本小说网", "bookSourceType": 0, "bookSourceUrl": "https:\/\/www.finalbooks.work", "bookUrlPattern": "https?:\\\/\\\/www\\.finalbooks\\.work\\\/book\\\/\\d+\\\/?", "customOrder": 2, "enabled": true, "enabledCookieJar": true, "enabledExplore": true, "exploreUrl": "@js:\nvar result = [];\nvar push = (title, url, size) => result.push({\n title: title,\n url: url,\n style: {\n layout_flexGrow: 1,\n layout_flexBasisPercent: size\n }\n});\n\nvar tags = org.jsoup.Jsoup.parse(java.ajax(source.key + \"\/category\/\"))\n .select('.CGsectionTwo-left a')\n .toArray()\n .map(tag => {\n let text = [String(tag.text()).trim(), String(tag.attr('href')).match(\/(\\d+)\/)[1]];\n return String(tag.text()).trim() ? text : null;\n })\n .filter(item => item !== null);\n\n[\n [\"༺ˇ»`ʚ 分类 ɞ´«ˇ༻\", \"\/category\/\"],\n [\"༺ˇ»`ʚ 排行榜 ɞ´«ˇ༻\", null],\n [\"༺ˇ»`ʚ 总榜 ɞ´«ˇ༻\", \"\/rank\/all\/\"],\n [\"༺ˇ»`ʚ 周榜 ɞ´«ˇ༻\", \"\/rank\/\"],\n [\"༺ˇ»`ʚ 月榜 ɞ´«ˇ༻\", \"\/rank\/month\/\"],\n [\"༺ˇ»`ʚ 全本 ɞ´«ˇ༻\", \"\/category\/finish\/\"]\n].forEach(item => {\n push(item[0], null, 1);\n if (item[1]) {\n tags.forEach((tag, index) => {\n let url = item[1] + tag[1] + \"\/{{page}}.html\";\n push(tag[0], url, (index ? 0.2 : 1));\n });\n }\n});\nJSON.stringify(result);", "header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 9) Mobile Safari\/537.36\"}", "jsLib": "function decrypt(encryptedTxt, keySeed) {\n const { java } = this;\n let result;\n try {\n const fullKey = java.md5Encode(keySeed);\n const ivBytes = java.strToBytes(fullKey.substring(0, 16));\n const keyBytes = java.strToBytes(fullKey.substring(16));\n\n const Cipher = java.createSymmetricCrypto(\n \"AES\/CBC\/Pkcs7Padding\",\n keyBytes,\n ivBytes\n );\n\n result = Cipher.decryptStr(java.base64DecodeToByteArray(encryptedTxt));\n } catch (e) {\n java.log(e.message);\n result = \"解密失败\";\n }\n return result;\n}", "lastUpdateTime": "1753164782957", "respondTime": 180000, "ruleBookInfo": { "author": "@get:{a}", "coverUrl": "@get:{i}", "init": "@put:{\"n\":\"[property$=book_name]@content\",\n\"a\":\"[property$=author]@content\",\n\"t\":\"[property~=category|status]@content\",\n\"l\":\"[property$=lastest_chapter_name]@content\",\n\"i\":\"[property$=image]@content\",\n\"o\":\"[property$=description]@content\",\n\"g\":\"[property$=update_time]@content\",\n\"m\":\"[email protected]@a@href\"\n}", "intro": "@get:{o}", "kind": "@get:{t}", "lastChapter": "@get:{l}◎@get:{g}", "name": "@get:{n}", "tocUrl": "@get:{m}" }, "ruleContent": { "content": "@js:\nlet data = src.match(\/d\\(\"([^\\)]+)\/)[1].replace(\/\"|\\s\/g, \"\").trim().split(\",\");\ndecrypt(data[0], data[1]);" }, "ruleExplore": { "author": "a[href^=\"\/writer\/\"]@text", "bookList": "[class$=\"unit\"]", "bookUrl": "a[href^=\"\/book\/\"]@href", "kind": "p.-1@text", "name": "a[href^=\"\/book\/\"][0]@text" }, "ruleSearch": { "author": "a[href^=\"\/writer\/\"]@text", "bookList": ".SHsectionThree-middle > p", "bookUrl": "a[href^=\"\/book\/\"]@href", "kind": "a[href^=\"\/category\/\"]@text", "name": "a[href^=\"\/book\/\"]@text" }, "ruleToc": { "chapterList": "ol > li\n<js>\nlet Regex_ = \/(data-[a-zA-Z0-9]+)\/g;\nlet label = result.select('li')[0].outerHtml().match(Regex_)[1];\nresult.sort((a, b) => +a.attr(label) - +b.attr(label));\nchapterList = result.select('a').toArray().map(e => {\n let labeln = e.outerHtml().match(Regex_);\n return {\n title: String(e.attr(labeln[0])).trim() || e.text(),\n url: java.base64Decode(String(e.attr(labeln[1])))\n }\n});\nJSON.stringify(chapterList);\n<\/js>\n$[*]", "chapterName": "$.title", "chapterUrl": "$.url", "nextTocUrl": "@js:\nvar pages = [];\nvar endPage = String(java.getString('#end@href'));\nvar num = +endPage.match(\/(\\d+)\/g)[1];\nfor (let i = 2; i <= num; i++) {\n pages.push(String(book.tocUrl).replace(\/$\/, i + \".html\"));\n}\npages;" }, "searchUrl": "\/search\/{{key}}\/{{page}}", "weight": 0 }