Icu
https://ztopaq7zrz.hq555.icu:1678
chuxs (8615)08/24 09:59
2.27搜索问题,去除搜索代码,{"webView": true}
// /so/comic/ 会同时搜索小说和视频(源代码),但是视频获取一直有问题就没写(没搞懂)
// 书籍列表规则漫画优先,部分封面加载不出来(搞不懂)。
// 发现页漫画也会加载小说,本质是和搜索一样。
// 如果网址失效,可自行访问huangqu.top,验证后进入永久域名地址复制url到源url和发现页规则里替换掉。 {
"bookSourceComment": "2.27搜索问题,去除搜索代码,{\"webView\": true}\n\/\/ \/so\/comic\/ 会同时搜索小说和视频(源代码),但是视频获取一直有问题就没写(没搞懂)\n\/\/ 书籍列表规则漫画优先,部分封面加载不出来(搞不懂)。\n\/\/ 发现页漫画也会加载小说,本质是和搜索一样。\n\/\/ 如果网址失效,可自行访问huangqu.top,验证后进入永久域名地址复制url到源url和发现页规则里替换掉。",
"bookSourceGroup": "🔞",
"bookSourceName": "Icu",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/ztopaq7zrz.hq555.icu:1678",
"bookUrlPattern": "https:\/\/ztopaq7zrz.hq555.icu:1678",
"customButton": false,
"customOrder": 59,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "<js>\njava.longToast(\"多刷新两次,如果失败可能网址失效了,可查看源注释重新获取。\");\n(function() {\n try {\n \/\/ 第一步:获取HTML\n var baseUrl = \"https:\/\/ztopaq7zrz.hq555.icu:1678\";\n var html = java.connect(baseUrl + \"\/so\").getBody();\n\n if (html.match(\/easy_slider_html\/) || html.match(\/安全验证\/)) {\n cookie.removeCookie(source.bookSourceUrl);\n\n java.startBrowserAwait(baseUrl, '人机验证');\n html = java.connect(baseUrl + \"\/so\").getBody();\n };\n\n if (!html) return '';\n\n \/\/ 第二步:解析HTML\n var doc = org.jsoup.Jsoup.parse(html);\n\n \/\/ 第三步:获取标题元素\n var titles = doc.select('.layui-tab-item-title');\n \/\/ java.log(\"找到标题数量: \" + titles.size());\n\n if (titles.size() < 4) {\n \/\/ java.log(\"标题数量不足4个\");\n return '';\n }\n\n \/\/ 第四步:初始化结果数组\n var results = [];\n\n \/\/ 获取小说区域\n var fictionTitle = titles.get(1);\n var comicTitle = titles.get(2);\n var endTitle = titles.get(3);\n\n \/\/ java.log(\"小说标题: \" + fictionTitle.text());\n \/\/ java.log(\"漫画标题: \" + comicTitle.text());\n \/\/ java.log(\"结束标题: \" + endTitle.text());\n\n \/\/ 1. 添加\"小说\"大类\n results.push({\n \"title\": \"小说\",\n \"url\": \"\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\n });\n\n \/\/ 提取小说子分类\n \/\/ java.log(\"\\n=== 开始提取小说子分类 ===\");\n var currentElement = fictionTitle.nextElementSibling();\n var fictionCount = 0;\n\n while (currentElement && !currentElement.equals(comicTitle)) {\n if (currentElement.hasClass('layui-tab-item-tagContainer')) {\n \/\/ java.log(\"找到小说tagContainer\");\n\n var links = currentElement.select('a');\n \/\/ java.log(\"小说容器中有\" + links.size() + \"个链接\");\n\n for (var i = 0; i < links.size(); i++) {\n var link = links.get(i);\n\n \/\/ 提取名称\n var span = link.selectFirst('span.layui-tab-item-tagContainer-tag');\n var name = '';\n if (span) {\n name = span.text().trim();\n } else {\n name = link.text().trim();\n }\n\n \/\/ 提取链接(保持原始相对或绝对路径)\n var href = link.attr('href');\n\n if (name && href) {\n \/\/ 仅确保链接包含分页参数,不处理相对链接转换\n if (!href.includes(\"{{page}}\")) {\n href = href + \"\/{{page}}\";\n }\n\n results.push({\n \"title\": name,\n \"url\": href,\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n });\n fictionCount++;\n \/\/ java.log(\"添加小说子分类: \" + name + \" -> \" + href);\n }\n }\n }\n\n currentElement = currentElement.nextElementSibling();\n }\n\n \/\/ java.log(\"小说子分类数量: \" + fictionCount);\n\n \/\/ 2. 添加\"漫画\"大类\n results.push({\n \"title\": \"漫画\",\n \"url\": \"\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\n });\n\n \/\/ 提取漫画子分类\n \/\/ java.log(\"\\n=== 开始提取漫画子分类 ===\");\n currentElement = comicTitle.nextElementSibling();\n var comicCount = 0;\n\n while (currentElement && !currentElement.equals(endTitle)) {\n if (currentElement.hasClass('layui-tab-item-tagContainer')) {\n \/\/ java.log(\"找到漫画tagContainer\");\n\n var links = currentElement.select('a');\n \/\/ java.log(\"漫画容器中有\" + links.size() + \"个链接\");\n\n for (var i = 0; i < links.size(); i++) {\n var link = links.get(i);\n\n \/\/ 提取名称\n var span = link.selectFirst('span.layui-tab-item-tagContainer-tag');\n var name = '';\n if (span) {\n name = span.text().trim();\n } else {\n name = link.text().trim();\n }\n\n \/\/ 提取链接(保持原始相对或绝对路径)\n var href = link.attr('href');\n\n if (name && href) {\n \/\/ 仅确保链接包含分页参数,不处理相对链接转换\n if (!href.includes(\"{{page}}\")) {\n href = href + \"\/{{page}}\";\n }\n\n results.push({\n \"title\": name,\n \"url\": href,\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n });\n comicCount++;\n \/\/ java.log(\"添加漫画子分类: \" + name + \" -> \" + href);\n }\n }\n }\n\n currentElement = currentElement.nextElementSibling();\n }\n\n \/\/ java.log(\"漫画子分类数量: \" + comicCount);\n\n \/\/ 第五步:返回JSON\n \/\/ java.log(\"\\n最终生成的发现地址规则:\");\n \/\/ java.log(JSON.stringify(results, null, 2));\n return JSON.stringify(results);\n } catch (e) {\n return \"\" + e;\n }\n})();\n<\/js>",
"header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/127.0.0.0 Mobile Safari\/537.36\"}",
"lastUpdateTime": "1787536788828",
"loginCheckJs": "var src = result.body();\nif (src.match(\/easy_slider_html\/) || src.match(\/安全验证\/)) {\n cookie.removeCookie(source.bookSourceUrl);\n let url = result.url();\n java.startBrowserAwait(url, \"验证\");\n result = java.connect(url);\n}\nresult;",
"respondTime": 180000,
"ruleBookInfo": {
"coverUrl": "{{book.coverUrl}}",
"init": ".detail-box",
"intro": ".m-desc.xs-show@text",
"kind": "p.1@text",
"lastChapter": "p.-1@text",
"name": "{{book.name}}"
},
"ruleContent": {
"content": ".cartoon@html||id.art-content@html",
"imageStyle": "FULL"
},
"ruleExplore": {},
"ruleSearch": {
"bookList": ".layui-tab-item-novelContainer[-1]@.novel-grid@.novel-grid-item&&.layui-tab-item-novelContainer[-2]@.novel-grid@.novel-grid-item",
"bookUrl": "a@href",
"checkKeyWord": "绿帽",
"coverUrl": "img@data-original||img@src",
"kind": "<js>\nvar href = java.getString(\"a@href\");\nif (href && href.indexOf('\/xs') === 0) {\n result = '小说';\n} else if (href && href.indexOf('\/comic') === 0) {\n result = '漫画';\n} else {\n result = '视频'; \/\/ 写不好\n}\nresult;\n<\/js>",
"name": "p@text"
},
"ruleToc": {
"chapterList": "id.myList@li@a",
"chapterName": "text",
"chapterUrl": "href"
},
"searchUrl": "\/so\/comic\/{{key}}\/{{page}}",
"weight": 0
}