同人小说网
https://www.tongrenxsw.com
yezechuandl (3004)6天前
兼容旧版阅读
{
"bookSourceComment": "\/\/2025.1.3 ◎夜泽川◎\n\/\/同站一堆\n\/\/2025.4.5 修复搜索,解密url ◎夜泽川◎\n\/\/2026.2.15 修复搜索,处理替换 ◎夜泽川◎",
"bookSourceGroup": "网络,自制",
"bookSourceName": "同人小说网",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/www.tongrenxsw.com",
"customButton": false,
"customOrder": 704,
"enabled": true,
"enabledCookieJar": true,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js: var result = []\nvar push = (title, url, size) => result.push({\n title: title,\n url: url,\n style: {\n layout_flexGrow: 1,\n layout_flexBasisPercent: size\n }\n})\npush(\"全部分类\",null,1);\nvar tg = java.ajax(source.key);\nvar tag = org.jsoup.Jsoup.parse(tg).select('a[href^=\/list]');\ntag.forEach(fl => {\n nam = fl.text()\n ul = String(fl.attr('href')).replace(\/\\\/$\/,\"-{{page}}\/\");\npush(nam,ul,0.25);\n});\nJSON.stringify(result);",
"header": "{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 9) Mobile Safari\/537.36\"}",
"jsLib": "function openUrl(encryptedBase64, num) {\n\t const { java , source } = this\n var numStr = java.base64Decode(num);\n var userAgent = String(source.header) ? JSON.parse(source.header)[\"User-Agent\"].toLowerCase() : \"mozilla\/5.0 (windows nt 10.0; win64; x64) applewebkit\/537.36 (khtml, like gecko) chrome\/119.0.0.0 safari\/537.36\";\n var keyMd5 = java.md5Encode(userAgent + numStr);\n var key = java.strToBytes(keyMd5);\n var encryptedData = java.base64DecodeToByteArray(encryptedBase64);\n var iv = encryptedData.slice(0,16);\n\t var Data = encryptedData.slice(16);\n var cipher = java.createSymmetricCrypto(\n \"AES\/CBC\/PKCS5Padding\", \n key, \n iv\n );\n return cipher.decryptStr(Data);\n}\n\nfunction encryptText(plainText) {\n\t const { java } = this;\n\t const passphrase = \"zc89s30ipHG2Dw\";\n const key = java.strToBytes(passphrase.padEnd(32, \"\\0\"));\n\n const iv = java.strToBytes(passphrase.padEnd(16, \"\\0\"));\n\n const cipher = java.createSymmetricCrypto(\n \"AES\/CBC\/PKCS7Padding\", \n key, \n iv\n );\n\n return java.encodeURI(cipher.encryptBase64(plainText).toString());\n}\n\n\n\/*\n* 路径 \/templates\/static\/fonteditor\/fonteditor.css\n*\/\nfunction replace(content) {\n const FONT_CHARS = \"内暴强情缝贪插逼操潮喷阴艳裸乳荡穴鸡淫苞奸胸射嫩肉骚性蒂茎陰騷奶屄成人药春迷尿粉肛龟头占精屌口狂蜜处女唇道阳虐虫妇液色颜熟交爽臀爆舔做爱欲吹自慰点gG玉幼援抽Bb水母狗户部要了奴小脚痒酥死我兽揉搓捏扣抠棍棒洞密美少摩腿春乱伦露漏浪开巨根菊巴黑豪好肥送艳被干拔乱理白刺体下面诱感快货比日妈你娘婊子配仙火叫在里子宫给聊照流群屁眼马无码友拳洞片黄偷禁套弄位脱光舒服溜舞丢还糜妻换妓招嫖娼aA毛Hh一夜本热推图书娃男抓浑圆饱满润湿滑丰腴韵尤物横陈存娇喘息麻桃透风腹长粗肿胀人紧夹吸撅起来雪发翘硕大胴双草坐挲跨柔软臂瘫媚秘破\";\n const UNICODE_START = 0xE001;\n const iconRegex = \/<i class=\"icon icon-uni([0-9A-Fa-f]{4})\"><\\\/i>\/g;\n \n return content\n .replace(iconRegex, (_, hex) => String.fromCharCode(parseInt(hex, 16)))\n .replace(\/[\\uE001-\\uE101]\/g, char => {\n const index = char.charCodeAt(0) - UNICODE_START;\n return index === 43 ? \"AV\" : FONT_CHARS[index] || char;\n });\n}",
"lastUpdateTime": "1771143514178",
"respondTime": 180000,
"ruleBookInfo": {
"author": "@get:{a}",
"coverUrl": "@get:{i}",
"init": "@put:{\"n\":\"[property$=book_name]@content\",\n\"a\":\"[property$=author]@content\",\n\"t\":\"[property~=category|status]@content\",\n\"l\":\"[property$=latest_chapter_name]@content\",\n\"i\":\"[property$=image]@content\",\n\"o\":\"[property$=description]@content\",\n\"g\":\"[property$=update_time]@content\",\n\"z\":\"class.li4.-1@text##字数:\",\n\"m\":\"option@value||.dropDown@li@data-p\"\n}",
"intro": "@get:{o}",
"kind": "@get:{t}",
"lastChapter": "@get:{l}◎@get:{g}",
"name": "@get:{n}",
"tocUrl": "@get:{m}\n@js:\nvar id = baseUrl.match(\/book\\\/(.*?)\\.html\/)[1];\njava.put(\"id\",id);\nvar pages = result.split(\"\\n\");\njava.put(\"page\",pages.length);\nresult = baseUrl.match(\/^(.*?\\\/\\\/.*?)\\\/\/)[1] + \"\/index.php?action=loadChapterPage\" + \",\" + JSON.stringify({\n \"body\": `id=${id}&page=1`,\n \"method\": \"POST\"\n});",
"wordCount": "@get:{z}"
},
"ruleContent": {
"content": "#content@html||.content@html\n<js>replace(result)<\/js>",
"nextContentUrl": "text.下一页@href||.btnW [class~=pageDown|btnBlack][-1]@href",
"replaceRegex": "##.*{{source.key}}.*|\\n+.*章节错误,点此举报.*\\n+|\\(https?.*\\\/book\\\/.*\\)|.*首发域名.*|欢迎到可乐小说.*|可乐小说.*最新更新[^\\s]+"
},
"ruleExplore": {
"author": "a[href^=\"\/author\"]@text",
"bookList": ".dList > ul > li",
"bookUrl": "a.0@href",
"coverUrl": "img@src",
"intro": ".intro@text",
"kind": "[class~=cate|date]@text##\\[|\\]",
"lastChapter": "a[href^=\"\/book\"][-2]@text",
"name": ".name a@text"
},
"ruleSearch": {
"author": ".infoM2 a[0]@text",
"bookList": "<js>\nnum = src.match(\/num = \\'([^']+?)\\'\/)[1];\njava.put(\"num\",num);\nsrc;\n<\/js>\n.dList > ul > li",
"bookUrl": "a@onclick\n@js: \nencryptedText = result.match(\/\\'([^']+?)\\'\/)[1];\nnum = java.get(\"num\");\nopenUrl(encryptedText,num);",
"coverUrl": "img@src",
"intro": ".intro@text",
"lastChapter": ".infoM2 a[1]@text",
"name": ".name@text"
},
"ruleToc": {
"chapterList": "$.data",
"chapterName": "$.chaptername",
"chapterUrl": "$.chapterurl",
"nextTocUrl": "@js:\nresult = [];\nid = java.get(\"id\");\npages = java.get(\"page\");\nfor (let i = 2 ; i <= pages ; i++) {\noption = baseUrl.match(\/^(.*?\\\/\\\/.*?)\\\/\/)[1] + \"\/index.php?action=loadChapterPage\" + \",\" + JSON.stringify({\n \"body\": `id=${id}&page=${i}`,\n \"method\": \"POST\"\n});\nresult.push(option);\n}\nresult;"
},
"searchUrl": "@js:\nvar url = java.ajax(source.key).match(\/window\\.location\\.href='([^']+)\/)[1];\njava.log(url);\ncookie.removeCookie(url);\nvar ck = java.get(url,{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 9) Mobile Safari\/537.36\"}).cookies();\nvar result = \"https:\/\/www.rrssk.com\" + \"\/k-{{encryptText(key)}}-{{page}}.html\" + \",\" + JSON.stringify({\n\t\"headers\":{\"Cookie\":cookie.mapToCookie(ck)}\n});\nresult;",
"weight": 0
}