{
"bookSourceComment": "\/\/无名25.05.04,源社区群友解决加密",
"bookSourceGroup": "源社区",
"bookSourceName": "新书阁",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/www.xinshuge.xyz",
"bookUrlPattern": "https:\/\/www.xinshuge.xyz",
"concurrentRate": "",
"customOrder": 1,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; 2312DRAABC) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/132.0.0.0 Mobile Safari\/537.36\"}",
"lastUpdateTime": "1746355238136",
"respondTime": 180000,
"ruleBookInfo": {
"author": "p.0@text",
"coverUrl": "img@src@js:result = \"https:\/\/www.xinshuge.xyz\" + result",
"init": ".detail-box",
"intro": ".desc@text",
"kind": "p[1,2,3]@text##类别:##",
"name": "h1@text",
"tocUrl": ""
},
"ruleContent": {
"content": "<js>\nvar doc = result;\njava.log(\"----\" + baseUrl);\nvar finalContent = \"\"; \ntry {\n var contentText = \"\";\n \n \n if (doc) {\n var contentElement = org.jsoup.Jsoup.parse(doc).select(\".content\");\n if (contentElement) {\n contentText = contentElement.text().trim();\n } else {\n contentText = \"\";\n }\n } else {\n \/\/ throw new Error(\"HTML parsing failed\");\n contentText = \"【无法解析HTML】\"; \n }\n \/\/ 解密\n var decryptedText = \"\";\n var atob = function(val) {\n try {\n return String(java.base64Decode(val, \"ISO-8859-1\"));\n } catch (e) {\n \/\/ java.log(\"Base64 解码失败 for: \" + val + \", Error: \" + e);\n return \"\";\n }\n };\n function _0x5472bc(_0x29b0fa) {\n return _0x29b0fa.slice().reverse();\n }\n function _0x17ef6d(aR) {\n var _0xe4c1a0 = '';\n try {\n for (var _0x15efce = 0; _0x15efce < aR.length; _0x15efce++) {\n _0xe4c1a0 += String.fromCharCode(aR[_0x15efce]);\n }\n return decodeURIComponent(escape(_0xe4c1a0));\n } catch(e) {\n \/\/ java.log(\"字节转字符串或 decodeURIComponent 出错: \" + e);\n return _0xe4c1a0;\n }\n }\n function _0x325420(encodedData, encodedKey) {\n try {\n var keyBytesRaw = atob(encodedKey).split('').map(c => c.charCodeAt(0));\n if (!keyBytesRaw || keyBytesRaw.length === 0) throw new Error(\"解码后的密钥为空\");\n var keyBytesProcessed = _0x5472bc(keyBytesRaw);\n if (!keyBytesProcessed || keyBytesProcessed.length === 0) throw new Error(\"处理后的密钥为空\");\n\n var dataBytesRaw = atob(encodedData).split('').map(c => c.charCodeAt(0));\n if (!dataBytesRaw) throw new Error(\"解码后的数据为空\");\n\n var decryptedBytes = dataBytesRaw.map((byte, index) => byte ^ keyBytesProcessed[index % keyBytesProcessed.length]);\n return _0x17ef6d(decryptedBytes);\n } catch (e) {\n \/\/ java.log(\"解密函数 _0x325420 内部错误: \" + e);\n return \"【解密过程出错】\"; \/\/ 返回错误指示\n }\n }\n var paramRegex = \/await\\s+_0x\\w+\\('(.+?)','(.+?)'\\)\/;\n var ar = result.match(paramRegex);\n if (ar && ar[1] && ar[2]) {\n var encodedDataParam = ar[1];\n var encodedKeyParam = ar[2];\n \/\/ java.log(\"提取到加密参数,准备解密...\");\n \/\/ --- 调用解密函数 ---\n decryptedText = _0x325420(encodedDataParam, encodedKeyParam);\n \/\/ java.log(\"解密后文本长度: \" + decryptedText.length);\n } else {\n java.log(\"未能从 HTML 中用正则匹配到解密所需的参数\");\n decryptedText = \"【未能提取加密参数】\"; \/\/ 设置错误提示\n }\n\n \/\/ --- 拼接结果\n finalContent = contentText + \"\\n\\n\" + decryptedText; \n\n} catch (e) {\n java.log(\"错误: \" + e);\n finalContent = \"【规则执行出错: \" + e + \"】\"; \/\/ 在最终输出中包含错误信息\n}\nresult = finalContent; \n<\/js>",
"imageStyle": "",
"nextContentUrl": "<js>\nvar nextChapterUrl = null; \ntry { \n var doc = result;\n if (!doc) { \n throw new Error(\"HTML 解析失败\"); \n } \n var nextLink = org.jsoup.Jsoup.parse(doc).select(\"a:containsOwn(下─章)\");\n if (nextLink) { \n var onclickValue = nextLink.attr(\"onclick\");\n if (onclickValue) { \n var idRegex = \/location\\.href='http://www.yckceo.com/yuedu/shuyuan/content/id/([^']+)\\.idx'\/;\n var idMatch = onclickValue.match(idRegex);\n if (idMatch && idMatch[1]) {\n var chapterIdPart = idMatch[1]; \n var checkRegex = \/_\\d+$\/; \n if (checkRegex.test(chapterIdPart)) { \n var newFileName = chapterIdPart + \".html\"; \n var lastSlashRegex = \/\\\/[^\/]*$\/;\n if (typeof baseUrl === 'string') { \n nextChapterUrl = baseUrl.replace(lastSlashRegex, \"\/\" + newFileName);\n \n }\n }\n }\n }\n }\n} catch (e) { \n nextChapterUrl = null; \n}\nresult = nextChapterUrl;\n<\/js>",
"replaceRegex": "##抱歉,章节内容加载错误,未能成功加载章节内容或刷新页面。|Sorry, there was an error loading the chapter content. We were unable to successfully load the chapter or refresh the page.|抱歉,章節內容載入錯誤,未能成功載入章節內容或重新整理頁面。|本章节部分内容加载错误,请正常浏览,重新载入或刷新当前网页|www.xinshuge.xyz |本章未完,点击下一章继续阅读|新书阁|www.xinshuge.xyz|https:\/\/www.xinshuge.xyz|第\\w+章.*\\(\\d+\\\/\\d+\\)"
},
"ruleExplore": {},
"ruleSearch": {
"author": ".b1@text",
"bookList": "<js>\nif(result.match(\/Just a\/)){\n\txb=(baseUrl)+\",\"+JSON.stringify({\n\t\t\"headers\":{\n\t\t\t\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 14; 2312DRAABC) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/132.0.0.0 Mobile Safari\/537.36\"\n}})\ncookie.removeCookie(source.bookSourceUrl)\njava.startBrowserAwait(xb,\"验证\")\nresult=java.ajax(xb)\n\t}\n\tresult\n\t<\/js>\n\nclass.txt-pic-list txt-list-row5@li",
"bookUrl": "a@href@js:result+',{webView:“true”}'",
"checkKeyWord": "斗罗",
"intro": ".desc@text",
"kind": ".b2,.b3@text",
"name": "class.h1@text"
},
"ruleToc": {
"chapterList": ".section-list[1]@li",
"chapterName": "text",
"chapterUrl": "a@href@js:result = \"https:\/\/www.xinshuge.xyz\" + result +',{webView:“true”}'",
"nextTocUrl": "text.下─页@href@js:java.log(result)"
},
"searchUrl": "\/search\/{{key}}.html",
"weight": 0
}