新书阁
https://www.xinshuge.xyz
chuxs (8615)05/04 18:40
新书阁 xinshuge
{ "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='([^']+)\\.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 }