可乐小说
https://www.rrssk.com/
laizhiyu (6509)5天前
可乐小说(rrssk.com搜索 + kelexs.com/nmxswz.com阅读)- 修复版v9.5 【修复内容】 1. 搜索作者:span.book-card__meta-item:first-child@textNodes##作者:## 精确提取 2. 搜索分类:span.book-card__meta-item:nth-of-type(2)@textNodes##分类:## 3. 发现规则:exploreUrl改为kelexs.com绝对路径,CSS选择器适配dList结构 4. 目录规则:双结构兼容,CSS逗号分组选择器 div.chapList ul li a, div.direList.chapter_list ul li a 5. 详情规则:全部使用meta标签(og:novel),两个站都支持 6. bookUrlPattern:同时匹配kelexs.com和nmxswz.com 【说明】 - 搜索通过rrssk.com的webJs签名机制进行,搜索结果为nmxswz.com链接 - 发现功能通过kelexs.com进行 - 两个站点的HTML结构不同,CSS逗号分组选择器自动适配
{
"bookSourceComment": "可乐小说(rrssk.com搜索 + kelexs.com\/nmxswz.com阅读)- 修复版v9.5\n\n【修复内容】\n1. 搜索作者:span.book-card__meta-item:first-child@textNodes##作者:## 精确提取\n2. 搜索分类:span.book-card__meta-item:nth-of-type(2)@textNodes##分类:##\n3. 发现规则:exploreUrl改为kelexs.com绝对路径,CSS选择器适配dList结构\n4. 目录规则:双结构兼容,CSS逗号分组选择器 div.chapList ul li a, div.direList.chapter_list ul li a\n5. 详情规则:全部使用meta标签(og:novel),两个站都支持\n6. bookUrlPattern:同时匹配kelexs.com和nmxswz.com\n\n【说明】\n- 搜索通过rrssk.com的webJs签名机制进行,搜索结果为nmxswz.com链接\n- 发现功能通过kelexs.com进行\n- 两个站点的HTML结构不同,CSS逗号分组选择器自动适配",
"bookSourceGroup": "AI",
"bookSourceName": "可乐小说",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/www.rrssk.com\/",
"bookUrlPattern": "https?:\/\/www\\.kelexs\\.com\/book\/\\w+\\.html|https?:\/\/www\\.nmxswz\\.com\/book\/\\w+\\.html|https?:\/\/www\\.rrssk\\.com\/book\/\\w+\\.html",
"customButton": false,
"customOrder": 56,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "全部小说::https:\/\/www.kelexs.com\/list-0\/\n玄幻小说::https:\/\/www.kelexs.com\/list-4\/\n奇幻小说::https:\/\/www.kelexs.com\/list-5\/\n武侠小说::https:\/\/www.kelexs.com\/list-6\/\n仙侠小说::https:\/\/www.kelexs.com\/list-7\/\n都市小说::https:\/\/www.kelexs.com\/list-8\/\n军事小说::https:\/\/www.kelexs.com\/list-9\/\n历史小说::https:\/\/www.kelexs.com\/list-10\/\n游戏小说::https:\/\/www.kelexs.com\/list-11\/\n体育小说::https:\/\/www.kelexs.com\/list-12\/\n科幻小说::https:\/\/www.kelexs.com\/list-13\/\n诸天无限::https:\/\/www.kelexs.com\/list-14\/\n悬疑小说::https:\/\/www.kelexs.com\/list-15\/\n古代言情::https:\/\/www.kelexs.com\/list-16\/\n仙侠奇缘::https:\/\/www.kelexs.com\/list-17\/\n现代言情::https:\/\/www.kelexs.com\/list-18\/\n浪漫青春::https:\/\/www.kelexs.com\/list-19\/\n玄幻言情::https:\/\/www.kelexs.com\/list-20\/\n悬疑推理::https:\/\/www.kelexs.com\/list-21\/\n科幻空间::https:\/\/www.kelexs.com\/list-22\/\n游戏竞技::https:\/\/www.kelexs.com\/list-23\/\n短篇言情::https:\/\/www.kelexs.com\/list-24\/\n轻小说::https:\/\/www.kelexs.com\/list-42\/\n耽美::https:\/\/www.kelexs.com\/list-40\/\n百合::https:\/\/www.kelexs.com\/list-41\/\n原生幻想::https:\/\/www.kelexs.com\/list-25\/\n恋爱日常::https:\/\/www.kelexs.com\/list-26\/\n衍生同人::https:\/\/www.kelexs.com\/list-27\/\n搞笑吐槽::https:\/\/www.kelexs.com\/list-28\/",
"header": "{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 13; Pixel 7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36\",\"Accept\":\"text\/html,application\/xhtml+xml,application\/xml;q=0.9,*\/*;q=0.8\",\"Accept-Language\":\"zh-CN,zh;q=0.9\"}",
"lastUpdateTime": "1787284123881",
"respondTime": 180891,
"ruleBookInfo": {
"author": "[property$=author]@content",
"coverUrl": "[property=og:image]@content",
"intro": "[property=og:description]@content",
"kind": "[property$=category]@content&&\n[property$=status]@content&&\n[property$=update_time]@content",
"lastChapter": "[property$=latest_chapter_name]@content",
"name": "[property$=book_name]@content",
"tocUrl": "@js:\nbaseUrl.replace(\"\/book\/\", \"\/chapter\/\")"
},
"ruleContent": {
"content": "<js>\nlet html = String(result);\nlet chars = \"内暴强情缝肏插逼操潮喷阴艳裸乳荡穴鸡淫苞奸胸射嫩肉骚性蒂茎陰騷奶屄成人药春迷尿粉肛龟头A精屌口狂蜜处女唇道阳虐虫妇液色颜熟交爽臀爆舔做爱欲吹自慰点gG玉幼援抽Bb水母狗户部要了奴小脚痒酥死我兽揉搓捏扣抠棍棒洞密美少摩腿春乱伦露漏浪开巨根菊巴黑豪好肥送艳被干拔乱理白刺体下面诱感快货比日妈你娘婊子配仙火叫在里子宫给聊照流群屁眼马无码友拳洞片黄偷禁套弄位脱光舒服溜舞丢还糜妻换妓招嫖娼aA毛Hh一夜本热推图书娃男抓浑圆饱满润湿滑丰腴韵尤物横陈存娇喘息麻桃透风腹长粗肿胀人紧夹吸撅起来雪发翘硕大胴双草坐挲跨柔软臂瘫媚秘破\";\nvar replacementChars = chars.split(\"\");\nreplacementChars[43] = \"AV\";\nhtml = html.replace(\/<i class=\"icon icon-uni([0-9a-fA-F]{4})\"><\\\/i>\/g, (_, p1) =>\n String.fromCharCode(parseInt(p1, 16)));\nconst decoded = [];\nfor (let i = 0; i < html.length; i++) {\n let code = html.charCodeAt(i);\n if (code >= 0xE001 && code <= 0xE101) {\n decoded.push(replacementChars[code - 0xE001]);\n } else {\n decoded.push(html.charAt(i));\n }\n}\nhtml = decoded.join('');\nconst doc = org.jsoup.Jsoup.parse(html);\nconst contentDiv = doc.selectFirst('.content');\nlet lines = [];\nif (contentDiv) {\n let ps = contentDiv.select('p');\n for (let i = 0; i < ps.size(); i++) {\n let t = String(ps.get(i).text()).replace(\/\\u00a0\/g, ' ').trim();\n if (t) lines.push(t);\n }\n let startIdx = -1;\n for (let i = 0; i < lines.length; i++) {\n if (\/^第\\d+章|^序章|^楔子|^引子\/.test(lines[i])) {\n startIdx = i;\n break;\n }\n }\n if (startIdx > 0) {\n lines = lines.slice(startIdx);\n } else if (startIdx === -1) {\n lines = lines.filter(l => \n !\/本书由.*?发行|版权所有|侵权必究|^\\s*·\\s*$\/.test(l));\n }\n}\nlines.join('\\n');\n<\/js>",
"nextContentUrl": ".btnW a:contains(下一页)@href",
"title": "h1@text"
},
"ruleExplore": {
"author": "dl.dlS dd a@text",
"bookList": "div.dList ul li",
"bookUrl": "div.txtb div.name a@href",
"coverUrl": "div.picb img@src",
"kind": "dl.dlS:nth-child(2) dd@text",
"name": "div.txtb div.name a@text"
},
"ruleSearch": {
"author": "div.book-card__meta span.book-card__meta-item:first-child@textNodes##作者:##",
"bookList": "div.book-list div.book-card",
"bookUrl": "div.book-card@onclick@js:java.base64Decode(decodeURIComponent(result.match(\/t=([^&']+)\/)[1]))",
"coverUrl": "div.book-card__cover img@src",
"intro": "p.book-card__desc@text",
"kind": "div.book-card__meta span.book-card__meta-item:nth-of-type(2)@textNodes##分类:##",
"name": "h3.book-card__title@text"
},
"ruleToc": {
"chapterList": "@js:\nconst chapters = [];\nif(\/\\\/chapter\\\/\/.test(baseUrl)) {\n let doc = org.jsoup.Jsoup.parse(result);\n let elements = doc.select(\".chapListBody a\");\n elements.forEach(a => {\n let text = a.text().trim();\n let href = a.attr(\"href\");\n chapters.push({text, href})\n })\n} else {\n try {\n let json = JSON.parse(result);\n if (json.data && json.data.length > 0){\n json.data.forEach(ch => {\n chapters.push({\n text: ch.chaptername,\n href: ch.chapterurl\n })\n })\n }\n } catch (e) {\n java.longToast(e.message)\n }\n}\n\nchapters",
"chapterName": "text",
"chapterUrl": "href",
"nextTocUrl": "@js:\n(() => {\nconst nextpageList = java.getStringList(\"@@.dropDown li:not(.cur)@data-p\");\nconst jsUrl = result.match(\/src=\"(\\\/templates\\\/js\\\/[A-Za-z0-9]+\\.js)\"\/)?.[1];\nif(nextpageList.size() == 0 || !jsUrl) return [];\n\nconst host = java.toURL(baseUrl).origin;\nconst cryptHtml = java.ajax(host+jsUrl);\nconst key = cryptHtml.match(\/new AESCrypt\\('([A-Za-z0-9]{32})'\\)\/)?.[1];\nconst iv = cryptHtml.match(\/CryptoJS\\.enc\\.Utf8\\.parse\\('(\\d{16})'\\)\/)?.[1];\nif(!key || !iv) return [];\n\nconst id = baseUrl.match(\/chapter\\\/(.*?)\\.html\/)?.[1];\n\nreturn Array.from(nextpageList, (page) => {\n let postBody = java.createSymmetricCrypto('AES\/CBC\/PKCS5Padding', key, iv).encryptBase64(JSON.stringify({\n id: id,\n page: page\n }));\n return host + '\/index.php?action=loadChapterPage,' + JSON.stringify({\n\t \"method\": \"POST\",\n\t \"body\": \"data=\"+encodeURIComponent(postBody)\n })\n});\n})()"
},
"searchUrl": "@js:(function(){\nvar kw=String(key);\nvar webJs='(function(){'\n+'var kw='+JSON.stringify(kw)+';'\n+'try{'\n+'var t=document.querySelector(\"input[name=_t]\");'\n+'if(!t){return \"<html><body>ERR:NO_TOKEN<\/body><\/html>\";}'\n+'var _t=t.value;'\n+'var sig=window.__signData(kw,_t);'\n+'if(!sig||!sig.s){return \"<html><body>ERR:NO_SIGN<\/body><\/html>\";}'\n+'var x=new XMLHttpRequest();'\n+'x.open(\"POST\",\"\/?action=search\",false);'\n+'x.setRequestHeader(\"Content-Type\",\"application\/x-www-form-urlencoded\");'\n+'x.send(\"_t=\"+encodeURIComponent(_t)+\"&_ts=\"+sig.ts+\"&_s=\"+sig.s+\"&keyword=\"+encodeURIComponent(kw));'\n+'if(x.status!==200){return \"<html><body>ERR:HTTP\"+x.status+\"<\/body><\/html>\";}'\n+'return x.responseText;'\n+'}catch(e){return \"<html><body>ERR:\"+e.message+\"<\/body><\/html>\";}'\n+'})()';\nreturn 'https:\/\/www.rrssk.com\/0005.html,'+JSON.stringify({webView:true,webJs:webJs});\n})()",
"weight": 0
}