🎉蓝海搜书
https://www.letsboox.com
x5201314l (7559)3天前
8.16
{ "bookSourceComment": "8.16", "bookSourceName": "🎉蓝海搜书", "bookSourceType": 0, "bookSourceUrl": "https:\/\/www.letsboox.com", "customOrder": 5, "enabled": false, "enabledCookieJar": true, "enabledExplore": false, "exploreUrl": "H文 ::\/s\/H\/{{page}}\/\n父子::\/s\/父子\/{{page}}\/\n兄弟::\/s\/兄弟\/{{page}}\/\n年上::\/s\/年上\/{{page}}\/\n校园::\/s\/校园\/{{page}}\/\n B E ::\/s\/BE\/{{page}}\/\n出轨::\/s\/出轨\/{{page}}\/\n生子::\/s\/生子\/{{page}}\/\n年下::\/s\/年下\/{{page}}\/\n双性::\/s\/双性\/{{page}}\/\nABO::\/s\/ABO\/{{page}}\/\n强强::\/s\/强强\/{{page}}\/\n哥哥::\/s\/哥哥\/{{page}}\/\n反攻::\/s\/反攻\/{{page}}\/\n人兽::\/s\/人兽\/{{page}}\/\n强制::\/s\/强制\/{{page}}\/\n掰弯::\/s\/掰弯\/{{page}}\/\npo18::\/s\/PO18\/{{page}}\/\n NP ::\/s\/np\/{{page}}\/\n言情::\/s\/言情\/{{page}}\/\n耽美::\/s\/耽美\/{{page}}\/\n同人::\/s\/同人\/{{page}}\/\n综合::\/s\/综合\/{{page}}\/\n都市::\/s\/都市\/{{page}}\/\n现言::\/s\/现言\/{{page}}\/\n古言::\/s\/古言\/{{page}}\/\n轻文::\/s\/轻小说\/{{page}}\/\n原创::\/s\/原创小说\/{{page}}\/\n科幻::\/s\/科幻\/{{page}}\/\n仙侠::\/s\/仙侠\/{{page}}\/\n奇幻::\/s\/奇幻\/{{page}}\/\n玄幻::\/s\/玄幻\/{{page}}\/\n衍生::\/s\/同人衍生\/{{page}}\/\n网游::\/s\/网游\/{{page}}\/\n悬疑::\/s\/悬疑\/{{page}}\/\n古代::\/s\/古代\/{{page}}\/\n现代::\/s\/现代\/{{page}}\/\n男性::\/s\/男男\/{{page}}\/\n女性::\/s\/女女\/{{page}}\/\n励志::\/s\/励志\/{{page}}\/\n清水::\/s\/清水\/{{page}}\/\n甜文::\/s\/甜文\/{{page}}\/\n职场::\/s\/职场\/{{page}}\/\n种田::\/s\/种田\/{{page}}\/\n1V1::\/s\/1V1\/{{page}}\/\n腹黑::\/s\/腹黑\/{{page}}\/\n美人::\/s\/美人\/{{page}}\/\n B L ::\/s\/BL\/{{page}}\/\n同性::\/s\/同性\/{{page}}\/\n百合::\/s\/百合\/{{page}}\/\n爽文::\/s\/爽文\/{{page}}\/\n狗血::\/s\/狗血\/{{page}}\/\n文娱::\/s\/娱乐圈\/{{page}}\/\n快穿::\/s\/快穿\/{{page}}\/\n网王::\/s\/网王\/{{page}}\/\n H P::\/s\/HP\/{{page}}\/", "jsLib": "function extractDomain(url) {\n try {\n const urlObj = new URL(url);\n const uParam = urlObj.searchParams.get('u');\n if (uParam) {\n const decodedUrl = decodeURIComponent(uParam);\n const domainMatch1 = decodedUrl.match(\/https?:\\\/\\\/([^\\\/]+)\/);\n if (domainMatch1 && domainMatch1[1]) {\n return domainMatch1[1];\n }\n }\n } catch (e) {\n }\n const domainMatch2 = url.match(\/u=https?(?:%3A%2F%2F|:\\\/\\\/)([^\\\/&]+)\/i);\n if (domainMatch2 && domainMatch2[1]) {\n return decodeURIComponent(domainMatch2[1]);\n }\n const fallbackMatch = url.match(\/u=([^&]+)\/);\n if (fallbackMatch && fallbackMatch[1]) {\n const decoded = decodeURIComponent(fallbackMatch[1]);\n const domainMatch3 = decoded.match(\/https?:\\\/\\\/([^\\\/]+)\/);\n if (domainMatch3 && domainMatch3[1]) {\n return domainMatch3[1];\n } \n const parts = decoded.split('\/');\n if (parts.length > 2) {\n return parts[2];\n }\n }\n return null;\n}\n\nfunction getHost(Url) {\n if (Url.startsWith('http:\/\/')) Url = Url.substring(7);\n if (Url.startsWith('https:\/\/')) Url = Url.substring(8);\n const firstSlashIndex = Url.indexOf('\/');\n if (firstSlashIndex !== -1) {\n return Url.substring(0, firstSlashIndex);\n }\n return Url;\n}", "lastUpdateTime": "1755698974130", "loginUi": "jjj", "loginUrl": "kkk", "respondTime": 180000, "ruleBookInfo": { "author": "@js:\nvar author = book.author;\nauthor", "coverUrl": "class.BGsectionOne-top-left@img@src", "intro": " \n📜简 介:{{@@#intro@text##[《》]*}}{{'\\n'+''}}\n🔎换源信息:\na =>{{@@.BGsectionThree-content@li.0@text##正文 第\\d+节 }}\nb =>{{@@.BGsectionThree-content@li.1@text##正文 第\\d+节 }}\nc =>{{@@.BGsectionThree-content@li.2@text##正文 第\\d+节 }}{{'\\n'+''}}\n当前来源:source\n📄使用说明:由于网站涉及到更换不同的目录链接,所以在阅读中你可以通过在书籍详情页点击右上角修改书籍变量来实现换源!(默认为a)\n!!!!修改之后请刷新!!!!\n\n<js>\nvar variable = book.getVariable(\"custom\");\nif ( variable == \"\" ) {\n var\tmes = \"a\";\n } else {\n \tvar mes = variable;\n \t}\nvar intro = java.t2s(result).replace(\"source\",mes);\nintro\n<\/js>", "kind": "@js:\nvar kind = book.kind;\nkind", "lastChapter": "{{@@class.newestChapter@span@text}}•{{@@class.time@span@text}}", "name": "@js:\nvar name = book.name;\nname", "tocUrl": "class.BGsectionThree-content@all\n@js:\n\/\/换源\nvar doc = org.jsoup.Jsoup.parse(result);\nvar siteList = doc.select(\"li.site\");\nvar result = {};\nvar actionMap = {};\nfor (var i = 0; i < siteList.size(); i++) {\n var site = siteList.get(i);\n var aTags = site.select(\"a\");\n if (aTags.size() >= 2) {\n var secondHref = aTags.get(1).attr(\"href\");\n var secondText = java.t2s(aTags.get(1).text());\n var key = String.fromCharCode(97 + i);\n \n result[key] = secondHref;\n actionMap[key] = secondText;\n }\n}\nvar sourceKey = book.getVariable(\"custom\");\nvar isVariableSet = ( sourceKey == \"\" || sourceKey == null );\nif (isVariableSet) {\n sourceKey = 'a';\n java.longToast(\"当前未选择目录地址,请通过修改书籍变量来选择(默认为a)\");\n} else {\n if (!result.hasOwnProperty(sourceKey)) {\n java.longToast(\"错误:当前变量值 \" + sourceKey + \" 无效,已回退到默认值a\");\n sourceKey = 'a';\n } else {\n java.longToast(\"更换成功,当前目录地址为:\" + actionMap[sourceKey]);\n }\n}\n\n\/\/过渡到完整的目录地址\nvar tocUrl = source.getKey() + result[sourceKey];\nvar content = java.ajax(tocUrl)\nvar html = org.jsoup.Jsoup.parse(content);\nvar toc = html.selectFirst(\"a[title$=章节目录]\").attr(\"href\");\nvar url = tocUrl;\nvar Url = extractDomain(url);\nif ( Url == null ) {\n\tjava.toast(\"目录解析失败!已记录错误日志\");\n\tvar mes = book.originName + \"可以尝试向作者反馈问题!\";\n\tjava.log(mes);\t\n try {\n \tvar link = java.encodeURI(url);\n \t} catch {\n \t\tjava.log(\"失败\");\n \t\t}\n\t}\nvar host = getHost(Url);\nvar link = 'https:\/\/' + host + toc;\nlink" }, "ruleContent": { "content": "@js:\nfunction d(a, b) {\n b = java.md5Encode(b);\n var d = b.substring(0, 16);\n var e = b.substring(16);\n data = java.base64DecodeToByteArray(a);\n iv = java.strToBytes(d);\n key = java.strToBytes(e);\n return java\n .createSymmetricCrypto(\"AES\/CBC\/PKCS7Padding\", key, iv)\n .decryptStr(data);\n}\nlet decryptFunc = (a, b) => d(a, b);\nlet host = String(java.toURL(baseUrl).host);\n\nswitch (host) {\n case \"www.ziyungong.com\":\n content = eval(result.match(\/(decryptFunc\\(\"[\\s\\S]+?\"\\))\/)[1]);\n break;\n default:\n content = eval(result.match(\/(d\\(\"[\\s\\S]+?\"\\))\/)[1]);\n}", "replaceRegex": "##[\\<\\!\\-go\\>]*" }, "ruleExplore": {}, "ruleSearch": { "author": "span.1@text\n@js:\nvar author = java.t2s(result);\nauthor", "bookList": "class.SHsectionThree-middle@p", "bookUrl": "span.0@a@href", "checkKeyWord": "系统", "kind": "span.2@text##\/\\[+|\\]*\/\n@js:\nvar kind = java.t2s(result);\nkind", "name": "span.0@text##[《》]*\n@js:\nvar name = java.t2s(result);\nname" }, "ruleToc": { "chapterList": "@js:\nfunction isBase64(t){return\"string\"==typeof t&&0!==t.length&&\/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$\/.test(t)}\nfunction parse(html, ys, num) {\n let a = org.jsoup.Jsoup.parse(html);\n let b = Array.from(a.selectFirst(ys).attributes());\n return b[num - 1]?.toString().match(\/\"(.+)\"\/)?.[1];\n}\n(() => {\n let od, sd;\n x = Array.from(java.getElements(\"class.BCsectionTwo-top-chapter\"));\n\n od = src.match(\/originalOrder = (\\[.+?\\])\/);\n sd = x.map((c) => {\n return parse(c, \"li\", 3);\n });\n if (od || sd) {\n if (od) {\n od = JSON.parse(od[1]).reduce((arr, item) => {\n arr.push(item + 1);\n return arr;\n }, []);\n x = x.map((item) => ({\n title:\n item.select(\"a\").attr(\"data-real\") != \"\"\n ? item.select(\"a\").attr(\"data-real\")\n : item.select(\"a\").text(),\n href: item.select(\"a\").attr(\"href\")\n }));\n } else if (sd) {\n x = x.map((item) => {\n _3 = parse(item, \"li>a\", 3);\n _4 = parse(item, \"li>a\", 4);\n title = isBase64(_3) === true ? _4 : _3;\n href = isBase64(_3) === true ? _3 : _4;\n return {\n title: title,\n href: java.base64Decode(href)\n };\n });\n }\n sot = od || sd;\n return x.sort((a, b) => {\n ia = x.indexOf(a);\n ib = x.indexOf(b);\n return sot[ia] - sot[ib];\n });\n }\n\n return x.map((item) => ({\n title: item.select(\"a\").text(),\n href: item.select(\"a\").attr(\"href\")\n }));\n})();", "chapterName": "title", "chapterUrl": "href", "nextTocUrl": "@js:\nvar doc = org.jsoup.Jsoup.parse(result);\nvar html = doc.select(\"p.CGsectionTwo-right-bottom-btn\")\n\/\/java.log(html)\n\nvar next = doc.select(\"a#next\").first();;\nif (next) {\n var nextUrl = next.attr(\"href\");\n var nextText = next.text();\n }\n\/\/java.log(nextUrl)\nif ( nextText == \"下一页\" && nextText != \"上一页\" || nextText != \"上一页\" ) {\n\tnextUrl\n\t}" }, "searchUrl": "https:\/\/www.everjump.cc\/s\/{{key}}\/{{page}}\/", "weight": 0 }