[
  {
    "bookSourceGroup": "测试",
    "bookSourceName": "漫小肆20251217",
    "bookSourceType": 2,
    "bookSourceUrl": "https://www.jjmh.top/",
    "customButton": false,
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"连载\",\"url\":\"/booklist?tag=全部&area=-1&end=0&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.4,\"layout_flexGrow\":1}},\n{\"title\":\"完结\",\"url\":\"/booklist?tag=全部&area=-1&end=1&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.4,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"/booklist?tag=都市&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.4,\"layout_flexGrow\":1}},\n{\"title\":\"出版\",\"url\":\"/booklist?tag=出版漫画&page={{page}}\",\"style\":{\"layout_flexBasisPercent\":0.4,\"layout_flexGrow\":1}}]",
    "header": "",
    "lastUpdateTime": 1770457118485,
    "respondTime": 2917,
    "ruleBookInfo": {
      "author": "class.subtitle.1@text",
      "coverUrl": "class.cover.0@tag.img@src",
      "intro": "class.block.4@text",
      "kind": "class.block.3@text",
      "lastChapter": "class.block.3@text",
      "name": "class.info@tag.h1@text",
      "tocUrl": "",
      "wordCount": "class.block.0@text"
    },
    "ruleContent": {
      "content": "class.comiclist@tag.div@class.comicpage@tag.div@tag.img@html\n\n@js:\nfunction removeDuplicateImgTags(str) { \n// 定义了一个名为 removeDuplicateImgTags 的函数，它接受一个字符串参数 str\n\nvar imgTags = str.split(/\\n|\\r/).filter(Boolean); \n// 将输入的字符串 str 按照换行符 \\n 或回车符 \\r 进行分割，得到一个字符串数组 imgTags\n// 然后使用 filter(Boolean) 方法过滤掉空字符串元素\n\nvar uniqueImgTags = Array.from(new Set(imgTags)); \n// 通过创建一个 Set 数据结构来去除 imgTags 数组中的重复元素，并使用 Array.from 方法将其转换回数组 uniqueImgTags\n\nreturn uniqueImgTags.join('\\n'); \n// 将 uniqueImgTags 数组的元素用换行符 \\n 连接成一个字符串并返回\n\n}\n\njava.log(removeDuplicateImgTags(result));\n// 调用 removeDuplicateImgTags 函数，并将结果传递给 java.log 方法进行输出，这里的 result 是“class.comiclist@tag.div@class.comicpage@tag.div@tag.img@html”字符串变量",
      "title": "",
      "webJs": ""
    },
    "ruleExplore": {
      "coverUrl": "class.mh-item@tag.a@tag.p@style\n@js:\nfunction extractUrl(str) {\n  var regex = /url\\((.*?)\\)/;\n  var match = str.match(regex);\n  return match? match[1] : null;\n}\njava.log(extractUrl(result))"
    },
    "ruleSearch": {
      "author": "",
      "bookList": "class.mh-list col7@li",
      "bookUrl": "tag.a@href",
      "coverUrl": "class.mh-item@tag.a@tag.p@style\n@js:\nfunction extractUrl(str) {\n  var regex = /url\\((.*?)\\)/;\n  var match = str.match(regex);\n  return match? match[1] : null;\n}\njava.log(extractUrl(result))",
      "intro": "",
      "kind": "",
      "lastChapter": "class.chapter@text",
      "name": "class.mh-item@a@text"
    },
    "ruleToc": {
      "chapterList": "class.view-win-list detail-list-select@li",
      "chapterName": "tag.a@text",
      "chapterUrl": "tag.a@href"
    },
    "searchUrl": "https://www.jjmh.top/search?keyword={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "主站：https://www.aiqu999.com（似乎是一个会自动跳转可用链接的链接）\n备用网址：\n  - www.aiqu654.com\n  - www.aqxsw222.com\n  - www.727txt.com\n  - www.27txt.La\n  - www.527txt.com\n网站给出的防迷路网址：www.272txt.com",
    "bookSourceName": "🌈爱去小说",
    "bookSourceType": 3,
    "bookSourceUrl": "https://www.aqxsw555.com/",
    "customButton": false,
    "customOrder": 3,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"最近更新–强推\",\"url\":\"/list-high-0-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":1}},{\"title\":\"耽美小说\",\"url\":\"/list-high-2-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}},{\"title\":\"女生小说\",\"url\":\"/list-high-1-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}},{\"title\":\"男生小说\",\"url\":\"#\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}}]",
    "lastUpdateTime": 1771743847864,
    "respondTime": 16169,
    "ruleBookInfo": {
      "canReName": "1",
      "downloadUrls": "<js>\nif(baseUrl.indexOf('read')>-1){\n\turl = book.origin + '/' +java.getString(\"@@.readcontent@a@href\")\n\thtml = java.ajax(url)\n\tresult = html.match(/var downloadurl = \"([\\s\\S]+?)\";/)[1]\n}else{\n\turl = baseUrl.replace(/.*-(\\d+).*/, \"https://www.527txt.com/txt-xx/softdownfree.asp?softid=$1&ckm=mianfei\")\n\thtml = java.ajax(url)\n\tjava.setContent(html)\n\tresult = java.getString(\"@@text.第一下载地址(首选)@href\")\n}\n</js>",
      "intro": "#mainDownInfo@center.0@html||.readcontent@html"
    },
    "ruleExplore": {
      "author": ".rt@text##作者：(\\w+)##$1###",
      "bookList": ".mainlist_li||.mainSoftName||.read-list",
      "bookUrl": "a.1@href||a@href",
      "intro": ".pk-word-break-all@text",
      "kind": ".pk-text-success@text",
      "name": "a.1@text||a@text||.rt@text##.*《|》.*|完结|\\+番外|强推"
    },
    "ruleSearch": {
      "author": "a.search-card-author@a@text##作者：",
      "bookList": "#searchmain > .search-card",
      "bookUrl": ".search-card-link@a@href",
      "intro": ".search-card-content@text",
      "kind": "{{@@class.search-card-category@tag.a@text}}",
      "lastChapter": ".search-card-date@.oldDate@text",
      "name": ".search-card-title@a@text##《|》"
    },
    "ruleToc": {
      "chapterList": "html",
      "chapterName": "{{'🐑完结'}}"
    },
    "searchUrl": "/search.asp?word={{key}},{\"charset\":\"gb2312\"}",
    "weight": 0
  },
  {
    "bookSourceComment": "//by:圣灵-2026.3.26修复正文\n//by:圣灵-2026.3.21修复目录和目录下一页\n网站拉黑IP → 开关飞行模式换IP\n操作：开飞行模式 → 等5s（或1-2s）→ 关飞行模式\n查IP：设置/我的设备/全部参数与信息/状态信息/IP地址\n机型：红米（亲测有效）\nhttps://www.mm630.com\nhttps://www.aqxsw.com\nhttps://www.nauqmf.com\nhttps://www.ddysc.com\nhttps://www.csgdw.com\nhttps://www.cqgmp.com\nhttps://www.epzwxs.com\nhttps://www.zdzn.net\nhttps://www.shuq.net\nhttps://www.newqy.com\nhttps://www.epzuzu.com\nhttps://www.whqhzg.com\nhttps://www.junjh.com\nhttps://www.hnyhgk.com\nhttps://www.27tw.com\nhttps://www.80gx.com\nhttps://www.syysgj.com\nhttps://www.sshear.com\nhttps://www.dephui.com\nhttps://m.jkhbs.com",
    "bookSourceGroup": "-圣灵",
    "bookSourceName": "笔趣全家桶",
    "bookSourceType": 0,
    "bookSourceUrl": "https://m.zdzn.net",
    "customButton": false,
    "customOrder": 7,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "lastUpdateTime": 1774694741887,
    "respondTime": 3695,
    "ruleBookInfo": {
      "author": "[property=\"og:novel:author\"]@content",
      "coverUrl": "[property=\"og:image\"]@content",
      "intro": "[property=\"og:description\"]@content",
      "kind": "[property=\"og:novel:status\"]@content&&[property=\"og:novel:category\"]@content&&[property=\"og:novel:update_time\"]@content",
      "lastChapter": "[property$=\"chapter_name\"]@content",
      "name": "[property=\"og:novel:book_name\"]@content"
    },
    "ruleContent": {
      "content": "#htmlContent@html||#content@html||#nr1@html"
    },
    "ruleSearch": {
      "author": "$.author",
      "bookList": "<js>result.replace(/<!--gg-->/, \"\")</js>\n$.data.search[*]@js:\nif (result == \"[]\") {\n\t  java.longToast(\"暂无搜索结果，请查看源注释\")\n}\nresult",
      "bookUrl": "$.book_list_url",
      "checkKeyWord": "精灵",
      "coverUrl": "$.cover",
      "intro": "$.intro",
      "kind": "$.status_str&&$.cate_name&&$.uptime",
      "lastChapter": "$.latest_chapter_name",
      "name": "$.book_name"
    },
    "ruleToc": {
      "chapterList": "td.L a||#list dd a||.mulu_list li a||.book dd + dt ~ dd a||.chapter li a",
      "chapterName": "text",
      "chapterUrl": "href",
      "nextTocUrl": "class.middle@tag.select@tag.option@value"
    },
    "searchUrl": "@js:\ncookie.removeCookie(source.getKey());\nurl = source.key+\"/api/search\";\n//解析网页script标签变量\nr = java.ajax(baseUrl);\n\nrr = java.ajax(source.key+\"/user/search.html?q=\"+key)\n\ns = rr.match(/var\\s\\w+\\s*=\\s*\"\\w+\";/g).join('');\neval(s);\nbd = {\n \"body\": `q=${key}&vw=${vw}&abw=${abw}&ru=${ru}&jrt=${jrt}&van=${van}&fw=${fw}&cwl=${cwl}&gpr=${gpr}&uyoo=${uyoo}&tz=${tz}&euu=${euu}&tsn=${tsn}&eju=${eju}&um=${um}&fp=${fp}&dvm=${dvm}&jpk=${jpk}&deblkx=${deblkx}&ht=${ht}&azy=${azy}&sna=${sna}&wqx=${wqx}&fpp=${fpp}&rup=${rup}&jwj=${jwj}&bgt=${bgt}&qp=${qp}&yf=${yf}&cw=${cw}&wq=${wq}&sign=${sign}`,\n \"method\": \"POST\"\n}\n\nurl + \",\" + JSON.stringify(bd);",
    "weight": 0
  },
  {
    "bookSourceComment": "// Error: 发现失效\n\n更新日志请点击登录，更新书源中查看\n本书源不出意外的话基本为最终版本，后续更新都会在云端更新设置中心，不需要再更新书源，当然，不排除域名失效的情况\n兼容正式版阅读app",
    "bookSourceGroup": "发现失效,晴天聚合",
    "bookSourceName": "多平台精品源",
    "bookSourceType": 0,
    "bookSourceUrl": "多平台精品源",
    "bookUrlPattern": "https?:\\/\\/(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z0-9-]+(?::\\d+)?\\/detail.*",
    "customButton": false,
    "customOrder": 9,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "<js>\nfunction setArgument(key, value) {\n    var open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '') || {};\n    open_argument[key] = value;\n    var result = JSON.stringify(open_argument);\n    source.setVariable(result);\n    return result;\n}\n\nvar open_argument = source.getVariable();\nvar base_url = getArguments(open_argument, 'server') || '';\nvar ms = getArguments(open_argument, 'tone_id') || '';\nvar source_type = getArguments(open_argument, 'source_type') || '男频';\nvar tab = getArguments(open_argument, 'tab') || '小说';\nvar sources = getArguments(open_argument, 'sources') || '番茄';\n\n\nvar sdtoken;\ntry {\n    var loginInfoMap = source.getLoginInfoMap ? source.getLoginInfoMap() : {};\n    sdtoken = String(loginInfoMap['手动填写番茄token(可不填)'] || '');\n} catch (e) {\n    sdtoken = '';\n}\n\nvar rawCookie = getFanqieCookie() || sdtoken;\nvar match = rawCookie.match(/sessionid=[^;]+/);\nvar fqcookie = match ? match[0] : '';\nvar fqssionid = '';\nif (!fqcookie) {\n    java.toast('您还未登陆番茄账号，无法同步数据哦！');\n} else {\n    fqssionid = getSessionId(fqcookie)\n}\nvar fqsjurl = base_url + \"/bookshelf?page={{page}}&ssionid=\" + fqssionid;\nvar fqtjurl = base_url + \"/fqrecommend?page={{page}}&ssionid=\" + fqssionid;\nvar fqlsurl = base_url + \"/fqhistory?page={{page}}&ssionid=\" + fqssionid;\n\nvar groupDatas = [];\nvar infoData = [];\n\nfunction deviceType() {\n    try {\n        return !!java.androidId();\n    } catch (e) {\n        return false;\n    }\n}\n\nvar hasValidCookie = fqcookie.length > 0;\n\nif (hasValidCookie) {\n    function groupQuery() {\n        try {\n            var url = base_url + \"/group_name?ssionid=\" + fqssionid;\n            var res = java.ajax(url);\n            var response = JSON.parse(res);\n\n            if (!(response && response.data)) {}\n\n            response.data.forEach(function(group) {\n                var keys = Object.keys(group);\n                if (keys.length > 0) {\n                    var key = keys[0];\n                    var value = group[key];\n                    if (value && value.length) {\n                        var option = {\n                            \"method\": \"POST\",\n                            \"body\": {\n                                \"book_ids\": value,\n                                \"page\": \"{{page}}\"\n                            }\n                        };\n                        groupDatas.push({\n                            title: key,\n                            url: base_url + \"/bookshelf,\" + JSON.stringify(option),\n                            style: {\n                                layout_flexGrow: 1,\n                                layout_flexBasisPercent: 0.45\n                            }\n                        });\n                    }\n                }\n            });\n\n            if (groupDatas.length % 2 !== 0) {\n                groupDatas.push({\n                    title: \"--\",\n                    url: \"\",\n                    style: {\n                        layout_flexGrow: 1,\n                        layout_flexBasisPercent: 0.45\n                    }\n                });\n            }\n        } catch (e) {\n            java.longToast(\"番茄登录过期，已隐藏番茄书架\");\n        }\n    }\n\n    try {\n        java.longToast(\"正在加载分组数据...\");\n        var userUrl = base_url + \"/fquser?ssionid=\" + fqssionid;\n        var userRes = java.ajax(userUrl);\n        var userData = JSON.parse(userRes);\n\n        var userName = (userData && userData.data && userData.data.name) ? userData.data.name : '未知用户';\n        if (!userName.includes('未知用户')) {\n            infoData = [{\n                title: \"番茄个人中心\",\n                url: fqsjurl,\n                style: {\n                    layout_flexGrow: 1,\n                    layout_flexBasisPercent: 0.45\n                }\n            }, {\n                title: \"个性推荐(番茄)\",\n                url: fqtjurl,\n                style: {\n                    layout_flexGrow: 1,\n                    layout_flexBasisPercent: 0.45\n                }\n            }, {\n                title: \"历史阅读(番茄)\",\n                url: fqlsurl,\n                style: {\n                    layout_flexGrow: 1,\n                    layout_flexBasisPercent: 0.45\n                }\n            }];\n        }\n        groupQuery();\n    } catch (e) {\n        java.longToast(\"番茄登录过期，已隐藏番茄书架\");\n    }\n}\n\nvar style_list = [];\ntry {\n    var durl = `${base_url}/discovestyle?source=${sources}&source_type=${source_type}&tab=${tab}`;\n    var res = java.ajax(durl);\n    var result = JSON.parse(res);\n    style_list = result.data || [];\n    if (result.msg) {\n        java.toast(result.msg);\n    }\n} catch (e) {\n    java.toast(\"发现样式获取失败\");\n}\nlet qtcookie = cookie.getCookie(base_url);\nlet qtop = {\n    method: \"GET\",\n    headers: {\n        cookie: qtcookie\n    },\n};\nqtop = JSON.stringify(qtop);\nlet qtsjurl = base_url+'/get_book_shelf,'+qtop\nlet qtsj = [{\n                title: \"晴天个人中心\",\n                url: qtsjurl,\n                style: {\n                    layout_flexGrow: 1,\n                    layout_flexBasisPercent: 0.45\n                }\n            }]\nvar finalData = infoData.concat(groupDatas, style_list);\nfinalData = qtsj.concat(finalData);\nJSON.stringify(finalData);\n</js>",
    "header": "{ \"User-Agent\":\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Mobile Safari/537.36 Edg/138.0.0.0\" }",
    "jsLib": "var host = [\n    'https://v1.gyks.cf',\n    'https://v2.gyks.cf',\n    'https://v3.gyks.cf',\n    'https://v4.gyks.cf',\n    'https://v5.gyks.cf',\n    'https://v6.gyks.cf',\n    'https://v7.gyks.cf',\n    'http://101.35.133.34:8888',\n    'http://103.236.91.147:8888'\n];\n\nfunction getArguments(open_argument, key) {\n    try {\n        open_argument = JSON.parse(open_argument);\n    } catch (e) {\n        open_argument = {\n            tab: \"小说\",\n            tone_id: \"默认音色\",\n            server: host[0],\n            sources: \"全部\",\n            source_type: \"男频\",\n        };\n    }\n    if (key) {\n        return open_argument[key];\n    } else {\n        return open_argument;\n    }\n}\n\nfunction setArguments(key, value) {\n    const {\n        source\n    } = this;\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '');\n    open_argument[key] = value;\n    open_argument = JSON.stringify(open_argument);\n    source.setVariable(open_argument);\n    return open_argument;\n}\n\nfunction decrypt(Text) {\n    return Text;\n}\n\nfunction paraForAndroid(content, sources) {\n    let {\n        java,\n        cache,\n        source\n    } = this;\n    let plcolor = getArguments(source.getVariable(), \"plcolor\");\n    if (!plcolor) {\n        plcolor = \"#000000\";\n    }\n    let tccolor = getArguments(source.getVariable(), \"tccolor\");\n    if (!tccolor) {\n        plcolor = \"none\";\n    }\n\n    const createSvg = this.createSvg.bind(this);\n\n    return content.replace(/<p>(.*?)(?:<comment ident=\"([^\"]*)\" count=\"([^\"]*)\" \\/>)?<\\/p>/g,\n        (match, text, url, count) => {\n            if (url && count) {\n                const click = 0;\n                cache.putMemory(url, click);\n                const encodedUrl = url;\n                return `<p>${text}<img src=\"${createSvg(count, plcolor,tccolor,encodedUrl,sources)}\"></p>`;\n            } else {\n                return `<p>${text}</p>`;\n            }\n        }\n    );\n}\n\n\nfunction showCmt(url, sources) {\n    let {\n        java,\n        cache\n    } = this;\n\n    const currentTime = Date.now();\n    const click = cache.getFromMemory(url);\n    let isqread = false;\n    try {\n        java.qread();\n        isqread = true;\n    } catch (e) {}\n    if (click < 1 && !isqread) {\n        cache.putMemory(url, click + 1);\n        return;\n    } else {\n        try {\n            java.startBrowserDp(url, sources + '段评');\n        } catch (e) {\n            java.startBrowser(url, sources + '段评');\n        }\n    }\n}\n\n\n\nfunction createSvg(number, color, tccolor, encodedUrl, sources) {\n        var displayText = number > 99 ? \"99+\" : number.toString();\n        var loginInfoMap = {};\n\n        if (this.source && typeof this.source.getLoginInfoMap == 'function') {\n            loginInfoMap = this.source.getLoginInfoMap() || {};\n        }\n\n        var bubbleStyle = String(getArguments(this.source.getVariable(), \"pstyle\") || loginInfoMap['段评气泡样式(0-4)'] || '0');\n        var svg;\n        if (bubbleStyle == '0') {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 0 25 17\" fill=\"none\" style=\"color: ${color}; opacity: 1;\">\n                        <path d=\"M24 14.5v-12a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v7.528a2 2 0 0 1-.211.894l-2.065 4.13a1 1 0 0 0 .894 1.448H22a2 2 0 0 0 2-2z\" stroke=\"currentColor\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 1px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></path>\n                        <text x=\"13.5\" y=\"12\" text-anchor=\"middle\" alignment-baseline=\"auto\" font-size=\"10\" fill=\"currentColor\" font-family=\"Arial, sans-serif\" font-weight=\"500\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                    </svg>`;\n        } else if (bubbleStyle == '1') {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 7 153 106\" style=\"color: ${color}; opacity: 1;\">\n                        <path d=\"M 55 10 L 120 10 Q 150 10 150 40 L 150 80 Q 150 110 120 110 L 55 110 Q 25 110 25 80 L 25 75 L 3 60 L 25 45 L 25 40 Q 25 10 55 10 Z\" stroke=\"currentColor\" stroke-width=\"6\" stroke-linejoin=\"round\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 4px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></path>\n                        <text x=\"87\" y=\"86\" alignment-baseline=\"auto\" font-family=\"Arial, sans-serif\" text-anchor=\"middle\" font-size=\"72\" font-weight=\"500\" fill=\"currentColor\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                </svg>`;\n        } else if (bubbleStyle == '2') {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"6 10 88 76\" style=\"color: ${color}; opacity: 1;\">\n                        <path d=\"M12,12 L88,12 Q92,12 92,16 L92,68 Q92,72 88,72 L28,72 L12,84 L12,72 Q8,72 8,68 L8,16 Q8,12 12,12 Z\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linejoin=\"round\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 2.5px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></path>\n                        <text x=\"50\" y=\"60\" font-family=\"Arial, sans-serif\" text-anchor=\"middle\" font-size=\"45\" fill=\"currentColor\" font-weight=\"500\" alignment-baseline=\"auto\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                    </svg>`;\n        } else if (bubbleStyle == '3') {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 0 25 17\" fill=\"none\" style=\"color: ${color}; opacity: 1;\">\n                        <rect x=\"0.5\" y=\"0.5\" width=\"24\" height=\"16\" rx=\"2.5\" ry=\"2.5\" stroke=\"currentColor\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 1px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></rect>\n                        <text x=\"12.5\" y=\"12\" text-anchor=\"middle\" alignment-baseline=\"auto\" font-size=\"10\" fill=\"currentColor\" font-family=\"Arial, sans-serif\" font-weight=\"500\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                    </svg>`;\n        } else if (bubbleStyle == '4') {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 0 25 17\" fill=\"none\" style=\"color:${color}; opacity: 1;\">\n                        <rect x=\"0.5\" y=\"0.5\" width=\"24\" height=\"16\" rx=\"8.5\" ry=\"8.5\" stroke=\"currentColor\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 1px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></rect>\n                        <text x=\"12.5\" y=\"12\" text-anchor=\"middle\" alignment-baseline=\"auto\" font-size=\"10\" fill=\"currentColor\" font-family=\"Arial, sans-serif\" font-weight=\"500\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                    </svg>`;\n        } else if (bubbleStyle == '5') {\n            displayText = number > 99 ? \"99\" : number.toString();\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 0 25 17\" fill=\"none\" style=\"color: ${color}; opacity: 1;\">\n                        <circle cx=\"12.5\" cy=\"8.5\" r=\"8\" stroke=\"currentColor\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 1px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></circle>\n                        <text x=\"13\" y=\"12\" text-anchor=\"middle\" alignment-baseline=\"auto\" font-size=\"10\" fill=\"currentColor\" font-family=\"Arial, sans-serif\" font-weight=\"500\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n                    </svg>`;\n        } else {\n            svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"90\" viewBox=\"0 0 25 17\" fill=\"none\" style=\"color: ${color}; opacity: 1;\">\n                <path d=\"M24 14.5v-12a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v7.528a2 2 0 0 1-.211.894l-2.065 4.13a1 1 0 0 0 .894 1.448H22a2 2 0 0 0 2-2z\" stroke=\"currentColor\" style=\"stroke: ${color}; stroke-opacity: 0.5; stroke-width: 1px; stroke-linejoin: round; fill: ${tccolor}; fill-opacity: 0.5;\"></path>\n                <text x=\"13.5\" y=\"12\" text-anchor=\"middle\" alignment-baseline=\"auto\" font-size=\"10\" fill=\"currentColor\" font-family=\"Arial, sans-serif\" font-weight=\"500\" style=\"fill: ${color}; opacity: 1;\">${displayText}</text>\n            </svg>`;\n        }\n        var encodedSvg = this.java.base64Encode(svg);\n        return 'data:image/svg+xml;base64,' + encodedSvg + ',{\"js\":\"showCmt(\\'' + encodedUrl + '\\', \\'' + sources + '\\')\",\"style\":\"text\"}';\n    }\n\n\nfunction cleanHTML(html) {\n    let result = html\n        .replace(/<header[^>]*>[\\s\\S]*?<\\/header>/gi, \"\")\n        .replace(/<div class=\"tt-title\"[^>]*>[\\s\\S]*?<\\/div>/gi, \"\")\n        .replace(/<(?!\\/?p\\b|\\/?img\\b)[^>]+>/gi, \"\");\n    result = result.replace(/<\\/?p[^>]*>/g, \"\\n\");\n    return result.replace(/\\n+/g, \"\\n\").trim();\n}\n\n\nfunction getBaseUrl(url) {\n    if (!url) {\n        return null;\n    }\n    url = String(url);\n    if (url.match(/https?:\\/\\//i)) {\n        var index = url.indexOf(\"/\", 9);\n        return index == -1 ? url : url.substring(0, index);\n    }\n    return null;\n}\n\nfunction isIPv4Address(ip) {\n    ip = String(ip);\n    let parts = ip.split(\".\");\n    if (parts.length !== 4) return false;\n\n    for (let part of parts) {\n        if (!/^\\d+$/.test(part)) return false; // 必须是数字\n        if (part.length > 1 && part[0] === \"0\") return false; // 禁止前导零\n        let num = parseInt(part, 10);\n        if (num < 0 || num > 255) return false; // 范围检查\n    }\n    return true;\n}\n\nfunction isIPv6Address(ip) {\n    ip = String(ip);\n    // 处理双冒号（最多出现一次）\n    if (ip.includes(\":::\")) return false;\n    let doubleColonCount = (ip.match(/::/g) || []).length;\n    if (doubleColonCount > 1) return false;\n\n    // 分割成组\n    let groups = ip.split(\":\");\n    let validGroupCount = 8;\n    let actualGroupCount = groups.filter((g) => g !== \"\").length;\n\n    // 验证组数\n    if (doubleColonCount === 1) {\n        if (actualGroupCount > validGroupCount - 1) return false;\n    } else {\n        if (groups.length !== validGroupCount) return false;\n    }\n\n    // 验证每组内容\n    for (let group of groups) {\n        if (group === \"\") continue; // 跳过空组（双冒号部分）\n        if (!/^[0-9a-fA-F]{1,4}$/.test(group)) return false; // 1-4位十六进制\n    }\n    return true;\n}\n\nfunction isIPAddress(input) {\n    return isIPv4Address(input) || isIPv6Address(input);\n}\n\nfunction getSessionId(cookieString) {\n    const match = cookieString.match(/sessionid=([^;]+)/);\n    return match ? match[1] : null;\n}\n\nfunction getKey(key) {\n    let parts = key.split(\";\");\n    for (let part of parts) {\n        if (part.includes(\"qttoken\")) {\n            return part.split(\"=\")[1];\n        }\n    }\n    return \"\";\n}\n\nfunction getFanqieCookie() {\n    const {\n        cookie\n    } = this;\n    try {\n        return String(cookie.getCookie('fanqienovel.com') || java.getCookie('fanqienovel.com') || '');\n    } catch (e) {\n        return '';\n    }\n}\n\n\nfunction paraForiOS(html, sources) {\n    return html.replace(\n        /<p>(.*?)(?:<comment ident=\"([^\"]*)\" count=\"([^\"]*)\" \\/>)?<\\/p>/g,\n        function(match, text, url, count) {\n            if (url && count) {\n                const encodedUrl = url.replace(/&/g, '&amp;');\n                return `<span rs-native>${text}<comment count=\"${count}\" onPress=\"java.showReadingBrowser('${encodedUrl}','${sources}段评')\"></span>`;\n            } else {\n                return `<span rs-native>${text}</span>`;\n            }\n        }\n    );\n}",
    "lastUpdateTime": 1768109887096,
    "loginUi": "[{\n        \"name\": \"邮箱\",\n        \"type\": \"text\"\n    }, {\n        \"name\": \"密码\",\n        \"type\": \"password\"\n    }, {\n        \"name\": \"♥登录书源\",\n        \"type\": \"button\",\n        \"action\": \"login(true)\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🔐注册书源\",\n        \"type\": \"button\",\n        \"action\": \"register()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    },\n    {\n        \"name\": \"⚙️书源设置\",\n        \"type\": \"button\",\n        \"action\": \"control()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        \"name\": \"⛔️清空设置\",\n        \"type\": \"button\",\n        \"action\": \"reCookieSettings()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"✨应用设置\",\n        \"type\": \"button\",\n        \"action\": \"applyCookieSettings()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \" 🔚 退出登录\",\n        \"type\": \"button\",\n        \"action\": \"logout()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    },\n    {\n        \"name\": \"🏝用户后台\",\n        \"type\": \"button\",\n        \"action\": \"loginqt()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \" 🗑 清除设备\",\n        \"type\": \"button\",\n        \"action\": \"clearDevice()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    },\n    {\n        \"name\": \"🔮 检测登录\",\n        \"type\": \"button\",\n        \"action\": \"checkStatus()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"☕打赏享福利\",\n        \"type\": \"button\",\n        \"action\": \"vip()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"❇️ 更新书源\",\n        \"type\": \"button\",\n        \"action\": \"renderVersionPage()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    },\n    {\n        \"name\": \"==下方配置为书源设置页面无法打开时使用==\",\n        \"type\": \"button\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        \"name\": \"📑更少简介\",\n        \"type\": \"button\",\n        \"action\": \"set_info()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"📝段评开关\",\n        \"type\": \"button\",\n        \"action\": \"paracomment('fqpara')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"📚 同步书架\",\n        \"type\": \"button\",\n        \"action\": \"set_reading()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"♋️ 男/女频道\",\n        \"type\": \"button\",\n        \"action\": \"set_source_type()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"💢 强制搜索全部\",\n        \"type\": \"button\",\n        \"action\": \"disabledSources()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🍅番茄登录\",\n        \"type\": \"button\",\n        \"action\": \"fq_login()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🗂当前模式\",\n        \"type\": \"button\",\n        \"action\": \"get_media()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        \"name\": \"📖小说模式\",\n        \"type\": \"button\",\n        \"action\": \"set_media('小说')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🔊听书模式\",\n        \"type\": \"button\",\n        \"action\": \"set_media('听书')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🏞漫画模式\",\n        \"type\": \"button\",\n        \"action\": \"set_media('漫画')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🖲短剧模式\",\n        \"type\": \"button\",\n        \"action\": \"set_media('短剧')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"🎚切换服务器\",\n        \"type\": \"button\",\n        \"action\": \"set_server()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"♻️检测当前服务器\",\n        \"type\": \"button\",\n        \"action\": \"checkNet()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"⚕️本地/服务器 \",\n        \"type\": \"button\",\n        \"action\": \"get_proxy()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"📌永久发布页📌\",\n        \"type\": \"button\",\n        \"action\": \"api()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"↓↓下方可切换来源用于搜索/发现页↓↓\",\n        \"type\": \"button\",\n        \"action\": \"get_media()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        \"name\": \"📤我来上传\",\n        \"type\": \"button\",\n        \"action\": \"put_sk()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"💖我来推荐\",\n        \"type\": \"button\",\n        \"action\": \"put_book()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"全部\",\n        \"type\": \"button\",\n        \"action\": \"set_source('全部')\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('番茄')\",\n        'name': '番茄',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('69书吧')\",\n        'name': '69书吧',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('七猫')\",\n        'name': '七猫',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('百度')\",\n        'name': '百度',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('起点')\",\n        'name': '起点(第三方)',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('得间')\",\n        'name': '得间',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('塔读')\",\n        'name': '塔读',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('书旗')\",\n        'name': '书旗',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('QQ')\",\n        'name': 'QQ',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('猫眼')\",\n        'name': '猫眼',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('搜书神器')\",\n        'name': '搜书神器',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('得奇')\",\n        'name': '得奇',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('伪69')\",\n        'name': '伪69',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('爱下电子书')\",\n        'name': '爱下电子书',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('小米')\",\n        'name': '小米',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('星星小说')\",\n        'name': '星星小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('笔趣阁22')\",\n        'name': '笔趣阁22',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('顶点')\",\n        'name': '顶点',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('幻梦轻小说')\",\n        'name': '幻梦轻小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('江湖')\",\n        'name': '江湖',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('歪瑞古德')\",\n        'name': '歪瑞古德漫画',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('河马')\",\n        'name': '河马短剧',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('知乎')\",\n        'name': '知乎',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('vip')\",\n        'name': '下方为VIP专属书源(点击此处搜所有vip)',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        'action': \"set_source('喜马拉雅')\",\n        'name': '喜马拉雅',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('svip')\",\n        'name': '下方为SVIP专属书源(点击此处搜所有svip)',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    }, {\n        'action': \"set_source('超会专属短剧')\",\n        'name': '超会专属短剧',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('超会专属小说')\",\n        'name': '超会专属小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('酷我')\",\n        'name': '酷我听书',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('番薯小说')\",\n        'name': '番薯小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('QQ阅读')\",\n        'name': 'QQ(会员书籍免费)',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('阅友小说')\",\n        'name': '阅友小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('好看漫画')\",\n        'name': '好看漫画',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('全本小说')\",\n        'name': '全本小说',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('神书网')\",\n        'name': '神书网',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('读全本')\",\n        'name': '读全本',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('八一中文网')\",\n        'name': '八一中文网',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('斋书苑')\",\n        'name': '斋书苑',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('101看书')\",\n        'name': '101看书',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('万相书城')\",\n        'name': '万相书城',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('轻小说文库')\",\n        'name': '轻小说文库',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('轻之文库')\",\n        'name': '轻之文库',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('中华典藏')\",\n        'name': '中华典藏',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        'action': \"set_source('毒舌影视')\",\n        'name': '毒舌影视',\n        'type': 'button',\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.4\n        }\n    }, {\n        \"name\": \"自定义搜索源(多个用英文,分割)\",\n        \"type\": \"text\"\n    }, {\n        \"name\": \"自定义服务器(可不填)\",\n        \"type\": \"text\"\n    }, {\n        \"name\": \"自定义评论颜色(可不填)\",\n        \"type\": \"text\"\n    }, {\n        \"name\": \"段评气泡样式(0-4)\",\n        \"type\": \"text\"\n    }, {\n        \"name\": \"手动填写番茄token(可不填)\",\n        \"type\": \"text\"\n    }\n]",
    "loginUrl": "// 当前书源版本号，切勿修改，否则影响更新的识别\nconst localVersion = '5.1.13';\nlet controlUrl = host[0];\nfunction login(flag) {\n    if (flag == undefined) {\n        result = JSON.parse(source.getLoginInfo())\n    } else {\n        java.longToast(\"\\n\\n💞正在登录中...\")\n        putLoginInfo(JSON.stringify(result))\n    }\n    let base_url = getArgument('server')\n    let zdyserver = String(result['自定义服务器(可不填)']);\n    if (zdyserver.includes('http')) {\n        setArgument('server', zdyserver);\n        if (getKey(String(cookie.getCookie(base_url)))) {\n            let cookies = cookie.getCookie(base_url)\ntry{cookie.removeCookie(base_url)} catch(e){}\n            cookie.setCookie(zdyserver, cookies)\n        }\n        java.toast(`\\n\\n当前服务器为自定义服务器\\n${zdyserver}\\n\\n切换服务器请先清空服务器地址中的数据`);\n    }\n    let plcolor = String(getArgument('plcolor')  || result['自定义评论颜色(可不填)'] || '#000000');\n    if (plcolor) {\n        setArgument('plcolor', plcolor);\n    } else {\n        setArgument('plcolor', '#000000');\n    }\n    let zdysources = String(result['自定义搜索源(多个用英文,分割)'] || '');\n    if (zdysources) {\n        setArgument('sources', zdysources);\n    };\n    base_url = getArgument('server')\n    let register_email = String(result['邮箱'])\n    let password = String(result['密码'])\n    let key = String(result['密钥'] || '')\n\n    if ((register_email && password || key) && !String(getKey(String(cookie.getCookie(base_url))))) {\n        try{cookie.removeCookie(base_url)} catch(e){}\n        let deviceKey = '';\n        try {\n            deviceKey = java.deviceID();\n        } catch (e) {\n            deviceKey = java.androidId();\n        };\n        let deviceId = deviceKey;\n        if (register_email && password) {\n            let options = JSON.stringify({\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/json'\n                },\n                body: JSON.stringify({\n                    register_email: result['邮箱'],\n                    password: result['密码']\n                })\n            })\n            try {\n                let data = JSON.parse(java.ajax(`${base_url}/login_api,${options}`))\n                if (data.code == 0) {\n                    //java.toast(deviceId)\n                    java.toast(\"\\n\\n✅️登录成功\")\n                    cookie.setCookie(base_url, `qttoken=${data.key};deviceId=${deviceId}`)\n                    result['密钥'] = data.key\n                    setArgument('qttoken', data.key);\n                    putLoginInfo(JSON.stringify(result))\n                } else {\n                    java.toast('\\n\\n💔' + data.msg || \"登录失败，请重试！\")\n                }\n            } catch (e) {\n                java.toast(\"\\n\\n💔登录失败，请重试！\\n\" + e.message)\n            }\n        } else {\n            cookie.setCookie(base_url, `qttoken=${key};deviceId=${deviceId}`)\n            let res = java.ajax(`${base_url}/user_api,{\"method\":\"POST\",\"headers\":{\"cookie\":\"${cookie.getCookie(base_url)}\"}}`)\n            try {\n                res = JSON.parse(res)\n                if (res.id != undefined) {\n                    setArgument('qttoken', key);\n                    java.toast('\\n\\n密钥登录成功')\n                    result['邮箱'] = res.email\n                    putLoginInfo(JSON.stringify(result))\n                } else {\n                    throw new Error()\n                }\n            } catch (e) {\n                java.log(e)\n                java.toast(\"\\n\\n💔登录失败\")\n            }\n        }\n    } else if (flag && String(getKey(String(cookie.getCookie(base_url))))) {\n        java.toast(\"\\n\\n当前✅️已登录，请🚫退出登录后重新登录\");\n        //checkStatus();\n    } else if (flag) {\n        java.toast(\"\\n\\n⛔️请先填写邮箱和密码\");\n    }\n}\n\nfunction objectToCookieString(obj) {\n  if (!obj || typeof obj !== 'object') {\n    return '';\n  }\n  return Object.entries(obj)\n    .map(([key, value]) => {\n      const stringValue = String(value);\n      const encodedKey = encodeURIComponent(key);\n      const encodedValue = encodeURIComponent(stringValue);\n      return `${encodedKey}=${encodedValue}`;\n    })\n    .join('; ');\n}\n\nfunction control(){\n    controlUrla = getArgument('controlUrl');\n    if (controlUrla){\n        controlUrla = findFirstAvailableHost([controlUrla]);\n    }\r\n    if (!controlUrla) {\n        controlUrla = findFirstAvailableHost(host) || controlUrl;\n    }\n    setArgument('controlUrl', controlUrla);\n    try {\n    \tlet open_argument = source.getVariable();\n    \topen_argument=JSON.parse(open_argument);\n    \tlet control_cookie = objectToCookieString(open_argument);\n    cookie.setCookie(controlUrla, control_cookie);\n    \t} catch{}\n      //java.toast(cookie.getCookie(controlUrla))\n    \tjava.startBrowserAwait(controlUrla + '/control', '晴天小说设置');\n    applyCookieSettings();\n\t}\n\nfunction applyCookieSettings() {\n\t  let controlUrla = getArgument('controlUrl') || controlUrl;\n\t  \tvar cookieStr = String(cookie.getCookie(controlUrla));\n    \n    var cookieData = {};\n    if (cookieStr && cookieStr !== 'null' && cookieStr !== 'undefined' && cookieStr !== '') {\n        var pairs = cookieStr.split('; ');\n        for (var i = 0; i < pairs.length; i++) {\n            var pair = pairs[i];\n            var eqIndex = pair.indexOf('=');\n            if (eqIndex > -1) {\n                var key = pair.substring(0, eqIndex).trim();\n                var value = decodeURIComponent(pair.substring(eqIndex + 1).trim());\n                cookieData[key] = value;\n                setArgument(key, value);\n            }\n        }\n    }\n    \n    var displayConfig = [\n        { key: 'server', label: '服务器', defaultValue: host[0] },\n        { key: 'proxy', label: '访问模式', defaultValue: '云端' },\n        { key: 'tab', label: '阅读模式', defaultValue: '小说' },\n        { key: 'source_type', label: '阅读频道', defaultValue: '男频' },\n        { key: 'sources', label: '书源选择', defaultValue: '全部' },\n        { key: 'fqpara', label: '段评显示', defaultValue: 'on' },\n        { key: 'disabled_sources', label: '强制搜索', defaultValue: '0' },\n        { key: 'reading', label: '同步书架', defaultValue: '0' },\n        { key: 'info', label: '完整简介', defaultValue: 'on' }\n    ];\n    \n    var valueMap = {\n        // 访问模式\n        '本地': '💻 本地',\n        '云端': '☁️ 云端',\n        \n        // 开关状态\n        'on': '✅ 开启',\n        'off': '❌ 关闭',\n        '1': '✅ 开启',\n        '0': '❌ 关闭',\n        \n        // 频道类型\n        '男频': '👨 男频',\n        '女频': '👩 女频',\n        \n        // 内容类型\n        '小说': '📖 小说',\n        '听书': '🎧 听书',\n        '漫画': '🎨 漫画',\n        '短剧': '🎬 短剧',\n        \n        // 来源类型\n        'vip': '💎 VIP专属',\n        'svip': '👑 SVIP专属',\n        '推荐': '⭐ 网友推荐',\n        '全部': '📚 全部'\n    };\n    \n\n    var displayLines = [];\n    \n    for (var i = 0; i < displayConfig.length; i++) {\n        var config = displayConfig[i];\n        var value = cookieData[config.key] || config.defaultValue;\n        \n        if (!cookieData[config.key]) {\n            setArgument(config.key, config.defaultValue);\n        }\n        \n        var displayValue = valueMap[value] || value;\n        if (config.key === 'sources' && displayValue.length > 25) {\n            displayValue = displayValue.substring(0, 25) + '...';\n        }\n        \n        displayLines.push(config.label + ': ' + displayValue);\n    }\n    \n    // 构建提示模板\n    var template = '✨ 当前配置\\n';\n    template += '━━━━━━━━━━━━━━━━\\n';\n    template += displayLines.join('\\n');\n    template += '\\n━━━━━━━━━━━━━━━━\\n';\n    template += '❤️当前应用的 *⚙️书源设置* 中的配置哦❤️'\n    \n    // 显示提示\n    java.longToast(template);\n    \n    return displayLines.length;\n}\n\n\nfunction reCookieSettings(){\n\tlet controlUrla = getArgument('controlUrl') || controlUrl;\n    cookie.removeCookie(controlUrla);\n    applyCookieSettings();\n    \n}\n// 检测服务器\nfunction checkNet() {\n    let url = getArgument('server');\n    java.longToast(`\\n\\n♻️正在检测：${url}\\n请稍等~`);\n    let date1 = new Date().getTime();\n    let html = java.ajax(url + '/login');\n    let date2 = new Date().getTime();\n    let t = date2 - date1;\n    let c = String(html).indexOf('晴天');\n    let code = 1;\n    let time = t / 1000 + 's';\n    let logTime = '【' + url + '】\\n┋┋\\n' + '解析时间：' + time;\n    if (c == -1 || t > 5000) {\n        java.longToast('\\n💔【访问失败提示】\\n' + '┏┅━┅━┅━┅━┅┅━┅━┅┓\\n┋┋\\n' + logTime + '\\n┋┋\\n♣️当前接口无法访问(可能被墙)♣️\\n┋┋\\n请切换其他接口/切换网络环境\\n┋┋' + '\\n┗┅━┅━┅━┅━┅┅━┅━┅┛');\n    } else if (t < 1000) {\n        java.longToast('\\n💖【网络环境优良】\\n' + '┏┅━┅━┅━┅━┅┅━┅━┅┓\\n┋┋\\n' + logTime + '\\n┋┋\\n❤️延迟低，推荐使用此接口❤️\\n┋┋\\n网络环境优良，请继续保持状态\\n┋┋' + '\\n┗┅━┅━┅━┅━┅┅━┅━┅┛');\n    } else if (t >= 1000 && t < 2000) {\n        java.longToast('\\n💛【网络环境一般】\\n' + '┏┅━┅━┅━┅━┅┅━┅━┅┓\\n┋┋\\n' + logTime + '\\n┋┋\\n♦️延迟一般，勉强可使用♦️\\n┋┋\\n请切换其他接口或切换网络环境\\n┋┋' + '\\n┗┅━┅━┅━┅━┅┅━┅━┅┛');\n    } else if (t >= 2000 && t < 5000) {\n        java.longToast('\\n💔【网络环境堪忧】\\n' + '┏┅━┅━┅━┅━┅┅━┅━┅┓\\n┋┋\\n' + logTime + '\\n┋┋\\n♠延迟过高，不建议使用♠\\n┋┋\\n请切换其他接口或切换网络环境\\n┋┋' + '\\n┗┅━┅━┅━┅━┅┅━┅━┅┛');\n    }\n}\n\n\nfunction findFirstAvailableHost(hosts) {\n    // 按顺序检测，找到第一个可用的就返回\n    for (var i = 0; i < hosts.length; i++) {\n        var host = hosts[i];\n        \n        try {\n            java.longToast(\"🔍 正在检测: \" + host);\n            \n            var start = new Date().getTime();\n            var response = java.ajax(host + \"/login\");\n            var end = new Date().getTime();\n            var time = end - start;\n            \n            // 检查是否可用\n            if (String(response).indexOf(\"晴天\") !== -1 && time <= 5000) {\n                // 显示结果\n                var status = \"✅ 可用\";\n                if (time < 1000) {\n                    status = \"💚 优秀\";\n                } else if (time < 2000) {\n                    status = \"💛 一般\";\n                } else {\n                    status = \"🧡 较慢\";\n                }\n                java.longToast(status + \"\\n主机: \" + host + \"\\n延迟: \" + time + \"ms\");\n                return host; // 直接返回找到的主机\n            }\n        } catch (e) {\n            // 这个主机失败，继续下一个\n        }\n    }\n    \n    // 所有主机都不可用\n    java.longToast(\"❌ 没有可用的主机\");\n    return null;\n}\nfunction isVips(res) {\n    let isVIP = '';\n    let vipEndTime = res.vip_end_time;\n    let formattedDate = '';\n\n    if (vipEndTime && vipEndTime !== 0) {\n        let date = new Date(vipEndTime * 1000);\n        formattedDate = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;\n        let currentTime = Math.floor(Date.now() / 1000);\n        let remainingDays = Math.ceil((vipEndTime - currentTime) / (24 * 60 * 60));\n        if (currentTime > vipEndTime) {\n            isVIP = `${res.vip_level === 1 ? \"VIP\" : \"SVIP\"} (已过期)`;\n        } else if (remainingDays <= 7) {\n            isVIP = `${res.vip_level === 1 ? \"VIP\" : \"SVIP\"} 剩余${remainingDays}天`;\n        } else {\n            if (vipEndTime < 1912946812) {\n                isVIP = `${res.vip_level === 1 ? \"VIP\" : \"SVIP\"}(${formattedDate})`;\n            } else {\n                isVIP = `${res.vip_level === 1 ? \"VIP\" : \"SVIP\"} (永久)`;\n            }\n        }\n    } else {\n        isVIP = '您尚未开通VIP';\n    }\n    return isVIP;\n}\n\nfunction checkStatus() {\n    java.longToast('\\n\\n♻️检测中...');\n    let base_url = getArgument('server')\n    let res = java.ajax(`${base_url}/user_api,{\"method\":\"POST\",\"headers\":{\"cookie\":\"${cookie.getCookie(base_url)}\"}}`)\n    try {\n        res = JSON.parse(res)\n        if (res.id != undefined) {\n            result['邮箱'] = res.email\n            putLoginInfo(JSON.stringify(result))\n            let devices\n            try {\n                devices = Object.keys(JSON.parse(res.device)).length;\n            } catch (e) {\n                devices = res.device ? 1 : 0;\n            }\n            let isVip = isVips(res);\n            tips = `\n┏┅┅┅┅┅┅┱┄┄┄┄┄┄┄┄┄┄┐\n　 🧢昵称 　　　　${res.nickname.padEnd(20,\"\\t\") || \"未设置\".padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　✉️邮箱　　　　${res.email.replace(/(.{3}).*?@/,\"$1***@\").padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　🔑密钥　　　　${(`${res.user_key.substring(0,4)}***${res.user_key.slice(-4)}`).padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　📅注册时间　　${java.timeFormat(res.register_time*1000).padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　🗒️今日阅读　　${(java.timeFormat(new Date()).slice(0,10)==java.timeFormat(res.last_read_time * 1000).slice(0,10)?res.day_read_count:0).toString().padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　📚累计阅读　　${res.all_read_count.toString().padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　🕓最后阅读　　${(res.last_read_time != 0?java.timeFormat(res.last_read_time * 1000):'未阅读').padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　📱在线设备　　${devices.toString().padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　👑会员状态　　${isVip.padEnd(20,\"\\t\")}\n┣┅┅┅┅┅┅╉┄┄┄┄┄┄┄┄┄┄┤\n　🚫封禁状态　　${res.is_banned?'已封禁':'正常　'}　　　　　　　\n┗┅┅┅┅┅┅┹┄┄┄┄┄┄┄┄┄┄┘\n`\n            java.log(tips)\n            java.longToast(tips)\n        } else {\n            throw new Error(res.msg)\n        }\n    } catch (e) {\n        //java.log(e)\n        java.toast(\"\\n检测登录失败\\n\" + e.message)\n    }\n}\n\nfunction clearDevice() {\n    let base_url = getArgument('server')\n    let res = java.ajax(`${base_url}/clear,{\"method\":\"POST\",\"headers\":{\"cookie\":\"${cookie.getCookie(base_url)}\"}}`)\n    res = JSON.parse(res);\n   java.toast(res.code == 0 ? \"\\n\\n📴设备清除成功\" : res.msg)\n    Packages.java.lang.Thread.sleep(500)\n    checkStatus()\n}\n// 保存登录UI信息\nfunction putLoginInfo(info) {\n    try {\n        let key = java.androidId()\n        let encodeStr = Packages.android.util.Base64.encodeToString(java.createSymmetricCrypto(\"AES\", key).encrypt(info), 2)\n        cache.put(`userInfo_${source.getKey()}`, encodeStr)\n        return true\n    } catch (e) {\n        java.log(e)\n        return source.putLoginInfo(info)\n    }\n}\n\n// 用户后台\nfunction loginqt() {\n\t   let base_url = getArgument('server');\n\t   let ck = String(cookie.getKey(base_url, \"qttoken\"));\n\t   if (!ck) {\n\t   \tjava.longToast('\\n\\n🚫请先登录!')\n\t   \t} else {\n\t   \t\tjava.startBrowserAwait(getArgument('server') + '/user', '晴天小说后台');\n\t   \t\t}\n    }\n\n// 用户注册\nfunction register() {\n\t   let base_url = getArgument('server');\n\t   \tjava.startBrowserAwait(getArgument('server') + '/register', '晴天小说注册');\n    }\n\n//登录番茄\nfunction fq_login() {\n    try {\n        java.startBrowserAwait(\"https://fanqienovel.com/\", \"登录\")\n    } catch (e) {\n        java.toast(e)\n    }\n    try {\n        cookie.removeCookie(\"snssdk.com\")\n    } catch (e) {}\n    var cookie_ = \"sessionid=\" + (String(cookie.getKey(\"fanqienovel.com\", \"sessionid\")) ? String(cookie.getKey(\"fanqienovel.com\", \"sessionid\")) : source.getLoginInfoMap()['手动登录Token'])\n    let user\n    try {\n        user = JSON.parse(java.ajax(\"https://fanqienovel.com/api/user/info/v2,\" + JSON.stringify({\n            method: \"GET\",\n            headers: {\n                \"Cookie\": cookie_\n            }\n        }))).data.name\n    } catch (e) {\n        java.log(e)\n    }\n    if (!cookie_ || cookie_ == \"sessionid=\" || !user) {\n        java.toast(\"未获取到登录凭据，登录失败\")\n        return false\n    }\n    java.toast(\"\\n\\n欢迎 \" + user + \"\\n登录成功！\")\n    return true\n}\n\n//退出登录\nfunction logout() {\n    cookie.removeCookie(\"fanqienovel.com\");\n    cookie.removeCookie(\"snssdk.com\");\n    cookie.removeCookie(\"69shuba.com\");\n    /*\n    let servers = host\n    for (let server of servers) {\n    \ttry{removeCookie(server )} catch(e){cookie.removeCookie(server )}\n    }\n    */\ntry{cookie.removeCookie(getArgument('server'))} catch(e){}\n    java.toast(\"退出登录成功\");\n}\n\n//获取参数\nfunction getArgument(key) {\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '');\n    return open_argument[key];\n}\n\n//设置参数\nfunction setArgument(key, value) {\n    let open_argument = source.getVariable();\n    open_argument = getArguments(open_argument, '');\n    open_argument[key] = value;\n    open_argument = JSON.stringify(open_argument);\n    source.setVariable(open_argument);\n    return open_argument;\n}\n\n// 设置本地or云端访问\nfunction get_proxy() {\n    let proxy = getArgument('proxy');\n    if (proxy == '本地') {\n        setArgument('proxy', '云端');\n        java.longToast('\\n所有数据采用\\n\\n服务器网络访问\\n\\n如果发现用不了，请切换本地网络访问，如69书吧');\n    } else {\n        setArgument('proxy', '本地');\n        java.longToast('\\n所有数据采用\\n\\n本地网络访问\\n\\n如果发现用不了，请开启网络代理，如69书吧');\n    }\n}\n\n\n//设置男女频\nfunction set_source_type() {\n    let source_type = getArgument(\"source_type\");\n    if (source_type == '女频') {\n        setArgument(\"source_type\", '男频');\n    java.toast(\"\\n发现页已设置为:🙋‍♂️男频\" );\n    } else {\n        setArgument(\"source_type\", '女频');\n    java.toast(\"\\n发现页已设置为:🙋‍♀️女频\" );\n    }\n    \n}\n\nfunction set_reading() {\n\tlet reading = getArgument(\"reading\");\n    if (reading == '1') {\n        setArgument(\"reading\", '0');\n    java.toast(\"\\n\\n晴天书架记录同步已关闭！\" );\n    } else {\n        setArgument(\"reading\", '1');\n    java.longToast(\"\\n\\n晴天书架记录同步已开启！\\n刷新阅读书架即可将书架书籍同步到晴天书架！\" );\n    }\n\n\t}\n\n//首页\nfunction api() {\n    java.startBrowserAwait('http://vip.gyks.cf', \"首页\");\n}\n\n//打赏\nfunction vip() {\n\t    let base_url = getArgument('server');\n\t   let ck = String(cookie.getKey(base_url, \"qttoken\"));\n\t   if (!ck) {\n\t   \tjava.longToast('\\n\\n🚫请先登录!')\n\t   \t} else {\n\t   \t\tjava.startBrowserAwait(getArgument('server') + '/coffee', '晴天小说会员开通');\n\t   \t\t}\n    }\n\nfunction put_sk() {\n\t    \t   \t\tjava.startBrowserAwait( 'https://sk.gyks.cf', '晴天书库');\n\t   \t\t\n    }\n\nvar server = getArgument('server');\n\n//设置搜索媒体\nfunction set_media(media) {\n    const mediaConfig = {\n        '喜马拉雅': ['听书'],\n        '番茄': '*',\n        '福利小说': ['小说'],\n        '如漫画': ['漫画'],\n        '包子漫画': ['漫画'],\n        '九妖漫画': ['漫画'],\n        '绅士漫画': ['漫画'],\n        '福利漫画': ['漫画'],\n        '好看漫画': ['漫画'],\n        '六月听书': ['听书'],\n        '海洋听书': ['听书'],\n        '酷我听书': ['听书'],\n        '七猫': ['小说', '听书', '短剧'],\n        '河马': ['短剧'],\n        '超会专属短剧': ['短剧'],\n        '歪瑞古德': ['漫画'],\n        '毒舌影视': ['短剧'],\n        '全部': '*', // 允许所有模式\n        '默认': ['小说']\n    };\n\n    const source = getArgument('sources');\n    const allowedModes = mediaConfig[source] || mediaConfig['默认'];\n    let targetMedia = mediaConfig['默认'][0];\n    let isAllowed = false;\n\n    if (allowedModes === '*' || allowedModes.includes(media)) {\n        targetMedia = media;\n        isAllowed = true;\n    } else if (Array.isArray(allowedModes)) {\n        targetMedia = allowedModes[0];\n    }\n\n    const message = isAllowed ?\n        `\\n\\n已切换至：${targetMedia}\\n请重新搜索书籍！` :\n        `\\n\\n目前${source}：不支持【${media}】模式！\\n已自动切换至：${targetMedia}`;\n\n    setArgument('tab', targetMedia);\n    java.toast(message);\n}\n\n//获取搜索媒体\nfunction get_media() {\n    let media = getArgument('tab');\n    let source = getArgument('sources');\n    if (media == '') {\n        media = '全部';\n    }\n    var tishi = '\\n\\n当前服务器：' + getArgument('server')\n    java.longToast(`\\n\\n当前使用源：${source}-${media}${tishi}`);\n}\n\n\n//设置服务器\nfunction set_server() {\n    putLoginInfo(JSON.stringify(result))\n    let zdyserver;\n    let base_url = getArgument('server')\n    try {\n        zdyserver = String(result['自定义服务器(可不填)']);\n        if (zdyserver.includes('http')) {\n            setArgument('server', zdyserver);\n            if (getKey(String(cookie.getCookie(base_url)))) {\n                let cookies = cookie.getCookie(base_url)\n                try{cookie.removeCookie(base_url)} catch(e){}\n                cookie.setCookie(zdyserver, cookies)\n            }\n            java.toast(`\\n\\n当前服务器为自定义服务器\\n${zdyserver}\\n\\n切换服务器请先清空服务器地址中的数据`);\n        } else {\n            zdyserver = '';\n        }\n    } catch (error) {\n        zdyserver = '';\n    }\n    if (!zdyserver) {\n        const servers = host\n        const currentServer = getArgument('server') || '';\n        const currentIndex = servers.indexOf(currentServer);\n\n        const nextIndex = currentIndex >= 0 ? (currentIndex + 1) % servers.length : 0;\n        const nextServer = servers[nextIndex];\n\n        setArgument('server', nextServer);\n        if (getKey(String(cookie.getCookie(currentServer)))) {\n            let cookies = cookie.getCookie(currentServer)\ntry{cookie.removeCookie(currentServer)} catch(e){}\n            cookie.setCookie(nextServer, cookies)\n        }\n        java.longToast(`\\n\\n服务器【${nextIndex+1}】：${nextServer}`);\n    }\n}\n\n//获取音色\nvar tone_id = getArgument('tone_id');\n\nfunction get_tone_id(arg) {\n    var datadist = {\n        \"0\": \"默认音色\",\n        \"-1\": \"阅读模式\",\n        \"-2\": \"漫画模式\",\n        \"51\": \"多人发音\",\n        \"1\": \"甜美少女\",\n        \"2\": \"清亮青叔\",\n        \"5\": \"开朗青年\",\n        \"6\": \"温柔淑女\",\n        \"4\": \"成熟大叔\",\n        \"74\": \"大叔升级\",\n        \"30\": \"优雅御姐\"\n    };\n    var tone_id = datadist[arg] || arg;\n    var tishi = '\\n\\n当前音色：' + tone_id;\n    java.toast(tishi);\n}\n\n\n//设置来源\nfunction set_source(sources) {\n    let zdysources = String(result['自定义搜索源(多个用英文,分割)'] || '');\n    if (zdysources.length > 1 && zdysources != 'undefined') {\n        java.toast('\\n\\n请先清空自定义源再设置');\n    } else {\n        setArgument('sources', sources);\n        set_media('小说');\n        java.toast(`\\n\\n当前来源已切换为:\\n${sources}\\n\\n切换后请重新搜索`);\n    }\n}\n\n// 设置简介\nfunction set_info() {\n    var info = getArgument('info');\n    if (info == 'off') {\n        setArgument('info', 'on');\n        java.toast('\\n\\n已恢复详情页详细简介');\n    } else {\n        setArgument('info', 'off');\n        java.toast('\\n\\n已精简详情页简介');\n    }\n}\n\n// 番茄段评\nfunction paracomment() {\n    var fqpara = getArgument('fqpara');\n    if (fqpara != 'on') {\n        setArgument('fqpara', 'on');\n        java.longToast(\"\\n\\n段评已开启\\n\\n长按刷新段后面的图片即可\\n\\n如果图片不显示，刷新无反应\\n请更新测试版阅读app\");\n    } else {\n        setArgument('fqpara', 'off');\n        java.longToast('\\n\\n段评已关闭');\n    }\n}\n\n// 强制搜索被禁用的源\nfunction disabledSources() {\n    var disabled_sources = getArgument('disabled_sources');\n    if (disabled_sources == '1') {\n        setArgument('disabled_sources', '0');\n        java.longToast('\\n\\n强制搜索禁用的源已关闭');\n    } else {\n        setArgument('disabled_sources', '1');\n        setArgument('sources', '全部');\n        java.longToast(\"\\n\\n强制搜索禁用的源已开启\\n\\n注意：开启后搜索时间会变长！\");\n    }\n}\n\n// 我要推荐\nfunction put_book() {\n    java.startBrowserAwait(getArgument('server') + '/put_book', '我来推荐');\n}\n\n// 书源更新\nfunction renderVersionPage() {\n    let yd = '';\n    let html = `\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>书源更新</title>\n  <!-- Font Awesome 图标库 -->\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\" />\n  <style>\n    :root {\n      --primary-gradient: linear-gradient(135deg, #4e6ef2, #6b2dd8);\n      --latest-gradient: linear-gradient(135deg, #8e2de2 0%, #4a00e0 50%, #d4af37 100%);\n      --success-color: #28c76f;\n      --warning-color: #ff9f43;\n      --error-color: #ea5455;\n      --text-main: #1f2937;\n      --text-secondary: #6b7280;\n      --card-bg: #ffffff;\n      --border-color: #e5e7eb;\n      --light-bg: #f9fafb;\n      --shadow: 0 4px 12px rgba(78, 110, 242, 0.1);\n      --shadow-hover: 0 6px 18px rgba(78, 110, 242, 0.2);\n      --glow-shadow: 0 0 25px rgba(142, 45, 226, 0.5), 0 0 50px rgba(212, 175, 55, 0.3);\n      --modal-bg: rgba(31, 41, 55, 0.8);\n      --modal-content-bg: #ffffff;\n    }\n\n    * {\n      box-sizing: border-box;\n      margin: 0;\n      padding: 0;\n      font-family: 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif;\n    }\n\n    body {\n      background: linear-gradient(135deg, #eef2ff, #f5f7ff);\n      color: var(--text-main);\n      min-height: 100vh;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      padding: 16px;\n    }\n\n    /* 加载动画 */\n    .loading-wrapper {\n      text-align: center;\n      animation: fadeIn 0.3s ease;\n    }\n\n    .loading-spinner {\n      width: 50px;\n      height: 50px;\n      border: 4px solid rgba(78, 110, 242, 0.3);\n      border-top-color: #4e6ef2;\n      border-radius: 50%;\n      margin: 0 auto 20px;\n      animation: spin 1s linear infinite;\n    }\n\n    .loading-text {\n      color: var(--text-main);\n      font-size: 16px;\n      font-weight: 500;\n    }\n\n    @keyframes spin {\n      to { transform: rotate(360deg); }\n    }\n\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(20px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    @keyframes slideIn {\n      from { opacity: 0; transform: translateY(30px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    @keyframes pulse {\n      0%, 100% { opacity: 1; }\n      50% { opacity: 0.7; }\n    }\n\n    @keyframes gradientAnimation {\n      0% { background-position: 0% 50%; }\n      50% { background-position: 100% 50%; }\n      100% { background-position: 0% 50%; }\n    }\n\n    @keyframes breathe {\n      0%, 100% { \n        transform: scale(1);\n        box-shadow: var(--glow-shadow), var(--shadow);\n      }\n      50% { \n        transform: scale(1.02);\n        box-shadow: 0 0 30px rgba(142, 45, 226, 0.6), 0 0 60px rgba(212, 175, 55, 0.4), var(--shadow);\n      }\n    }\n\n    @keyframes shimmer {\n      0% {\n        background-position: -200% center;\n      }\n      100% {\n        background-position: 200% center;\n      }\n    }\n\n    /* 主容器 */\n    .container {\n      width: 100%;\n      max-width: 420px;\n      background: var(--card-bg);\n      border-radius: 24px;\n      overflow: hidden;\n      box-shadow: var(--shadow);\n      position: relative;\n      z-index: 1;\n      animation: slideIn 0.5s ease;\n      display: none;\n    }\n\n    /* 头部 */\n    .header {\n      background: var(--primary-gradient);\n      color: #ffffff;\n      padding: 24px 16px;\n      text-align: center;\n      position: relative;\n      overflow: hidden;\n    }\n\n    .header::before {\n      content: '';\n      position: absolute;\n      top: -30px;\n      left: -30px;\n      width: 80px;\n      height: 80px;\n      background: rgba(255, 255, 255, 0.15);\n      border-radius: 50%;\n    }\n\n    .header::after {\n      content: '';\n      position: absolute;\n      bottom: -60px;\n      right: -60px;\n      width: 150px;\n      height: 150px;\n      background: rgba(255, 255, 255, 0.1);\n      border-radius: 50%;\n    }\n\n    .header h1 {\n      font-size: 1.4rem;\n      font-weight: 700;\n      margin-bottom: 8px;\n      position: relative;\n      z-index: 2;\n    }\n\n    .header p {\n      font-size: 0.9rem;\n      opacity: 0.9;\n      line-height: 1.4;\n      position: relative;\n      z-index: 2;\n    }\n\n    .header-icon {\n      font-size: 48px;\n      margin-bottom: 10px;\n      display: inline-block;\n      animation: bounce 2s ease infinite;\n    }\n\n    @keyframes bounce {\n      0%, 100% { transform: translateY(0); }\n      50% { transform: translateY(-10px); }\n    }\n\n    /* 版本对比 */\n    .version-comparison {\n      display: flex;\n      flex-wrap: nowrap;\n      gap: 12px;\n      padding: 16px;\n      margin-top: 8px;\n      position: relative;\n      z-index: 10;\n    }\n\n    .version-card {\n      flex: 1;\n      min-width: 45%;\n      background: var(--card-bg);\n      border-radius: 16px;\n      padding: 28px 16px 16px;\n      box-shadow: var(--shadow);\n      text-align: center;\n      position: relative;\n      transition: transform 0.3s ease, box-shadow 0.3s ease;\n      overflow: hidden;\n      border: 1px solid rgba(120, 130, 240, 0.1);\n    }\n\n    .version-card:hover {\n      transform: translateY(-4px);\n      box-shadow: var(--shadow-hover);\n    }\n\n    .version-card.current-version {\n      background: linear-gradient(135deg, #ffffff 0%, #f8f9ff 100%);\n      border: 1px solid rgba(78, 110, 242, 0.15);\n    }\n\n    .version-card.current-version:hover {\n      box-shadow: 0 6px 20px rgba(78, 110, 242, 0.15);\n    }\n\n    .version-card.current-version h3,\n    .version-card.current-version .version-number,\n    .version-card.current-version .version-date {\n      color: var(--text-main);\n    }\n\n    .version-card.latest-version {\n      background: var(--latest-gradient);\n      background-size: 300% 300%;\n      box-shadow: var(--glow-shadow), var(--shadow);\n      color: #fff;\n      z-index: 2;\n      animation: gradientAnimation 6s ease infinite, breathe 3s ease-in-out infinite;\n      position: relative;\n      overflow: hidden;\n    }\n\n    .version-card.latest-version::before {\n      content: '';\n      position: absolute;\n      top: -50%;\n      left: -50%;\n      width: 200%;\n      height: 200%;\n      background: linear-gradient(\n        90deg,\n        transparent,\n        rgba(255, 255, 255, 0.3),\n        transparent\n      );\n      transform: rotate(45deg);\n      animation: shimmer 3s infinite;\n    }\n\n    .version-card.latest-version h3,\n    .version-card.latest-version .version-number,\n    .version-card.latest-version .version-date {\n      color: #fff;\n      text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);\n      position: relative;\n      z-index: 1;\n    }\n\n    .version-status {\n      position: absolute;\n      top: 6px;\n      right: 6px;\n      padding: 3px 7px;\n      font-size: 0.65rem;\n      font-weight: 600;\n      border-radius: 6px;\n      color: #fff;\n      line-height: 1.2;\n      white-space: nowrap;\n      z-index: 2;\n    }\n\n    .version-card.latest-version .version-status {\n      background: rgba(255, 255, 255, 0.25);\n      backdrop-filter: blur(5px);\n      border: 1px solid rgba(255, 255, 255, 0.3);\n      color: #fff;\n      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n    }\n\n    .status-outdated { background: var(--warning-color); }\n    .status-latest { background: var(--success-color); }\n    .status-invalid { background: var(--error-color); }\n\n    .version-card h3 {\n      font-size: 0.9rem;\n      color: var(--text-secondary);\n      margin-bottom: 8px;\n      font-weight: 500;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 6px;\n    }\n\n    .version-number {\n      font-size: 1.25rem;\n      font-weight: 700;\n      color: var(--text-main);\n      margin: 8px 0;\n      transition: all 0.3s ease;\n      font-family: 'Courier New', monospace;\n    }\n\n    .version-card.latest-version .version-number {\n      font-size: 1.4rem;\n      transform: scale(1.05);\n      text-shadow: \n        0 2px 4px rgba(0, 0, 0, 0.3),\n        0 0 10px rgba(212, 175, 55, 0.8),\n        0 0 20px rgba(212, 175, 55, 0.5);\n      animation: pulse-glow 2s ease-in-out infinite;\n    }\n\n    @keyframes pulse-glow {\n      0%, 100% {\n        text-shadow: \n          0 2px 4px rgba(0, 0, 0, 0.3),\n          0 0 10px rgba(212, 175, 55, 0.8),\n          0 0 20px rgba(212, 175, 55, 0.5);\n      }\n      50% {\n        text-shadow: \n          0 2px 4px rgba(0, 0, 0, 0.3),\n          0 0 15px rgba(212, 175, 55, 1),\n          0 0 30px rgba(212, 175, 55, 0.7);\n      }\n    }\n\n    .version-date {\n      font-size: 0.8rem;\n      color: var(--text-secondary);\n      margin-top: 4px;\n    }\n\n    /* 版本对比指示器 */\n    .version-indicator {\n      position: absolute;\n      left: 50%;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      z-index: 5;\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n      color: white;\n    }\n\n    .version-indicator.update-needed {\n      background: var(--error-color);\n      box-shadow: 0 2px 8px rgba(234, 84, 85, 0.4);\n      animation: pulse-indicator 1.5s infinite;\n    }\n\n    .version-indicator.is-latest {\n      background: var(--success-color);\n      box-shadow: 0 2px 8px rgba(40, 199, 111, 0.4);\n    }\n\n    @keyframes pulse-indicator {\n      0% { transform: translate(-50%, -50%) scale(1); }\n      50% { transform: translate(-50%, -50%) scale(1.1); }\n      100% { transform: translate(-50%, -50%) scale(1); }\n    }\n\n    /* 内容区 */\n    .content-container {\n      padding: 16px;\n    }\n\n    /* 状态提示 */\n    .status-alert {\n      background: var(--card-bg);\n      border-radius: 16px;\n      box-shadow: var(--shadow);\n      margin-bottom: 16px;\n      overflow: hidden;\n      border: 1px solid rgba(120, 130, 240, 0.1);\n      padding: 12px 16px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 10px;\n      font-weight: 500;\n      font-size: 14px;\n      animation: slideIn 0.5s ease 0.3s backwards;\n    }\n\n    .status-alert i {\n      font-size: 20px;\n    }\n\n    .status-alert.update-available {\n      background: linear-gradient(135deg, #ffeaa7 0%, #fdcb6e 100%);\n      color: #d63031;\n      box-shadow: 0 4px 15px rgba(253, 203, 110, 0.4);\n    }\n\n    .status-alert.up-to-date {\n      background: linear-gradient(135deg, #55efc4 0%, #00b894 100%);\n      color: white;\n      box-shadow: 0 4px 15px rgba(0, 184, 148, 0.4);\n    }\n\n    /* 更新容器 */\n    .update-container {\n      background: var(--card-bg);\n      border-radius: 16px;\n      box-shadow: var(--shadow);\n      margin-bottom: 16px;\n      overflow: hidden;\n      border: 1px solid rgba(120, 130, 240, 0.1);\n      animation: slideIn 0.5s ease 0.4s backwards;\n    }\n\n    .update-header {\n      background: var(--light-bg);\n      padding: 12px 16px;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      border-bottom: 1px solid var(--border-color);\n    }\n\n    .update-header h2 {\n      font-size: 1rem;\n      font-weight: 600;\n      color: var(--text-main);\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n\n    .update-header h2 i {\n      color: #4e6ef2;\n    }\n\n    .update-tag {\n      background: rgba(78, 110, 242, 0.1);\n      color: #4e6ef2;\n      padding: 4px 8px;\n      border-radius: 8px;\n      font-size: 0.75rem;\n      font-weight: 600;\n    }\n\n    .update-content {\n      padding: 16px;\n    }\n\n    .update-date {\n      font-weight: 600;\n      color: #4e6ef2;\n      margin-bottom: 12px;\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      padding: 8px 0;\n      border-bottom: 1px dashed #e0e0e0;\n    }\n\n    .update-text {\n      margin: 8px 0;\n      position: relative;\n      padding-left: 16px;\n      line-height: 1.5;\n      color: var(--text-main);\n      font-size: 0.95rem;\n      white-space: pre-wrap;\n      word-break: break-word;\n    }\n\n    .update-text::before {\n      content: '•';\n      position: absolute;\n      left: 0;\n      font-weight: bold;\n      color: #4e6ef2;\n      font-size: 1.2rem;\n      line-height: 1;\n    }\n\n    /* 历史日志 */\n    .history-container {\n      background: var(--card-bg);\n      border-radius: 16px;\n      box-shadow: var(--shadow);\n      margin-bottom: 16px;\n      border: 1px solid rgba(120, 130, 240, 0.1);\n      animation: slideIn 0.5s ease 0.5s backwards;\n    }\n\n    .history-header {\n      background: var(--light-bg);\n      padding: 12px 16px;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      border-bottom: 1px solid var(--border-color);\n      cursor: pointer;\n      user-select: none;\n    }\n\n    .history-header:hover {\n      opacity: 0.8;\n    }\n\n    .history-header h2 {\n      font-size: 1rem;\n      font-weight: 600;\n      color: var(--text-main);\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n\n    .history-header h2 i {\n      color: #4e6ef2;\n    }\n\n    .toggle-history {\n      background: none;\n      border: none;\n      color: var(--text-secondary);\n      cursor: pointer;\n      font-weight: 500;\n      display: flex;\n      align-items: center;\n      gap: 4px;\n      font-size: 0.85rem;\n      transition: color 0.2s ease;\n    }\n\n    .toggle-history:hover {\n      color: #4e6ef2;\n    }\n\n    .history-content {\n      padding: 0 16px;\n      max-height: 0;\n      overflow: hidden;\n      transition: max-height 0.4s ease, padding 0.4s ease;\n    }\n\n    .history-content.expanded {\n      max-height: 60vh;\n      overflow-y: auto;\n      padding: 16px;\n      scrollbar-width: thin;\n      scrollbar-color: #4e6ef2 #f0f0f0;\n    }\n\n    .history-content.expanded::-webkit-scrollbar {\n      width: 6px;\n    }\n\n    .history-content.expanded::-webkit-scrollbar-track {\n      background: #f0f0f0;\n      border-radius: 4px;\n    }\n\n    .history-content.expanded::-webkit-scrollbar-thumb {\n      background: #4e6ef2;\n      border-radius: 4px;\n    }\n\n    .history-content.expanded::-webkit-scrollbar-thumb:hover {\n      background: #3a56d0;\n    }\n\n    .history-item {\n      margin-bottom: 16px;\n      padding-bottom: 16px;\n      border-bottom: 1px dashed var(--border-color);\n    }\n\n    .history-item:last-child {\n      border-bottom: none;\n      margin-bottom: 0;\n      padding-bottom: 0;\n    }\n\n    .history-date {\n      font-weight: 600;\n      color: var(--text-main);\n      margin-bottom: 8px;\n      display: flex;\n      align-items: center;\n      gap: 4px;\n      font-size: 0.9rem;\n      background: rgba(78, 110, 242, 0.05);\n      padding: 6px 10px;\n      border-radius: 6px;\n    }\n\n    .history-text {\n      margin: 8px 0;\n      padding-left: 16px;\n      line-height: 1.4;\n      color: var(--text-secondary);\n      position: relative;\n      font-size: 0.9rem;\n      white-space: pre-wrap;\n      word-break: break-word;\n    }\n\n    .history-text::before {\n      content: '•';\n      position: absolute;\n      left: 0;\n      color: #4e6ef2;\n      font-weight: bold;\n      font-size: 1.2rem;\n      line-height: 1;\n    }\n\n    /* 按钮组 */\n    .button-group {\n      display: flex;\n      flex-direction: column;\n      gap: 10px;\n      margin-bottom: 16px;\n    }\n\n    .button {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 10px;\n      padding: 14px 28px;\n      text-align: center;\n      font-size: 1rem;\n      border: none;\n      border-radius: 12px;\n      text-decoration: none;\n      background: var(--primary-gradient);\n      color: white;\n      font-weight: 600;\n      transition: all 0.3s ease;\n      box-shadow: var(--shadow);\n      position: relative;\n      overflow: hidden;\n      cursor: pointer;\n    }\n\n    .button i {\n      font-size: 1rem;\n    }\n\n    .button::after {\n      content: '';\n      position: absolute;\n      top: -50%;\n      left: -50%;\n      width: 200%;\n      height: 200%;\n      background: rgba(255, 255, 255, 0.1);\n      transform: rotate(30deg);\n      transition: all 0.6s ease;\n      pointer-events: none;\n    }\n\n    .button:hover {\n      transform: translateY(-3px);\n      box-shadow: var(--shadow-hover);\n    }\n\n    .button:hover::after {\n      transform: rotate(30deg) translate(20%, 20%);\n    }\n\n    .button:active {\n      transform: scale(0.95);\n    }\n\n    /* 错误状态 */\n    .error-state {\n      text-align: center;\n      padding: 40px 20px;\n      color: var(--text-main);\n    }\n\n    .error-icon {\n      font-size: 64px;\n      margin-bottom: 20px;\n      color: var(--error-color);\n    }\n\n    .error-text {\n      font-size: 16px;\n      line-height: 1.6;\n      margin-bottom: 20px;\n    }\n\n    .retry-button {\n      background: var(--primary-gradient);\n      color: white;\n      padding: 12px 30px;\n      border-radius: 12px;\n      border: none;\n      font-weight: 600;\n      cursor: pointer;\n      transition: all 0.3s ease;\n      font-size: 14px;\n      box-shadow: var(--shadow);\n    }\n\n    .retry-button:hover {\n      transform: translateY(-2px);\n      box-shadow: var(--shadow-hover);\n    }\n\n    .retry-button:active {\n      transform: scale(0.95);\n    }\n\n    /* 装饰元素 */\n    .decoration {\n      position: absolute;\n      z-index: 0;\n      pointer-events: none;\n    }\n\n    .decoration.circle {\n      width: 120px;\n      height: 120px;\n      border-radius: 50%;\n      background: rgba(107, 45, 216, 0.05);\n      top: 10%;\n      left: 10%;\n    }\n\n    .decoration.square {\n      width: 80px;\n      height: 80px;\n      transform: rotate(45deg);\n      background: rgba(78, 110, 242, 0.05);\n      bottom: 10%;\n      right: 10%;\n    }\n\n    /* 响应式 */\n    @media (max-width: 768px) {\n      body {\n        padding: 12px;\n      }\n\n      .container {\n        max-width: 100%;\n        border-radius: 20px;\n      }\n\n      .header {\n        padding: 20px 15px;\n      }\n\n      .header h1 {\n        font-size: 1.3rem;\n      }\n\n      .header-icon {\n        font-size: 40px;\n      }\n\n      .version-comparison {\n        flex-direction: row;\n        flex-wrap: nowrap;\n        gap: 10px;\n        padding: 12px;\n        margin-top: 6px;\n        overflow-x: auto;\n      }\n\n      .version-card {\n        min-width: 45%;\n        padding: 26px 12px 12px;\n      }\n\n      /* 移动端减弱呼吸动效 */\n      .version-card.latest-version {\n        animation: gradientAnimation 6s ease infinite;\n      }\n\n      .version-status {\n        top: 5px;\n        right: 5px;\n        padding: 2px 5px;\n        font-size: 0.6rem;\n      }\n\n      .version-number {\n        font-size: 1.1rem;\n      }\n\n      .version-card.latest-version .version-number {\n        font-size: 1.2rem;\n      }\n\n      .update-header h2, .history-header h2 {\n        font-size: 0.9rem;\n      }\n\n      .button {\n        padding: 12px 24px;\n        font-size: 0.95rem;\n      }\n\n      .history-content.expanded {\n        max-height: 50vh;\n        -webkit-overflow-scrolling: touch;\n      }\n    }\n\n    @media (max-width: 380px) {\n      .header h1 {\n        font-size: 1.2rem;\n      }\n\n      .version-number {\n        font-size: 1rem;\n      }\n\n      .version-card.latest-version .version-number {\n        font-size: 1.1rem;\n      }\n\n      .button {\n        padding: 11px;\n        font-size: 0.9rem;\n      }\n    }\n  </style>\n</head>\n<body>\n  <div class=\"decoration circle\"></div>\n  <div class=\"decoration square\"></div>\n\n  <div id=\"loading\" class=\"loading-wrapper\">\n    <div class=\"loading-spinner\"></div>\n    <div class=\"loading-text\"><i class=\"fas fa-search\"></i> 正在检查更新...</div>\n  </div>\n\n  <div class=\"container\" id=\"container\">\n    <div class=\"header\">\n      <div class=\"header-icon\"><i class=\"fas fa-book\"></i></div>\n      <h1>晴天书源更新</h1>\n      <p>推荐使用阅读测试版<br>正式版可能存在兼容性问题</p>\n    </div>\n\n    <div class=\"version-comparison\">\n      <div class=\"version-card current-version\">\n        <div class=\"version-status status-outdated\" id=\"currentStatus\">待检查</div>\n        <h3><i class=\"fas fa-cube\"></i> 当前版本</h3>\n        <div class=\"version-number\" id=\"currentVersion\">-</div>\n        <div class=\"version-date\">您的当前版本</div>\n      </div>\n\n      <div class=\"version-indicator update-needed\" id=\"versionIndicator\" style=\"display: none;\">\n        <i class=\"fas fa-arrow-right\"></i>\n      </div>\n\n      <div class=\"version-card latest-version\">\n        <div class=\"version-status status-latest\" id=\"latestStatus\">最新版本</div>\n        <h3><i class=\"fas fa-star\"></i> 最新版本</h3>\n        <div class=\"version-number\" id=\"latestVersion\">-</div>\n        <div class=\"version-date\">可用最新版本</div>\n      </div>\n    </div>\n\n    <div class=\"content-container\">\n      <div class=\"status-alert\" id=\"statusAlert\" style=\"display: none;\"></div>\n\n      <div id=\"latestLogContainer\" style=\"display: none;\">\n        <div class=\"update-container\">\n          <div class=\"update-header\">\n            <h2><i class=\"fas fa-bolt\"></i> 最新更新</h2>\n            <div class=\"update-tag\">最新发布</div>\n          </div>\n          <div class=\"update-content\">\n            <div class=\"update-date\" id=\"latestLogDate\"></div>\n            <div class=\"update-text\" id=\"latestLogContent\"></div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"button-group\" id=\"buttonGroup\" style=\"display: none;\"></div>\n\n      <div class=\"history-container\" id=\"logs\" style=\"display: none;\">\n        <div class=\"history-header\" onclick=\"toggleLogs()\">\n          <h2><i class=\"fas fa-history\"></i> 历史更新 <span id=\"historyCount\"></span></h2>\n          <button class=\"toggle-history\" id=\"toggleButton\">\n            <span id=\"toggleText\">展开历史</span>\n            <i class=\"fas fa-chevron-down\" id=\"toggleIcon\"></i>\n          </button>\n        </div>\n        <div class=\"history-content\" id=\"logList\"></div>\n      </div>\n    </div>\n  </div>\n\n  <script>\n  let logsCollapsed = true;\n\n  function toggleLogs() {\n    logsCollapsed = !logsCollapsed;\n    const logList = document.getElementById('logList');\n    const toggleText = document.getElementById('toggleText');\n    const toggleIcon = document.getElementById('toggleIcon');\n    \n    if (logsCollapsed) {\n      logList.classList.remove('expanded');\n      toggleText.textContent = '展开历史';\n      toggleIcon.className = 'fas fa-chevron-down';\n    } else {\n      logList.classList.add('expanded');\n      toggleText.textContent = '收起历史';\n      toggleIcon.className = 'fas fa-chevron-up';\n    }\n  }\n\n  (async function() {\n    const loading = document.getElementById('loading');\n    const container = document.getElementById('container');\n    const currentVersion = document.getElementById('currentVersion');\n    const latestVersion = document.getElementById('latestVersion');\n    const currentStatus = document.getElementById('currentStatus');\n    const latestStatus = document.getElementById('latestStatus');\n    const versionIndicator = document.getElementById('versionIndicator');\n    const statusAlert = document.getElementById('statusAlert');\n    const buttonGroup = document.getElementById('buttonGroup');\n    const latestLogContainer = document.getElementById('latestLogContainer');\n    const latestLogDate = document.getElementById('latestLogDate');\n    const latestLogContent = document.getElementById('latestLogContent');\n    const logsContainer = document.getElementById('logs');\n    const logList = document.getElementById('logList');\n    const historyCount = document.getElementById('historyCount');\n\n    const localVer = '${String(localVersion)}';\n\n    // 统一的服务器配置 - 方便维护\n    const serverConfig = {\n      main: {\n        name: '主线路',\n        icon: 'rocket',\n        baseUrl: 'https://sy.gyks.cf',\n        downloadPath: '/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup1: {\n        name: '备用线路1',\n        icon: 'box',\n        baseUrl: 'http://v1.gyks.cf',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup2: {\n        name: '备用线路2',\n        icon: 'satellite',\n        baseUrl: 'http://v2.gyks.cf',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup3: {\n        name: '备用线路3',\n        icon: 'link',\n        baseUrl: 'http://v3.gyks.cf',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup4: {\n        name: '备用线路4',\n        icon: 'bolt',\n        baseUrl: 'http://v4.gyks.cf',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup5: {\n        name: '备用线路5',\n        icon: 'globe',\n        baseUrl: 'http://v5.gyks.cf',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      },\n      backup6: {\n        name: '备用线路6',\n        icon: 'broadcast-tower',\n        baseUrl: 'http://101.35.133.34:8888',\n        downloadPath: '/sy/download/%E5%AE%89%E5%8D%93%E9%98%85%E8%AF%BBapp-%E6%99%B4%E5%A4%A9%E8%9E%8D%E5%90%884.0(vip%E5%AE%8C%E5%85%A8%E7%89%88).json'\n      }\n    };\n\n    // 版本比较函数\n    function compareVersions(vs) {\n      const normalize = (v) => {\n        return v.split('.').map(n => {\n          const num = parseInt(n, 10);\n          return isNaN(num) ? 0 : num;\n        });\n      };\n\n      const parts1 = normalize(localVer);\n      const parts2 = normalize(vs);\n      const maxLength = Math.max(parts1.length, parts2.length);\n      \n      for (let i = 0; i < maxLength; i++) {\n        const num1 = parts1[i] || 0;\n        const num2 = parts2[i] || 0;\n        if (num1 > num2) return 1;\n        if (num1 < num2) return -1;\n      }\n      return 0;\n    }\n\n    async function fetchVersionData() {\n      // 使用统一配置中除主线路外的备用线路进行版本检查\n      const serversToCheck = Object.values(serverConfig).filter(s => s.baseUrl.includes('gyks.cf') || s.baseUrl.includes('101.35'));\n      \n      for (const server of serversToCheck) {\n        try {\n          const response = await fetch(server.baseUrl + '/version', { timeout: 2000 });\n          if (response.ok) {\n            return await response.json();\n          }\n        } catch (e) {\n          console.warn(\\`接口失败：\\${server.baseUrl}\\`, e);\n        }\n      }\n      throw new Error('所有更新接口都请求失败');\n    }\n\n    function showError(message) {\n      loading.innerHTML = \\`\n        <div class=\"error-state\">\n          <div class=\"error-icon\"><i class=\"fas fa-exclamation-triangle\"></i></div>\n          <div class=\"error-text\">\\${message}</div>\n          <button class=\"retry-button\" onclick=\"location.reload()\"><i class=\"fas fa-redo\"></i> 重试</button>\n        </div>\n      \\`;\n    }\n\n    try {\n      const data = await fetchVersionData();\n      const cloudVersion = String(data.version3);\n      const updateLog = data.update_log || {};\n\n      // 显示版本信息\n      currentVersion.textContent = \\`v\\${localVer}\\`;\n      latestVersion.textContent = \\`v\\${cloudVersion}\\`;\n\n      // 处理日志\n      const logEntries = Object.entries(updateLog);\n      if (logEntries.length > 0) {\n        // 显示最新日志\n        const [latestDate, latestContent] = logEntries[0];\n        latestLogDate.innerHTML = \\`<i class=\"fas fa-calendar-alt\"></i> \\${latestDate}\\`;\n        latestLogContent.textContent = latestContent;\n        latestLogContainer.style.display = 'block';\n\n        // 显示历史日志\n        if (logEntries.length > 1) {\n          const historyLogs = logEntries.slice(1);\n          historyCount.textContent = \\`(\\${historyLogs.length}条)\\`;\n          logList.innerHTML = historyLogs.map(([date, content]) => \\`\n            <div class=\"history-item\">\n              <div class=\"history-date\">\n                <i class=\"fas fa-calendar-day\"></i>\n                <span>\\${date}</span>\n              </div>\n              <div class=\"history-text\">\\${content}</div>\n            </div>\n          \\`).join('');\n          logsContainer.style.display = 'block';\n        }\n      }\n\n      // 检查更新状态\n      const compareResult = compareVersions(cloudVersion);\n      \n      // 显示版本指示器\n      versionIndicator.style.display = 'flex';\n      \n      if (compareResult === -1) {\n        // 需要更新\n        currentStatus.textContent = '待更新';\n        currentStatus.className = 'version-status status-outdated';\n        versionIndicator.className = 'version-indicator update-needed';\n        versionIndicator.innerHTML = '<i class=\"fas fa-arrow-right\"></i>';\n\n        // 使用统一配置生成下载按钮\n        buttonGroup.innerHTML = Object.values(serverConfig).map(server => {\n          const fullUrl = server.baseUrl + server.downloadPath;\n          return \\`\n            <a href=\"yuedu://booksource/importonline?src=\\${encodeURIComponent(fullUrl)}\" class=\"button\">\n              <i class=\"fas fa-\\${server.icon}\"></i>\n              <span>\\${server.name}</span>\n            </a>\n          \\`;\n        }).join('');\n        buttonGroup.style.display = 'flex';\n      } else {\n        // 已是最新版本\n        currentStatus.textContent = '最新';\n        currentStatus.className = 'version-status status-latest';\n        versionIndicator.className = 'version-indicator is-latest';\n        versionIndicator.innerHTML = '<i class=\"fas fa-check\"></i>';\n        \n        statusAlert.className = 'status-alert up-to-date';\n        statusAlert.innerHTML = '<i class=\"fas fa-check-circle\"></i> <div>您已是最新版本</div>';\n        statusAlert.style.display = 'flex';\n      }\n\n      // 显示主容器，隐藏加载\n      loading.style.display = 'none';\n      container.style.display = 'block';\n\n    } catch (err) {\n      console.error('版本检查失败：', err);\n      showError('<i class=\"fas fa-exclamation-circle\"></i> 检查更新失败，请稍后重试<br><small>' + err.message + '</small>');\n    }\n  })();\n  </script>\n</body>\n</html>\n`;\n    java.startBrowser(`data:text/html;base64,${java.base64Encode(html)}`, '晴天书源更新');\n}",
    "respondTime": 184864,
    "ruleBookInfo": {
      "author": "$.author",
      "canReName": "1",
      "coverUrl": "$.thumb_url",
      "init": "<js>\nif (String(baseUrl).startsWith(\"data:\")) {\n    let res = JSON.parse(java.hexDecodeToString(result));\n    let book_id = res.book_id;\n    let tab = res.tab;\n    let sources = res.sources;\n    let url = res.url;\n    let html = \"\";\n    let proxy = getArguments(source.getVariable(), \"proxy\");\n    if (url != \"\" && proxy == \"本地\") {\n        if (sources == '69书吧') {\n            let ck69 = String(cookie.getCookie('https://www.69shuba.com'));\n            let headers = {\n        \t \"Referer\": url,\n            \"Cookie\": ck69,\n            \"User-Agent\":  java.getWebViewUA()\n             };            \n             let op = JSON.stringify({\n                \"headers\": headers\n            });\n            html = java.ajax(`${url},${op}`);\n        } else {\n            html = java.ajax(url);\n        }\n        //java.log(html);\n        if (html.includes(\"Just a moment...\") && sources == '69书吧') {\n            cookie.removeCookie('https://www.69shuba.com');\n            java.longToast('需要真人验证，请进入任意书籍详情页过验证');\n            html = java.startBrowserAwait(url, \"需要真人验证，请进入任意书籍详情页过验证\").body();\n\n             java.log(html);\n        }\n    }\n    let base_url = getArguments(source.getVariable(), \"server\");\n    let op = {\n        method: \"POST\",\n        body: {\n            html: html\n        }\n    };\n    op = JSON.stringify(op);\n    let varia = String(book.getVariable('custom'));\n    if (varia == 'null') {\n        varia = '';\n    }\n    varia = JSON.stringify({\n        'custom': varia\n    });\n    //varia = java.base64Encode(varia);\n    java.log(`${base_url}/detail?book_id=${book_id}&source=${sources}&tab=${tab}&variable=${varia},${op}`);\n    result = java.ajax(`${base_url}/detail?book_id=${book_id}&source=${sources}&tab=${tab}&variable=${varia},${op}`);\n}\nresult\n</js>$.data",
      "intro": "<js>\nlet {\n    book_id,\n    source: sources,\n    tab,\n    book_tts,\n    tags,\n    role,\n    last_chapter_title,\n    last_chapter_update_time,\n    word_number,\n    status,\n    score,\n    abstract,\n    copyright_info\n} = result;\nlet proxy = getArguments(source.getVariable(), \"proxy\");\nif (proxy == \"本地\") {\n    proxy = \"本地网络\";\n} else {\n    proxy = \"服务器网络\";\n}\njava.put(\"book_detail\", JSON.stringify(result));\nlet base_url = getArguments(source.getVariable(), \"server\");\nlet key = \"\";\ntry {\n    let cookieValue =\n        String(cookie.getCookie(base_url)) || String(java.getCookie(base_url));\n    key = getKey(cookieValue);\n} catch (e) {\n    key = \"\";\n}\n\nif (key == \"\") {\n    java.log(\"当前服务器未查询到登录状态，尝试查询其他服务器登录状态...\");\n    let cookieValue;\n    for (let h of host) {\n        try {\n            cookieValue = String(cookie.getCookie(h)) || String(java.getCookie(h));\n            key = getKey(cookieValue);\n        } catch (e) {\n            key = \"\";\n        }\n        if (key) {\n            java.log(`已在${h}登录，退出查询，正在转移登录状态到当前服务${base_url}`);\n            //java.log(cookieValue)\n            removeCookie(h);\n            removeCookie(base_url);\n            cookie.setCookie(base_url, cookieValue);\n            break;\n        }\n    }\n}\n\nif (book.readConfig == null || book.readConfig.useReplaceRule == null) {\n    book.setUseReplaceRule(false);\n}\n\nlet nickname = '账号状态：⚠️ 未登录 | 点击右上角 🔖 登录';\ntry {\n    let opcx = {\n        method: \"GET\",\n        headers: {\n            cookie: 'qttoken=' + key + ';'\n        },\n    };\n    opcx = JSON.stringify(opcx);\n    let user_info = JSON.parse(java.ajax(base_url + '/get_avatar,' + opcx));\n    if (user_info.code == 0) {\n        if (user_info.nickname) {\n            nickname = '欢迎回来：' + user_info.nickname\n        } else {\n            nickname = '欢迎回来：' + user_info.email + \"(请前往用户后台设置用户名)\"\n        }\n    }\n} catch (e) {\n    if (key) {\n        nickname = '账号状态：已登录'\n    }\n};\n\nlet loginStatus = nickname;\n\nlet lightDivider = \"❇️───────❇️───────❇️\";\nlet heavyDivider = \"&lrm;\\n&lrm;\";\n\nlet isValid = (value) => String(value).length > 1;\nlet ctitle = book.durChapterTitle || '未开始';\nlet info = `\n    📡 当前服务：${base_url}\n    🔑 ${loginStatus}\n    🏷 数据来源：${sources}\n    🔄 当前模式：${tab}\n    ⚙️ 访问模式：${proxy}\n    📖 阅读至：${ctitle}\n`;\n\nif (tab == \"听书\") {\n    //let toneId = getArguments(source.getVariable(), \"tone_id\");\n    let toneId = String(book.getVariable('custom'));\n    if (toneId == '') {\n    \ttoneId= '4';\n    \t}\n    if (isValid(book_tts)) {\n        info += `${lightDivider}\n    🎵 音色配置：${toneId}\n    ✨ AI音色请点击右上角书籍变量填写相关值，真人听书请重新搜索选择带有主播的书籍\n    ${book_tts}\n`;\n    }\n}\n\nlet basicInfo = \"\";\nlet addBasicInfo = (value, prefix, icon) => {\n    if (isValid(value)) basicInfo += `    ${icon} ${prefix} ${value}\\n`;\n};\n\naddBasicInfo(tags, \"书籍分类：\", \"🌈\");\naddBasicInfo(role, \"书籍主角：\", \"👑\");\naddBasicInfo(last_chapter_title, \"最新章节：\", \"📚\");\naddBasicInfo(last_chapter_update_time, \"更新时间：\", \"⏳\");\naddBasicInfo(word_number, \"书籍字数：\", \"📊\");\naddBasicInfo(status, \"书籍状态：\", \"🚩\");\naddBasicInfo(score, \"书籍评分：\", \"⭐\");\n\nif (basicInfo) info += `${lightDivider}\\n${basicInfo}`;\n\nif (isValid(abstract)) {\n    let indentedAbstract = abstract\n        .split(\"\\n\")\n        .map((line) => `    ${line}`)\n        .join(\"\\n\");\n    info += `${heavyDivider}\n    📖 书籍简介：\n${indentedAbstract}\n`;\n} else {\n    info += `${heavyDivider}`;\n}\n\nif (isValid(copyright_info)) {\n    info += `${lightDivider}\n    © ${copyright_info}\n`;\n} else {\n    info += `${lightDivider}`;\n}\n\ninfo += `\n${heavyDivider}\n    💠💠💠 数据更新于 ${new Date().toLocaleString()} 💠💠💠\n`;\nlet jjinfo = getArguments(source.getVariable(), \"info\");\n\nif (jjinfo != \"off\") {\n    info = String(info)\n        .split(\"\\n\")\n        .map((line) => line.replace(/^ {4}/, \"\"))\n        .join(\"\\n\");\n} else {\n    basicInfo = \"\";\n    addBasicInfo(last_chapter_title, \"最新章节：\", \"📚\");\n    addBasicInfo(last_chapter_update_time, \"更新时间：\", \"⏳\");\n    addBasicInfo(word_number, \"书籍字数：\", \"📊\");\n    addBasicInfo(status, \"书籍状态：\", \"🚩\");\n    addBasicInfo(score, \"书籍评分：\", \"⭐\");\n    if (isValid(abstract)) {\n        let indentedAbstract = abstract\n            .split(\"\\n\")\n            .map((line) => `    ${line}`)\n            .join(\"\\n\");\n        basicInfo += `\n    \\n&lrm;\n    📖 书籍简介：\n${indentedAbstract}\n`;\n    } else {\n        basicInfo += `${heavyDivider}`;\n    }\n    info = `&lrm;\\n🏷 数据来源：${sources}\\n` + basicInfo;\n}\n</js>",
      "lastChapter": "{{$.source}} {{$.last_chapter_title}} {{$.last_chapter_update_time}}",
      "name": "$.book_name",
      "tocUrl": "<js>\nlet book_id = result.book_id;\nlet sources = result.source;\nlet tab = result.tab || \"小说\";\nlet url = result.toc_url || \"\";\nvar sdtoken;\ntry {\n    var loginInfoMap = source.getLoginInfoMap ? source.getLoginInfoMap() : {};\n    sdtoken = String(loginInfoMap['手动填写番茄token(可不填)'] || '');\n} catch (e) {\n    sdtoken = '';\n}\nvar rawCookie = getFanqieCookie() || sdtoken;\nvar match = rawCookie.match(/sessionid=[^;]+/);\nvar fqcookie = match ? match[0] : '';\nvar fqssionid = '';\nif (fqcookie) {\n    fqssionid = getSessionId(fqcookie);\n};\nsetArguments('fqssionid', fqssionid);\njava.put(\"tab\", tab);\njava.put(\"book_id\", book_id);\nlet qtcatalog = {\n    book_id: book_id,\n    sources: sources,\n    tab: tab,\n    url: url,\n};\nqtcatalog = java.base64Encode(JSON.stringify(qtcatalog));\n`data:;base64,${qtcatalog},{\"type\":\"qingtian2\"}`;\n</js>",
      "wordCount": "$.word_number"
    },
    "ruleContent": {
      "content": "<js>\njava.log(result)\nresult = String(java.hexDecodeToString(result));\nlet res;\nif (result.match(/晴天融合/)) {\n    result = result.split(\"晴天融合4\");\n    res = {\n        item_id: result[0],\n        tab: result[1],\n        title: result[2],\n        sources: result[3],\n        url: \"\"\n    };\n} else {\n    res = JSON.parse(result);\n}\nlet varia = String(book.getVariable('custom'));\nif (varia == 'null') {\n    varia = '';\n}\nvaria = JSON.stringify({\n    'custom': varia\n});\n//  varia = java.base64Encode(varia);\nlet book_id = res.book_id;\nlet item_id = res.item_id;\nlet tab = res.tab;\nlet title = res.title;\nlet sources = res.sources;\nlet url = res.url;\nlet html = \"\";\nlet proxy = getArguments(source.getVariable(), \"proxy\");\nif (url != \"\" && proxy == \"本地\") {\n    if (sources == '69书吧') {\n        let ck69 = String(cookie.getCookie('https://www.69shuba.com'));\n        let headers = {\n            \"Referer\": url,\n            \"Cookie\": ck69,\n            \"User-Agent\": java.getWebViewUA()\n        };\n        let op = JSON.stringify({\n            \"headers\": headers\n        });\n        java.log(url);\n        java.log(op);\n        html = java.ajax(`${url},${op}`);\n    } else {\n        html = java.ajax(url);\n    }\n    java.log('dddddddddddddddddddddddddddd')\n    java.log(html);\n    if (html.includes(\"Just a moment...\") && sources == '69书吧' && book.durChapterIndex === chapter.index) {\n        cookie.removeCookie('https://www.69shuba.com');\n        java.longToast('需要真人验证，请进入任意书籍详情页过验证');\n        html = java.startBrowserAwait(url, \"需要真人验证，请进入任意书籍详情页过验证\").body();\n        java.log('cscscscs')\n        java.log(html);\n    }\n};\nlet content = \"\";\nlet data;\n//let tone_id = getArguments(source.getVariable(), \"tone_id\");\nlet tone_id = varia;\nif (tone_id == '') {\n    tone_id = '4';\n}\nlet base_url = getArguments(source.getVariable(), \"server\");\nlet fqpara = getArguments(source.getVariable(), \"fqpara\");\nlet device, device_type;\ntry {\n    device = java.deviceID();\n    device_type = \"苹果\";\n} catch (e) {\n    try {\n        device = java.androidId();\n        device_type = \"安卓\";\n    } catch (e) {\n        device = \"\";\n        device_type = \"安卓\";\n    }\n}\n\nlet qtcookie = cookie.getCookie(base_url);\ntry {\n    qtcookie = `qttoken=${String(cookie.getKey(base_url, \"qttoken\"))}; deviceId=${device};`\n} catch (e) {}\n\nvar params = {\n    html: html,\n    item_id: item_id,\n    source: sources,\n    tab: tab,\n    tone_id: tone_id,\n    variable: varia,\n    version: '4.11.5.1'\n};\n\nvar content_url = '/content';\nif ((sources == \"番茄\" || sources == \"七猫\" || sources == \"塔读\") && fqpara && tab == \"小说\") {\n    content_url = '/content?review=1';\n}\n\n//var signInfo = generateComplexSignature('POST', content_url, {}, APP_SECRET, params);\n\n\n//var signedParams = copyObject(params);\n//signedParams.timestamp = signInfo.timestamp;\n//signedParams.nonce = signInfo.nonce;\n//signedParams.sign = signInfo.sign;\n\n\nvar op = {\n    method: \"POST\",\n    body: JSON.stringify(params),\n    headers: {\n        cookie: qtcookie,\n        'Content-Type': 'application/json'\n    }\n};\n\nop = JSON.stringify(op);\njava.log(op);\ndata = java.ajax(base_url + content_url + `,${op}`);\ntry {\n    data = JSON.parse(data);\n    if (data.msg) {\n        java.toast(data.msg);\n    }\n} catch (e) {}\ncontent = data.content\nif ((sources == \"番茄\" || sources == \"七猫\" || sources == \"塔读\") && fqpara == \"on\" && tab == \"小说\") {\n    var sdtoken;\n    try {\n        var loginInfoMap = source.getLoginInfoMap ? source.getLoginInfoMap() : {};\n        sdtoken = String(loginInfoMap['手动填写番茄token(可不填)'] || '');\n    } catch (e) {\n        sdtoken = '';\n    }\n    var rawCookie = getFanqieCookie() || sdtoken;\n    var match = rawCookie.match(/sessionid=[^;]+/);\n    var fqcookie = match ? match[0] : '';\n    var fqssionid = '';\n    if (!fqcookie) {} else {\n        fqssionid = getSessionId(fqcookie)\n    }\n    content = content\n        .replace(/ident=\"/g, 'ident=\"' + base_url)\n        .replace(/book_id=/g, 'book_id=' + book_id + '&ssionid=' + fqssionid);\n    if (device_type == \"苹果\") {\n        content = paraForiOS(content, sources);\n    } else {\n        content = paraForAndroid(content, sources);\n    }\n}\ndata = JSON.stringify({\n    content: content,\n});\nif (device_type == \"安卓\" && (tab == \"短剧\" || tab == \"视频\" || sources == '毒舌影视')) {\n    data = {\n        content: `【右上角刷新】开启播放(下一集请切换下一章刷新)\\n播放直链：\\n${content}`,\n    };\n    data = JSON.stringify(data);\n    if (book.durChapterIndex === chapter.index) {\n        let video_url = `${base_url}/online_video?book_id=${book_id}&source=${sources}&tab=${tab}`;\n        if (sources == '毒舌影视') {\n            video_url = content;\n        };\n        java.startBrowser(video_url, title);\n        java.toast(\"正在加载视频...\");\n    }\n\n}\ndata;\n</js>$.content",
      "imageStyle": "TEXT"
    },
    "ruleExplore": {
      "author": "$.author",
      "bookList": "$.data",
      "bookUrl": "<js>\nlet book_id = result.book_id;\nlet sources = result.source;\nlet tab = result.tab || '小说';\nlet url = result.toc_url || '';\n\nlet qtdetail = {\n    book_id: book_id,\n    sources: sources,\n    tab: tab,\n    url: url\n}\nqtdetail = java.base64Encode(JSON.stringify(qtdetail));\n`data:;base64,${qtdetail},{\"type\":\"qingtian\"}`\n</js>",
      "coverUrl": "$.thumb_url",
      "intro": "$.abstract",
      "kind": "{{$.category}}\n{{$.score}}\n{{$.status}}\n{{$.source}}\n{{$.tags}}",
      "lastChapter": "{{$.last_chapter_title}} • {{$.last_update_time}}",
      "name": "$.book_name",
      "wordCount": "$.word_number"
    },
    "ruleSearch": {
      "author": "$.author",
      "bookList": "$.data",
      "bookUrl": "<js>\nlet book_id = result.book_id;\nlet sources = result.source;\nlet tab = result.tab || '小说';\nlet url = result.toc_url || '';\n\nlet qtdetail = {\n    book_id: book_id,\n    sources: sources,\n    tab: tab,\n    url: url\n}\nqtdetail = java.base64Encode(JSON.stringify(qtdetail));\n`data:;base64,${qtdetail},{\"type\":\"qingtian\"}`\n</js>",
      "checkKeyWord": "我的26岁女房客@番茄",
      "coverUrl": "$.thumb_url",
      "intro": "$.abstract",
      "kind": "{{$.status}},{{$.score}},{{$.tags}},{{$.last_chapter_update_time}}",
      "lastChapter": "{{$.source}} {{$.last_chapter_title}}",
      "name": "$.book_name##（别名：.*?）",
      "wordCount": "$.word_number"
    },
    "ruleToc": {
      "chapterList": "<js>\nlet res = JSON.parse(java.hexDecodeToString(result));\nif (res.method) {\n    res = Object.fromEntries(\n        res.body\n        .replace(\"source\", \"sources\")\n        .split(\"&\")\n        .map((query) => query.split(\"=\"))\n    );\n    res.url = \"\";\n}\nlet book_id = res.book_id;\njava.put('book_id', book_id);\nlet tab = res.tab;\nlet sources = res.sources;\nlet url = res.url;\nlet html = \"\";\nlet proxy = getArguments(source.getVariable(), \"proxy\");\nif (url != \"\" && proxy == \"本地\") {\n    if (sources == '69书吧') {\n        let ck69 = String(cookie.getCookie('https://www.69shuba.com'));\n        let headers = {\n        \t \"Referer\": url,\n            \"Cookie\": ck69,\n            \"User-Agent\":  java.getWebViewUA()\n             };\n        let op = JSON.stringify({\n            \"headers\": headers\n        });\n        html = java.ajax(`${url},${op}`);    \n    } else {\n        html = java.ajax(url);\n    }\n    //java.log(html);\n    if (html.includes(\"Just a moment...\") && sources == '69书吧') {\n        cookie.removeCookie('https://www.69shuba.com');\n        java.longToast('需要真人验证，请进入任意书籍详情页过验证');\n        html = java.startBrowserAwait(url, \"需要真人验证，请进入任意书籍详情页过验证\").body();\n\n           java.log(html);\n    }\n};\nlet base_url = getArguments(source.getVariable(), \"server\");\nlet op = {\n    method: \"POST\",\n    body: {\n        html: html\n    }\n};\nop = JSON.stringify(op);\nlet varia = String(book.getVariable('custom'));\nif (varia == 'null') {\n    varia = '';\n}\nvaria = JSON.stringify({\n    'custom': varia\n});\n// varia = java.base64Encode(varia);\n//java.log(`${base_url}/catalog?book_id=${book_id}&source=${sources}&tab=${tab}&variable=${varia},${op}`);\nlet data = java.ajax(\n    `${base_url}/catalog?book_id=${book_id}&source=${sources}&tab=${tab}&variable=${varia},${op}`\n);\nlet device, device_type;\ntry {\n    device = java.deviceID();\n    device_type = \"苹果\";\n} catch (e) {\n    try {\n        device = java.androidId();\n        device_type = \"安卓\";\n    } catch (e) {\n        device = \"\";\n        device_type = \"安卓\";\n    }\n}\n\nif (tab == \"小说\") {\n    if (device_type == \"安卓\") {\n        book.type = 8;\n    } else {\n        book.type = 0;\n    }\n} else if (tab == \"听书\") {\n    if (device_type == \"安卓\") {\n        book.type = 32;\n    } else {\n        book.type = 1;\n    }\n} else if (tab == \"漫画\") {\n    if (device_type == \"安卓\") {\n        book.type = 64;\n    } else {\n        book.type = 2;\n    }\n} else if (tab == \"短剧\") {\n    if (device_type == \"安卓\") {\n        book.type = 8;\n    } else {\n        book.type = 3;\n    }\n} else {\n    if (device_type == \"安卓\") {\n        book.type = 8;\n    } else {\n        book.type = 0;\n    }\n}\nlet qtcookie = cookie.getCookie(base_url);\nlet reading = getArguments(source.getVariable(), \"reading\");\n\nif (book && book.order != 0 && reading == '1') {\n    try {\n        if (!data || !book.variable || !base_url || !qtcookie) {\n            java.log('缺少必要参数');\n        } else {\n            let parsedData;\n            try {\n                parsedData = JSON.parse(data);\n            } catch (e) {\n                java.log('解析data数据失败:' + e);\n            }\n            \n            if (parsedData && parsedData.data && Array.isArray(parsedData.data) && parsedData.data[book.durChapterIndex]) {\n                let ritem = parsedData.data[book.durChapterIndex];\n                let bookInfoObj;\n                try {\n                    bookInfoObj = JSON.parse(book.variable);\n                } catch (e) {\n                    java.log('解析book.variable失败:' + e);\n                }\n                \n                if (bookInfoObj) {\n                    let book_info;\n                    try {\n                        book_info = JSON.parse(bookInfoObj.book_detail || JSON.stringify(bookInfoObj));\n                    } catch (e) {\n                        java.log('解析book_detail失败:' + e);\n                    }\n                    \n                    if (book_info && typeof book_info === 'object') {\n                        let rurl = base_url + '/add_book_to_book_shelf,';\n                        book_info['read_status'] = 1;\n                        book_info['last_chapter_item_id'] = ritem.item_id || '';\n                        book_info['last_chapter_title'] = ritem.title || '';\n                        let rop = {\n                            method: \"POST\",\n                            headers: {\n                                cookie: qtcookie\n                            },\n                            body: book_info\n                        };\n                        let check_book_url = base_url + '/check_book_in_book_shelf,';\n                        let checkResponse;\n                        \n                        try {\n                            checkResponse = java.ajax(check_book_url + JSON.stringify(rop));\n                        } catch (e) {\n                            java.log('检查书籍请求失败:' + e);\n                        }\n                        \n                        if (checkResponse) {\n                            let check_data;\n                            try {\n                                check_data = JSON.parse(checkResponse).data;\n                            } catch (e) {\n                                java.log('解析检查响应失败:' + e);\n                            }\n                            try {\n                                if (check_data && check_data.id) {\n                                    book_info['id'] = check_data.id;\n                                    let uurl = base_url + '/update_book_shelf,';\n                                    java.ajax(uurl + JSON.stringify(rop));\n                                } else {\n                                    java.ajax(rurl + JSON.stringify(rop));\n                                }\n                            } catch (e) {\n                                java.log('书架操作失败:' + e);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    } catch (error) {\n        java.log('书籍同步流程异常:' + error);\n        java.longToast('\\n同步阅读进度失败，但不影响阅读，可以前往登录关闭书架同步功能。');\n    }\n}\ndata;\n</js>$.data",
      "chapterName": "$.title",
      "chapterUrl": "<js>\nlet tab = result.tab;\nlet sources = result.source;\nlet title = result.title;\nlet item_id = result.item_id;\nlet book_id = java.get(\"book_id\");\nlet url = result.toc_url || \"\";\nlet qtcontent = {\n    book_id: book_id,\n    item_id: item_id,\n    title: title,\n    sources: sources,\n    tab: tab,\n    url: url,\n};\nqtcontent = java.base64Encode(JSON.stringify(qtcontent));\nif (sources == '卷') {\n    content_url = item_id\n} else if ((sources == \"番茄\" || sources == \"七猫\" || sources == \"塔读\") && tab == \"小说\") {\n    var base_url = getArguments(source.getVariable(), \"server\") || \"\";\n    var sdtoken;\n    try {\n        var loginInfoMap = source.getLoginInfoMap ? source.getLoginInfoMap() : {};\n        sdtoken = String(loginInfoMap['手动填写番茄token(可不填)'] || '');\n    } catch (e) {\n        sdtoken = '';\n    }\n    var rawCookie = getFanqieCookie() || sdtoken;\n    var match = rawCookie.match(/sessionid=[^;]+/);\n    var fqcookie = match ? match[0] : '';\n    var fqssionid = '';\n    if (!fqcookie) {} else {\n        fqssionid = getSessionId(fqcookie)\n    }\n    let sourcess = sources.replace('svip_', '');\n    content_url = `data:;base64,${qtcontent},{\"type\":\"qingtian3\",\"js\":\"book ? result : '${base_url}/get_review?book_id=${book_id}&item_id=${item_id}&ssionid=${fqssionid}&source=${sourcess}'\"}`;\n} else {\n    content_url = `data:;base64,${qtcontent},{\"type\":\"qingtian3\"}`;\n}\n</js>",
      "updateTime": "$.first_pass_time"
    },
    "searchUrl": "<js>\nlet base_url = getArguments(source.getVariable(), 'server');\nlet media;\nlet sources = getArguments(source.getVariable(), 'sources') || getArguments(source.getVariable(), 'source');\nlet disabled_sources = getArguments(source.getVariable(), 'disabled_sources') || '0';\nif (String(key).startsWith(\"m:\") || String(key).startsWith(\"m：\")) {\n    media = \"漫画\"\n    key = key.slice(2)\n} else if (String(key).startsWith(\"t:\") || String(key).startsWith(\"t：\")) {\n    media = \"听书\"\n    key = key.slice(2)\n} else if (String(key).startsWith(\"d:\") || String(key).startsWith(\"d：\")) {\n    media = \"短剧\"\n    key = key.slice(2)\n} else if (String(key).startsWith(\"x:\") || String(key).startsWith(\"x：\")) {\n    media = \"小说\"\n    key = key.slice(2)\n} else {\n    media = getArguments(source.getVariable(), 'tab') || getArguments(source.getVariable(), 'media');\n}\nif (key.includes('@')) {\n    var parts = key.split('@');\n    key = parts[0];\n    sources = parts[1] || sources;\n}\nlet qtcookie = cookie.getCookie(base_url);\nlet op = {\n    method: \"GET\",\n    headers: {\n        cookie: qtcookie\n    },\n};\nop = JSON.stringify(op);\n`${base_url}/search?title=${key}&tab=${media}&source=${sources}&page={{page}}&disabled_sources=${disabled_sources},${op}`\n</js>",
    "weight": 0
  },
  {
    "bookSourceComment": "仅支持洛雅橙改版阅读最新测试版3.26.022606及以上版本 https://github.com/Luoyacheng/legado \n不知道干嘛，做着玩的，可以配合订阅源打开这个订阅源管理器，这样隐藏订阅也可以打开订阅了，初次使用要配合web服务拉取。",
    "bookSourceGroup": "搜索链接规则为空,发现规则为空",
    "bookSourceName": "订阅源",
    "bookSourceType": 0,
    "bookSourceUrl": "订阅源",
    "customButton": false,
    "customOrder": 10,
    "enabled": false,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "@js:\ntry{\nlet all = [];\nlet 展开符 = \"↓\";\nlet 收起符 = \"↑\";\nlet rssData = JSON.parse(String(source.getVariable()) || \"{}\");\n\n//一行个数\nlet num = 3;\nlet d = {\n    1: 1,\n    2: 0.4,\n    3: 0.25,\n    4: 0.2,\n    5: 0.15,\n    7: 0.1,\n    10: 0.05\n};\n\nlet push = (title, url, num, g,action) =>{\n    num = Number(num ?? 3);\n    if(num!=0){\n        num = num<1?num:d[num];\n    }\n\tlet j = {\n    title: title,\n    url: url,\n    style: {\n        layout_flexGrow: g == 0 ? g : 1,\n        layout_flexBasisPercent: num                           \n    }\n  }\n  if(num===0){\n      delete j.style.layout_flexBasisPercent\n  }\n     if(action){\n         j.action = action.action;\n         j.name = action.name;\n         j.type = action.type;\n         j.chars = action.chars;\n         j.viewName = action.viewName;\n         j.default = action.default;      \n         j.style.layout_justifySelf = action.style;\n         j.style.layout_wrapBefore = action.wrap;\n     }  \n     all.push(j)\t\n} \n\nlet rssUrl = infoMap[\"rssUrl\"];\n\n\npush(\"订阅源管理器\",\"\",1,1,{\n    type:\"button\",\n    action:`checkRss()`\n});\n\npush(\"url\",\"\",0.7,1,{\n    type:\"text\",\n    viewName:\"'网络导入链接'\",\n    action:\"java.refreshExplore();\",\n    default: \"\"\n});\n\npush(\"导入\",\"\",0.2,1,{\n    type:\"button\",\n    action:`getSource(\"${infoMap['url']}\");`\n});\n\npush(\"rssUrl\",\"\",0.7,1,{\n    type:\"text\",\n    viewName:\"'请打开web服务，输入web服务地址'\",\n    default:rssData.rssUrl ?? \"\"\n});\n\npush(\"ok\",\"\",0.2,1,{\n    type:\"button\",\n    viewName:\"'拉取'\",\n    action:`getRssSource(\"${rssUrl}\");`\n});\n\nlet groups = rssData.groups ?? [];\nlet webs = rssData.webs ?? [];\ngroups.forEach(x=>{\n    push(\"📁\"+x.name,\"\",1,1,{\n        \"type\": \"toggle\",\n        \"chars\": [展开符, 收起符],\n        \"action\":\"source.refreshExplore();java.refreshExplore();\",\n        \"default\": infoMap[\"📁\"+x.name] || 展开符\n     });\n     \n     let findwebs = webs.filter(web => \n    web.group?.some(item => item === x.id)\n);\n\n\nif(String(infoMap[\"📁\"+x.name]) === 展开符 || !infoMap[\"📁\"+x.name]){\n     if(x.id===\"-2\")findwebs=webs;\n     findwebs.forEach(web=>{\n         let url = JSON.stringify(web.url);\n         if(web.url !== \"订阅源管理器\"){\n             push(web.name.trim(),\"\",0,1,{\n                 type:\"button\",\n                 \"action\":`java.open(\"rss\",null,null,${url})`\n              });\n        }\n     })\n}\n});\n\ninfoMap.save();\nJSON.stringify(all)\n\n}catch(e){\n    java.toast(\"出错\")\n}",
    "jsLib": "function checkRss(){\n\tconst {cache,java} = this;\n\tjava.open(\"rss\",null,null,\"订阅源管理器\");\n\tPackages.java.lang.Thread.sleep(1500);\n  if(!cache.get(\"rssset\")){\n            let u = `legado://import/rssSource?src=http://www.yckceo.com/yuedu/rss/json/id/708.json`;\n            java.openUrl(u)\n      }\n}\n\n\nfunction getSource(url){\n\tconst {java} = this;\n\turl = \"legado://import?src=\"+encodeURIComponent(url);\n\tjava.openUrl(url)\n\t}\n\nfunction getRssSource(rssUrl){\n\tconst {java,source} = this;\n    try{\n\tlet url = rssUrl+\"/getRssSources\";\n\tlet rssData = JSON.parse(java.ajax(url)).data;\n\tlet data = {};\n\tlet webs = [];\n\tlet groups = [];\n\trssData.forEach(x=>{\n  \t\tlet web = {};\n          let index = x.name;\n          let r = x;\n          web.name = r.sourceName.replace(/\\n/g,'');\n          web.url = r.sourceUrl;\n          web.group = (r.sourceGroup?r.sourceGroup.split(\",\"):\"\") || [\"-1\"]\n          \n          web.group.forEach(groupItem => {\n              if (!groups.some(group => group.id === groupItem)) {\n                  groups.push({\n                      id: groupItem,\n                      s: 1,\n                      name: groupItem!==\"-1\"?groupItem:\"未分组\"\n                     });\n                 }\n           });\n        webs.push(web);\n    });\n        if(!groups.find(x=>x.id===\"-1\"))\n        groups.push({id:\"-1\",name:\"未分组\",s:1});\n        groups.push({id:\"-2\",name:\"全部\",s:1})\n        data.webs = webs;\n        data.groups = groups;\n        data.rssUrl = rssUrl;\n        source.putVariable(JSON.stringify(data));\n        java.refreshExplore();\n        }catch(e){\n            java.log(e)\n        }\n}",
    "lastUpdateTime": 1772162637043,
    "respondTime": 4,
    "weight": 0
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "自定义",
    "bookSourceName": "瀚海书阁",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.txtdd.top",
    "bookUrlPattern": "\\/novel\\/[0-9]+\\.html",
    "customButton": false,
    "customOrder": 12,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": false,
    "eventListener": false,
    "lastUpdateTime": 1772491176767,
    "loginUi": "",
    "loginUrl": "",
    "respondTime": 5793,
    "ruleBookInfo": {
      "author": "class.hover:text-primary.0@text",
      "coverUrl": "class.w-32 h-44 object-cover rounded-md shadow-md@src\n<js>\n\"https://www.txtdd.top\"+result;\n</js>",
      "init": "",
      "intro": "class.text-gray-700 dark:text-gray-300 leading-relaxed@text",
      "kind": "class.hover:text-primary.1@text",
      "name": "h1@text",
      "wordCount": "tag.span.2@text"
    },
    "ruleContent": {
      "content": "class.read-content j_readContent@html",
      "title": "class.j_chapterName@text"
    },
    "ruleExplore": {
      "bookList": ""
    },
    "ruleSearch": {
      "author": "tag.p.0@text",
      "bookList": "@css:div.bg-light-secondary.rounded-lg.overflow-hidden.shadow-sm.flex",
      "bookUrl": "tag.div.bg-light-secondary@onclick\n<js>\nvar url=result;\nurl=url.replace(\"window.open('\",'');\nurl=url.replace(\"', '_blank')\",\"\")\nurl;\n</js>",
      "coverUrl": "tag.img@src",
      "intro": "tag.p.1@text",
      "kind": "tag.span.0@text",
      "name": "tag.h3@text",
      "wordCount": "tag.span.3@text"
    },
    "ruleToc": {
      "chapterList": "id.chapter-list@a",
      "chapterName": "a@text",
      "chapterUrl": "a@href\n<js>\n\"https://www.txtdd.top\"+result;\n</js>",
      "nextTocUrl": "text.下页@href"
    },
    "searchUrl": "https://www.txtdd.top/search.html?keyword={{key}}&page={{page}}",
    "weight": 0
  },
  {
    "bookSourceComment": "备用网址：\nhttp://ifdian.net\nhttps://afdian.com\nhttps://afdian.net\n\n◎登录直接点登录，填账号密码，不要改登录规则里的东西，阅读升级最新版\n◎网站只能搜作者",
    "bookSourceGroup": "登录UI",
    "bookSourceName": "爱发电（导入前请备份好自己的发现规则，登录直接点登录，填账号密码，不要改登录规则里的东西，阅读升级最新版，网站只能搜作者）",
    "bookSourceType": 0,
    "bookSourceUrl": "http://ifdian.net",
    "customButton": false,
    "customOrder": 14,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "兽屋之龙的作品集::/api/user/get-album-list?user_id=63609ee2d7e211eabceb52540025c377&page={{page}}\n21点牌的作品集::/api/user/get-album-list?user_id=23993afe491211ee9d985254001e7c00&page={{page}}\n【防弹bts】关我西红柿⚡请多多催更！的作品集::/api/user/get-album-list?user_id=577c5de2090911ecbce152540025c377&page={{page}}",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\"\n}",
    "lastUpdateTime": 1773638123623,
    "loginUi": "[\n  {\n    \"name\": \"手机号码/邮箱号\",\n    \"type\": \"text\"\n  },\n  {\n    \"name\": \"密码\",\n    \"type\": \"password\"\n  }\n]",
    "loginUrl": "<js>\nfunction login(){\nuserInfo=source.getLoginInfoMap()\njava.log(userInfo)\nUNE=userInfo['手机号码/邮箱号']\nPWD=userInfo['密码']\nurl=\"{{source.getKey()}}/api/passport/login,\";\nSU=source.getKey()\nbody={\n  \"account\": String(UNE),\n  \"password\": String(PWD),\n  \"mp_token\": -1\n}\noption={\n'method': 'POST',\n'body': JSON.stringify(body)\n}\n\nurl=url+JSON.stringify(option)\ntoken=java.ajax(url).match(/\"auth_token\":\"([^\"]+)\"/)[1]\n\nCookie={\n\t\"Cookie\":\"auth_token=\"+token\n\t}\nheader = JSON.stringify(Cookie)\nsource.putLoginHeader(header)\n}\n</js>",
    "respondTime": 848,
    "ruleBookInfo": {
      "author": "$.data.album.user.name",
      "coverUrl": "$.data.album.cover",
      "intro": "$..content",
      "name": "$.data.album.title",
      "tocUrl": "<js>\nif(baseUrl.match(/get-album-info/)){\n\tjson=JSON.parse(result);\turl=\"/api/user/get-album-catalog?album_id=\"+json.data.album.album_id\n\t}\n</js>"
    },
    "ruleContent": {
      "content": "<js>\nif(baseUrl.match(/album-info/)){\n\t\n\tif(book.durChapterIndex === chapter.index){\n\t\turl = \"legado://import/addToBookshelf?src=\"+baseUrl;\n\t\tscript = `data:text/html;charset=utf-8,\n\t\t<html>\n\t\t<title>《${title}》加入书架</title>\n\t\t<p style=\"font-size:60px\"><img src=\"${JSON.parse(result).data.album.cover}\" style=\"max-width: 300px; max-height: 400px\">\n\t\t\n\t\t简介：${JSON.parse(result).data.album.content}</p>\n\t\t<p style=\"text-align: center;\"><a href=\"${url}\" style=\"font-size:50px;\">跳转加入书架</a></p>\n\t\t\n\t\t</html>\n\t\t<script>\n        window.onload = function () {\n            window.location.href = '${url}';\n        };\n    </script>`;\n\t\tjava.startBrowser(script,\"《\"+book.title+\"》\")\n\t\t\n\t\t}\n\t\ntext=\"❗️刷新本章节，跳转本书详情页\\n\"+'简介：'+JSON.parse(result).data.album.content+\"\\n\"+'<img src=\"'+JSON.parse(result).data.album.cover+'\">'\n}else if(baseUrl.match(/post_id/)){\n\tjson=JSON.parse(result)\n\tpics=json.data.post.pics;\n\tvideo=json.data.post.video?\"视频链接：\"+json.data.post.video:\"\"\n\tpreview_text=json.data.post.preview_text?json.data.post.preview_text:\"\"\n\timgs=\"\";\n\tfor(i in pics){\n\t\timgs+='<img src=\"'+pics[i]+'\">\\n'\n\t\t}\n\tresult=json.data.post.content+imgs+video;\n\tresult!=\"\"?result:preview_text+\"\\n💰\"+json.data.post.min_price+\"\\n\"+json.data.post.has_right_errMsg\n\t}else{\n\t\tresult=\"↓↓复制下面文字，编辑书源，添加至发现规则↓↓\\n\"+book.name+\"的作品集::\"+baseUrl.replace(/page=1/,'page={\\{page}}').replace(/https?:\\/\\/.+?\\//,'/');\n\t\t}\n</js>\n##class=\"fr-fic fr-dib\".*?\"\\[object Object\\]\"",
      "imageStyle": "FULL"
    },
    "ruleExplore": {
      "bookList": "$.data.list",
      "bookUrl": "/api/user/get-album-info?album_id={{$.album_id}}",
      "coverUrl": "$.cover",
      "intro": "$.content",
      "lastChapter": "$.update_time\n<js>\njava.timeFormat(result+\"000\")\n</js>",
      "name": "$.title"
    },
    "ruleSearch": {
      "bookList": "$.data.list",
      "bookUrl": "/api/user/get-album-list?user_id={{$.creator.user_id}}&page=1",
      "checkKeyWord": "沙雕",
      "coverUrl": "$.cover",
      "intro": "$.creator.detail",
      "kind": "$..category.name",
      "name": "$.name"
    },
    "ruleToc": {
      "chapterList": "$.data.list\n<js>\nif(baseUrl.match(/get-album-list/)){\nresult=String(result).replace(/\\[/,'[{\"text\":\"'+book.name+'\",\"url\":\"'+baseUrl+'\"},')\n}\nresult\n</js>\n$.[*]",
      "chapterName": "$.title||$.text",
      "chapterUrl": "<js>\nif(baseUrl.match(/get-album-list/)){\nresult=\"{{$.album_id}}\"?\"/api/user/get-album-info?album_id={{$.album_id}}\":\"{{$.url}}\";\n}else if(baseUrl.match(/get-album-catalog/)){\tresult=\"/api/post/get-detail?post_id={{$.post_id}}&album_id={{$.album_ids[0]}}\"\n\t}\n</js>",
      "updateTime": "{{$.content_length}}字 💰{{$.min_price}} 目录总数：{{$.post_count}}\n<js>\ntime=\"{{$.publish_time}}\"?java.timeFormat(\"{{$.publish_time}}000\"):\"\"\nresult=time+\" \"+result\n</js>\n##💰0\\.00| 字 💰| 目录总数：$"
    },
    "searchUrl": "/api/creator/list?page={{page}}&type=hot&category_id=&q={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "99盗版书源",
    "bookSourceGroup": "盗版",
    "bookSourceName": "99书吧",
    "bookSourceType": 0,
    "bookSourceUrl": "https://99shuba.feelingapi.com/",
    "customButton": false,
    "customOrder": 15,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": false,
    "eventListener": false,
    "lastUpdateTime": 1774851934827,
    "respondTime": 2929,
    "ruleBookInfo": {
      "author": "authorName",
      "coverUrl": "https://bookcover.yuewen.com/qdbimg/349573/{{$.bookId}}/180.webp",
      "init": "data.bookInfo",
      "intro": "desc",
      "kind": "chanName",
      "lastChapter": "updChapterName",
      "name": "bookName",
      "tocUrl": "/catalog?bookid={{$.bookId}}",
      "wordCount": "{{$.wordsCnt}}字"
    },
    "ruleContent": {
      "content": "content"
    },
    "ruleSearch": {
      "author": "author",
      "bookList": "[*]",
      "bookUrl": "/detail?bookid={{$.bid}}",
      "coverUrl": "cover",
      "intro": "summary",
      "kind": "category",
      "name": "name",
      "wordCount": "{{$.words}}字"
    },
    "ruleToc": {
      "chapterList": "chapters[*]",
      "chapterName": "chapterName",
      "chapterUrl": "/content?bookId={{$.bid}}&chapterId={{$.cid}}&time={{$.updateTime}}",
      "updateTime": "{{$.updateTime}}丨{{$.words}}字"
    },
    "searchUrl": "/search?keyword={{key}}&page={{page}}",
    "weight": 0
  },
  {
    "bookSourceComment": "完全保留原书源核心规则，移除所有广告净化内容，仅保留基础正文抓取",
    "bookSourceGroup": "免费小说",
    "bookSourceName": "速读谷（(•̀ᴗ•́)و ）",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.sudugu.org/",
    "bookUrlPattern": "^\\w+://www\\.sudugu\\.org/\\d+/",
    "customButton": false,
    "customOrder": 16,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\"Referer\":\"https://www.sudugu.org/\",\"Accept\":\"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\"}",
    "lastUpdateTime": 1775021510603,
    "respondTime": 2599,
    "ruleBookInfo": {
      "author": "@css:.itemtxt p:contains(作者：) a@text##作者：##",
      "coverUrl": "@css:.item a img@src",
      "intro": "@css:.des p@text",
      "kind": "@css:.itemtxt p span:eq(1)@text",
      "lastChapter": "@css:.itemtxt ul li:eq(0) a@text",
      "name": "@css:.itemtxt h3 a@text",
      "tocUrl": "@css:.itemtxt h3 a@href"
    },
    "ruleContent": {
      "content": "@css:.con p@textNodes",
      "nextContentUrl": "@css:.prenext span a:contains(下一页)@href"
    },
    "ruleSearch": {
      "author": "@css:.itemtxt p:contains(作者：) a@text##作者：##",
      "bookList": "@css:.container .item",
      "bookUrl": "@css:.itemtxt h3 a@href",
      "coverUrl": "@css:.item a img@src",
      "kind": "@css:.itemtxt p span:eq(1)@text",
      "lastChapter": "@css:.itemtxt ul li:eq(0) a@text",
      "name": "@css:.itemtxt h3 a@text",
      "updateTime": "@css:.itemtxt ul li:eq(0) i@text"
    },
    "ruleToc": {
      "chapterList": "@css:.dir ul li",
      "chapterName": "@css:a@text",
      "chapterUrl": "@css:a@href"
    },
    "searchUrl": "https://www.sudugu.org/i/sor.aspx?key={{key}}",
    "weight": 10
  },
  {
    "bookSourceGroup": "小说",
    "bookSourceName": "365小说网(•̀ᴗ•́)و ",
    "bookSourceType": 0,
    "bookSourceUrl": "http://wap.shukuge.com",
    "customButton": false,
    "customOrder": 17,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "玄幻::/i-xuanhuan/\n言情::/i-yanqing/\n武侠::/i-wuxia/\n历史::/i-lishi/\n网游::/i-wangyou/\n科幻::/i-kehuan/\n悬疑::/i-xuanyi/\n排行榜::/top/\n最新::/new/",
    "header": "{\"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1\"}",
    "lastUpdateTime": 1775038923495,
    "loginUrl": "",
    "respondTime": 180000,
    "ruleBookInfo": {
      "author": "@css:.books .dd_box span:eq(0)@text##作者：##",
      "coverUrl": "@css:.cover img@src",
      "intro": "@css:.book_about dd@html",
      "kind": "@css:.books .dd_box span:eq(1)@text##分类：##",
      "lastChapter": "@css:.books .dd_box:eq(2) a@text",
      "name": "@css:.books .name@text",
      "tocUrl": "",
      "wordCount": "@css:.books .dd_box span:eq(3)@text##字数：##"
    },
    "ruleContent": {
      "content": "@css:#chaptercontent@html##(\\s*&nbsp;\\s*)+|阅读网址：.*|(第\\d+/\\d+页)||<br\\s*/?>|<p>|</p>",
      "nextContentUrl": "@css:p.Readpage:eq(1) a:eq(2)@href",
      "sourceRegex": "",
      "webJs": ""
    },
    "ruleExplore": {
      "author": "@css:.s3@text",
      "bookList": "@css:.block .lis li",
      "bookUrl": "@css:.s2 a@href",
      "coverUrl": "",
      "intro": "",
      "kind": "@css:.s1@text",
      "lastChapter": "",
      "name": "@css:.s2 a@text"
    },
    "ruleSearch": {
      "author": "@css:.author@text##作者：##",
      "bookList": "@css:.bookbox",
      "bookUrl": "@css:.bookname a@href",
      "coverUrl": "@css:.bookimg img@src",
      "intro": "",
      "kind": "@css:.cat@text##分类：##",
      "lastChapter": "@css:.update a@text",
      "name": "@css:.bookname a@text"
    },
    "ruleToc": {
      "chapterList": "@XPath:(//div[@class='book_last'])[2]//dd/a",
      "chapterName": "text",
      "chapterUrl": "href",
      "nextTocUrl": "@css:.listpage .right a@href"
    },
    "searchUrl": "/search?q={{key}},{\"webView\":true}",
    "weight": 0
  },
  {
    "bookSourceComment": "2026/4/1\nby Stardust",
    "bookSourceName": "来漫画",
    "bookSourceType": 2,
    "bookSourceUrl": "https://m.laimanhua.org/",
    "customButton": false,
    "customOrder": 18,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "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\",\"Referer\":\"https://m.laimanhua.org/\",\"Origin\":\"https://m.laimanhua.org\",\"Accept\":\"*/*\",\"Accept-Language\":\"zh-CN,zh;q=0.9\",\"DNT\":\"1\",\"sec-fetch-dest\":\"empty\",\"sec-fetch-mode\":\"cors\",\"sec-fetch-site\":\"cross-site\"}",
    "lastUpdateTime": 1775049229099,
    "respondTime": 2015,
    "ruleBookInfo": {
      "coverUrl": ".dramaDetail_bookCover@img@src",
      "intro": ".adm-ellipsis@text",
      "kind": ".dramaDetail_tagsBox@a@text",
      "lastChapter": ".drama_newchapter@a@text",
      "name": ".dramaDetail_bookName@text"
    },
    "ruleContent": {
      "content": "<js>\nfunction decode(bytes, key, iv, mode) {\n    return java.createSymmetricCrypto(\n        mode || \"aes/cbc/pkcs7padding\",\n        key,\n        iv\n    ).decryptStr(bytes)\n}\n\na = result.match(/var tpl_path = '.*', params = '(.*)';/)[1];\n\nd = decode(\n    a,\n    \"9S8$vJnU2ANeSRoF\",\n    a.slice(0,16)\n)\nm = d.match(/{\".*/)[0]\nmList = java.getString(\"$.images[*]\",m)\nmList.split('\\n').map(x => `<img src=\"https://img1.baipiaoguai.org/${x}\">`).join('\\n');\n</js>"
    },
    "ruleSearch": {
      "bookList": ".MTagBookList_tagBookBox@.MTagBookList_tagBookItem",
      "bookUrl": "a@href",
      "coverUrl": "img@src",
      "intro": ".MTagBookList_intro@text",
      "kind": ".MTagBookList_tagsBox@a@text",
      "name": ".MTagBookList_bookName@text"
    },
    "ruleToc": {
      "chapterList": ".CatalogList_content@li@a",
      "chapterName": "text",
      "chapterUrl": "href"
    },
    "searchUrl": "https://m.laimanhua.org/index.php/search?key={{key}}<,/{{page}}>",
    "weight": 0
  },
  {
    "bookSourceComment": "微山书院 337939",
    "bookSourceGroup": "自制",
    "bookSourceName": "微山书院",
    "bookSourceType": 0,
    "bookSourceUrl": "http://www.337939.com",
    "bookUrlPattern": "https?://www\\.337939\\.com/book/\\d+/?",
    "customButton": false,
    "customOrder": 19,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": false,
    "eventListener": false,
    "exploreUrl": "",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n  \"Referer\": \"http://www.337939.com/\"\n}",
    "lastUpdateTime": 1775227523244,
    "loginUrl": "",
    "respondTime": 7178,
    "ruleBookInfo": {
      "author": "@css:[property=og:novel:author]@content",
      "coverUrl": "@css:[property=og:image]@content",
      "intro": "@css:.bookinfo .bookintro@text##《[^》]+》是[^。]+。##",
      "kind": "@css:[property=og:novel:category]@content",
      "lastChapter": "@css:[property=og:novel:lastest_chapter_name]@content",
      "name": "@css:[property=og:novel:book_name]@content",
      "tocUrl": "<js>baseUrl</js>"
    },
    "ruleContent": {
      "content": "@css:#rtext@html##<a[^>]*>↑返回顶部↑</a>##",
      "nextContentUrl": "@css:#linkNext@href##.*/read/\\d+/\\d+_\\d+\\.html##$0###"
    },
    "ruleSearch": {
      "author": "@css:.bookinfo .author.0@text##作者：##",
      "bookList": "@css:.bookbox",
      "bookUrl": "@css:.bookname a@href",
      "intro": "@css:.bookinfo .update@text##^简介：\\s*##",
      "lastChapter": "@css:.bookinfo .cat a@text",
      "name": "@css:.bookname a@text"
    },
    "ruleToc": {
      "chapterList": "@css:#list-chapterAll dd",
      "chapterName": "@css:a@text",
      "chapterUrl": "@css:a@href"
    },
    "searchUrl": "http://www.337939.com/search/,{\n  \"method\": \"POST\",\n  \"body\": \"searchkey={{encodeURIComponent(key)}}&searchtype=all\",\n  \"headers\": {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n    \"Referer\": \"http://www.337939.com/\",\n    \"Content-Type\": \"application/x-www-form-urlencoded\"\n  }\n}",
    "weight": 0
  },
  {
    "bookSourceComment": "没搞定搜索，有大佬看到的话，能不能增加下",
    "bookSourceGroup": "搜索链接规则为空",
    "bookSourceName": "东方小说网",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.cndfzw.com",
    "customButton": false,
    "customOrder": 20,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": false,
    "eventListener": false,
    "lastUpdateTime": 1770443417347,
    "respondTime": 0,
    "ruleBookInfo": {
      "author": "td.1@tag.div.1@text##作者：",
      "coverUrl": "img@src",
      "intro": "class.lb_jj@div.4@text",
      "kind": "td.1@tag.div.2@text##类别：",
      "lastChapter": "class.chapter@li.0@a@text",
      "name": "td.1@h1@text"
    },
    "ruleContent": {
      "content": "id.nr1@html",
      "title": "class.nr_title@text"
    },
    "ruleSearch": {
      "author": "class.s4.0@text",
      "bookList": "id.book-list@ul@li:not(:first-child)",
      "bookUrl": "class.s2@a@tilte@href",
      "kind": "class.s2@text",
      "lastChapter": "class.s5@text",
      "name": "class.s2@a@tilte@text"
    },
    "ruleToc": {
      "chapterList": "-class.chapter@li",
      "chapterName": "a@text",
      "chapterUrl": "a@href"
    },
    "weight": 0
  },
  {
    "bookSourceComment": "自己打开精准搜索",
    "bookSourceName": "asmrEgg",
    "bookSourceType": 1,
    "bookSourceUrl": "https://a.asmregg.top/",
    "customButton": false,
    "customOrder": 21,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "lastUpdateTime": 1772312391639,
    "respondTime": 5493,
    "ruleBookInfo": {},
    "ruleContent": {},
    "ruleSearch": {
      "author": "tag.title@text",
      "bookList": "tag.channel@tag.item",
      "bookUrl": "tag.link@text",
      "intro": "tag.description@text",
      "name": "tag.title@text"
    },
    "ruleToc": {
      "chapterList": "@js:\nconst match = result.match(/audios\\s*=\\s*(\\[[^\\]]*\\])/);\nconst audiosArray = JSON.parse(match[1]);\n[audiosArray][0];",
      "chapterName": "name",
      "chapterUrl": "url"
    },
    "searchUrl": "index.xml",
    "weight": 0
  },
  {
    "bookSourceComment": "由雨落星辰ai生成，ai地址【ima知识库】开源阅读助手 https://ima.qq.com/wiki/?shareId=7cccd0573f64fe67a4d7c4b05ce801e5cd8daadc9c9dc26e755528eaa5a2439b",
    "bookSourceName": "古代小说",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.gudaibook1.com",
    "concurrentRate": "3",
    "customButton": false,
    "customOrder": 22,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "完本小说::/quanben\n玄幻小说::/xuanhuan\n修真小说::/xiuzhen\n都市小说::/dushi\n历史小说::/lishi\n网游小说::/wangyou\n科幻小说::/kehuan\n女频小说::/nvpin",
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0\", \"Content-Type\": \"application/x-www-form-urlencoded\", \"Origin\": \"https://www.gudaibook1.com\", \"Referer\": \"https://www.gudaibook1.com/\"}",
    "lastUpdateTime": 1772901568793,
    "respondTime": 21221,
    "ruleBookInfo": {
      "author": ".book-stats b:eq(0) a@text",
      "coverUrl": ".book-img a img@src",
      "intro": ".book-intro@text##重回.*?简介：|最新章节：.*",
      "kind": ".book-stats b:eq(1) a@text",
      "lastChapter": ".book-intro a@text",
      "name": ".book-title h1@text"
    },
    "ruleContent": {
      "content": "#BookText p@text##喜欢《.*?》，请收藏我们网站：.*|本章未完，点击下一页继续阅读|转码声明：.*|古代小说所有内容使用搜索引擎转码技术抓取自网络.*|Powered by YGBOOK.*|网站地图|　+|\\s{4,}|\\[\\d{2}:\\d{2}\\.\\d{3}\\]|└",
      "nextContentUrl": "{{@text.下一页@href}},{\"webView\": true}"
    },
    "ruleExplore": {
      "author": ".book_other:eq(0) span:eq(0) a@text",
      "bookList": "#sitebox dl",
      "bookUrl": "dt a@href",
      "coverUrl": "dt a img@src",
      "intro": ".book_des@text",
      "kind": ".book_other:eq(0) span:eq(2) a@text",
      "lastChapter": ".book_other:eq(1) a@text",
      "name": "dd h3 a@text"
    },
    "ruleSearch": {
      "author": ".book_other:eq(0) span:eq(0) a@text",
      "bookList": "#sitebox dl",
      "bookUrl": "dt a@href",
      "coverUrl": "dt a img@src",
      "intro": ".book_des@text",
      "kind": ".book_other:eq(0) span:eq(2) a@text",
      "lastChapter": ".book_other:eq(1) a@text",
      "name": "dd h3 a@text"
    },
    "ruleToc": {
      "chapterList": ".chapterlist dd",
      "chapterName": "a@text",
      "chapterUrl": "{{@a@href}},{\"webView\": true}"
    },
    "searchUrl": "/home/search,{\"method\": \"POST\", \"body\": \"action=search&q={{key}}\"}",
    "weight": 0
  },
  {
    "bookSourceComment": "网站好像是不更新了，只是看到个书源无法导入于是自己写了个（实际上是因为首页热门有小黄文，写发现的时候才发现网站不更新了，淦）",
    "bookSourceName": "不良小说",
    "bookSourceType": 0,
    "bookSourceUrl": "https://blxsw1.com",
    "customButton": false,
    "customOrder": 23,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "全部::/list/{{page}}.html\n玄幻::/list/xuanhuanxiaoshuo_{{page}}.html\r\n修真::/list/xiuzhenxiaoshuo_{{page}}.html\r\n都市::/list/dushixiaoshuo_{{page}}.html\r\n穿越::/list/chuanyuexiaoshuo_{{page}}.html\r\n网游::/list/wangyouxiaoshuo_{{page}}.html\r\n历史::/list/lishixiaoshuo_{{page}}.html\r\n短篇::/list/duanpianheji_{{page}}.html\r\n其他::/list/qitaxiaoshuo_{{page}}.html",
    "lastUpdateTime": 1775050923680,
    "loginCheckJs": "cookie.removeCookie(source.getKey())\r\nresult",
    "respondTime": 3492,
    "ruleBookInfo": {
      "author": ".novel_info_title i a@text",
      "coverUrl": ".novel_info_main img@src",
      "intro": ".intro@text",
      "kind": ".novel_info_title@p.0@span.0@text",
      "lastChapter": ".to100 a@text",
      "name": ".novel_info_title h1@text",
      "wordCount": ".novel_info_title@p.0@span.1@text"
    },
    "ruleContent": {
      "content": "#article p@html"
    },
    "ruleExplore": {
      "author": "i.fa@text",
      "bookList": "ul.flex li",
      "bookUrl": ".img_span a@href",
      "coverUrl": ".img_span a img@data-original",
      "intro": "p.indent@text",
      "kind": ".img_span a span@text",
      "lastChapter": ".blue@text",
      "name": ".img_span a img@title",
      "wordCount": ".orange@text"
    },
    "ruleSearch": {
      "author": "div.1@p@text##(.*) (\\d+ 万字) (.*)##$1###",
      "bookList": ".searchresult",
      "bookUrl": ".img_span a@href",
      "checkKeyWord": "女友",
      "coverUrl": ".img_span a img@src",
      "intro": "div.1@p.1@text",
      "lastChapter": "div.1@p.2@text",
      "name": "h3@text",
      "wordCount": "div.1@p@text##(.*) (\\d+ 万字) (.*)##$2###"
    },
    "ruleToc": {
      "chapterList": "#ul_all_chapters li",
      "chapterName": "a@title",
      "chapterUrl": "a@href"
    },
    "searchUrl": "https://blxsw1.com/search,{\n  \"method\": \"POST\",\n  \"body\": \"searchkey={{key}}&searchtype=all&Submit=\"\n}",
    "weight": 0
  },
  {
    "bookSourceName": "风雨小说",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.xsuuu.cc",
    "customButton": false,
    "customOrder": 24,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": false,
    "eventListener": false,
    "lastUpdateTime": 1775221118684,
    "respondTime": 2764,
    "ruleBookInfo": {},
    "ruleContent": {
      "content": "article.font_max@html",
      "nextContentUrl": "div.row.nav-bottom a#next@href"
    },
    "ruleSearch": {
      "author": "dd.book_other:contains(作者) span@text",
      "bookList": ".col-12.col-md-6 dl",
      "bookUrl": "h3 a@href",
      "coverUrl": "dt a img@src",
      "kind": "dd.book_other:contains(状态)@text ",
      "lastChapter": "dd.book_other:contains(最新章节) a@text",
      "name": "h3 a@text",
      "wordCount": "dd.book_other:contains(更新时间)@text"
    },
    "ruleToc": {
      "chapterList": "div.book_list ul.row li",
      "chapterName": "a@text",
      "chapterUrl": "a@href",
      "nextTocUrl": "ul.pagination li.active + li.page-item a.page-link@href"
    },
    "searchUrl": "https://www.xsuuu.cc/search.php?q={{key}}&p={{page}}",
    "weight": 0
  },
  {
    "bookSourceName": "独步小说网",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.dbxsd.com/",
    "customButton": false,
    "customOrder": 26,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "@js:\nconst list = [];\norg.jsoup.Jsoup.parse(java.ajax(source.key + \"readbook.html\")).select('.breadcrumb [href*=nav]').forEach(e => list.push({\n  title: e.text(),\n  url: String(e.attr('href')).replace(/.html\\//,'<,-{{page-1}}>.html'),\n  style: {\n    layout_flexGrow: 1,\n    layout_flexBasisPercent: null\n  }\n}));\nJSON.stringify(list);",
    "header": "{\"User-Agent\": \"\"}",
    "lastUpdateTime": 1775036480949,
    "respondTime": 11420,
    "ruleBookInfo": {
      "author": "[property$=author]@content",
      "canReName": "1",
      "coverUrl": "[property$=image]@content",
      "intro": ".book-detail@html",
      "kind": "[property~=category|status|time]@content",
      "lastChapter": "[property$=chapter_name]@content",
      "name": "[property$=title]@content"
    },
    "ruleContent": {
      "content": "#cont-body@html",
      "nextContentUrl": ".active+li@a@href"
    },
    "ruleExplore": {
      "author": "@js:\n\"{{@td.2@text}}\" || \"独步小说网\"",
      "bookList": ".media||tr!0",
      "bookUrl": "a.0@href",
      "coverUrl": "img@src",
      "intro": ".media-info@text",
      "name": "h4@text||a.0@text"
    },
    "ruleSearch": {
      "author": "td.1@text",
      "bookList": "tr!0",
      "bookUrl": "a.0@href",
      "checkKeyWord": "魔王",
      "name": "a.0@title"
    },
    "ruleToc": {
      "chapterList": "#all-chapter@a",
      "chapterName": "text",
      "chapterUrl": "href"
    },
    "searchUrl": "plus/search.php?q={{key}}, {\"webView\": true}",
    "weight": 0
  },
  {
    "bookSourceComment": "//20240223By_zhbyjm7783 制作\n//20240224By_遇知 修改目录规则，加上分卷，完善VIP标识\n//202501022By_聆听月与悦 完善目录规则+简介规则（💎为付费章节，💮为免费章节）\n//\t发现除排行榜外均为免费分类\n搜索和发现为空时，点击登录一次\n必须勾选CookieJar",
    "bookSourceGroup": "《☃ 自用》",
    "bookSourceName": "🎉起点中文网(修复搜索只有一页的问题)",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.qidian.com",
    "customButton": false,
    "customOrder": 28,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"༺ˇ»`ʚ 男生人气榜单 ɞ´«ˇ༻\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1}},{\"title\":\"月票榜\",\"url\":\"https://www.qidian.com/rank/yuepiao/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"畅销榜\",\"url\":\"//www.qidian.com/rank/hotsales/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"书友榜\",\"url\":\"//www.qidian.com/rank/newfans/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"推荐榜\",\"url\":\"//www.qidian.com/rank/recom/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"收藏榜\",\"url\":\"//www.qidian.com/rank/collect/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"更新榜\",\"url\":\"//www.qidian.com/rank/vipup/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"阅读指数榜\",\"url\":\"//www.qidian.com/rank/readindex/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"VIP收藏榜\",\"url\":\"//www.qidian.com/rank/vipcollect/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"签约作者新书榜\",\"url\":\"//www.qidian.com/rank/signnewbook/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"公众作者新书榜\",\"url\":\"//www.qidian.com/rank/pubnewbook/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"新人签约新书榜\",\"url\":\"//www.qidian.com/rank/newsign/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"新人作者新书榜\",\"url\":\"//www.qidian.com/rank/newauthor/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"༺ˇ»`ʚ 女生人气榜单 ɞ´«ˇ༻\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1}},{\"title\":\"月票榜\",\"url\":\"//www.qdmm.com/rank/yuepiao/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"畅销榜\",\"url\":\"//www.qdmm.com/rank/hotsales/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"书友榜\",\"url\":\"//www.qdmm.com/rank/newfans/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"推荐榜\",\"url\":\"//www.qdmm.com/rank/recom/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"收藏榜\",\"url\":\"//www.qdmm.com/rank/collect/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"总字数榜\",\"url\":\"//www.qdmm.com/rank/wordcount/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"热门单订榜\",\"url\":\"//www.qdmm.com/rank/subscr/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"新书热销榜\",\"url\":\"//www.qdmm.com/rank/newsales/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"阅读指数榜\",\"url\":\"//www.qdmm.com/rank/readindex/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"VIP单订总榜\",\"url\":\"//www.qdmm.com/rank/vipsub/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"VIP更新字数榜\",\"url\":\"//www.qdmm.com/rank/vipup/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"签约作者新书榜\",\"url\":\"//www.qdmm.com/rank/signnewbook/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"公众作者新书榜\",\"url\":\"//www.qdmm.com/rank/pubnewbook/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"新人签约新书榜\",\"url\":\"//www.qdmm.com/rank/newsign/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"新人作者新书榜\",\"url\":\"//www.qdmm.com/rank/newauthor/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.47}},{\"title\":\"༺ˇ»`ʚ 免费男生 ɞ´«ˇ༻\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1}},{\"title\":\"全部\",\"url\":\"//www.qidian.com/free/all/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"完本\",\"url\":\"//www.qidian.com/free/all/action1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"玄幻\",\"url\":\"//www.qidian.com/free/all/chanId21-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"东方玄幻\",\"url\":\"//www.qidian.com/free/all/chanId21-subCateId8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异世大陆\",\"url\":\"//www.qidian.com/free/all/chanId21-subCateId73-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"王朝争霸\",\"url\":\"//www.qidian.com/free/all/chanId21-subCateId58-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"高武世界\",\"url\":\"//www.qidian.com/free/all/chanId21-subCateId78-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"奇幻\",\"url\":\"//www.qidian.com/free/all/chanId1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现代魔法\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId38-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"剑与魔法\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId62-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"史诗奇幻\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId201-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"神秘幻想\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId202-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"历史神话\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId20092-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"另类幻想\",\"url\":\"//www.qidian.com/free/all/chanId1-subCateId20093-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"武侠\",\"url\":\"//www.qidian.com/free/all/chanId2-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"传统武侠\",\"url\":\"//www.qidian.com/free/all/chanId2-subCateId5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"武侠幻想\",\"url\":\"//www.qidian.com/free/all/chanId2-subCateId30-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"国术无双\",\"url\":\"//www.qidian.com/free/all/chanId2-subCateId206-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古武未来\",\"url\":\"//www.qidian.com/free/all/chanId2-subCateId20099-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"武侠同人\",\"url\":\"//www.qidian.com/free/all/chanId2-subCateId20100-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"仙侠\",\"url\":\"//www.qidian.com/free/all/chanId22-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"修真文明\",\"url\":\"//www.qidian.com/free/all/chanId22-subCateId18-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"幻想修仙\",\"url\":\"//www.qidian.com/free/all/chanId22-subCateId44-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现代修真\",\"url\":\"//www.qidian.com/free/all/chanId22-subCateId64-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"神话修真\",\"url\":\"//www.qidian.com/free/all/chanId22-subCateId207-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古典仙侠\",\"url\":\"//www.qidian.com/free/all/chanId22-subCateId20101-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"都市\",\"url\":\"//www.qidian.com/free/all/chanId4-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"都市生活\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId12-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"都市异能\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId16-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异术超能\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId74-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"青春校园\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId130-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"娱乐明星\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId151-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"商战职场\",\"url\":\"//www.qidian.com/free/all/chanId4-subCateId153-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现实\",\"url\":\"//www.qidian.com/free/all/chanId15-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"时代叙事\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId20106-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"家庭伦理\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId6-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"女性题材\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId20104-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"青年故事\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId20108-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"社会悬疑\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId20105-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"人间百态\",\"url\":\"//www.qidian.com/free/all/chanId15-subCateId209-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"军事\",\"url\":\"//www.qidian.com/free/all/chanId6-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"军旅生涯\",\"url\":\"//www.qidian.com/free/all/chanId6-subCateId54-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"军事战争\",\"url\":\"//www.qidian.com/free/all/chanId6-subCateId65-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"战争幻想\",\"url\":\"//www.qidian.com/free/all/chanId6-subCateId80-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"抗战烽火\",\"url\":\"//www.qidian.com/free/all/chanId6-subCateId230-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"谍战特工\",\"url\":\"//www.qidian.com/free/all/chanId6-subCateId231-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"历史\",\"url\":\"//www.qidian.com/free/all/chanId5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"架空历史\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId22-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"秦汉三国\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId48-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"上古先秦\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId220-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"历史传记\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId32-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"两晋隋唐\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId222-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"五代十国\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId223-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"两宋元明\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId224-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"清史民国\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId225-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"外国历史\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId226-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"民间传说\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId20094-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏\",\"url\":\"//www.qidian.com/free/all/chanId7-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"电子竞技\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId7-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"虚拟网游\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId70-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏异界\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId240-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏系统\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId20102-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏主播\",\"url\":\"//www.qidian.com/free/all/chanId5-subCateId20103-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"体育\",\"url\":\"//www.qidian.com/free/all/chanId8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"篮球运动\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId28-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"体育赛事\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId55-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"足球运动\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId82-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"科幻\",\"url\":\"//www.qidian.com/free/all/chanId9-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古武机甲\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId21-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"未来世界\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId25-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"星际文明\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId68-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"超级科技\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId250-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"时空穿梭\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId251-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"进化变异\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId252-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"末世危机\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId253-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"诸天无限\",\"url\":\"//www.qidian.com/free/all/chanId20109-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"无限\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId20110-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"诸天\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId20111-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"综漫\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId20112-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"悬疑\",\"url\":\"//www.qidian.com/free/all/chanId10-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"诡秘悬疑\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId26-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"奇妙世界\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId35-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"侦探推理\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId57-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"探险生存\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId260-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古今传奇\",\"url\":\"//www.qidian.com/free/all/chanId8-subCateId20095-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"轻小说\",\"url\":\"//www.qidian.com/free/all/chanId12-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"原生幻想\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId60-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"恋爱日常\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId66-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"衍生同人\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId281-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"搞笑吐槽\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId282-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"短篇\",\"url\":\"//www.qidian.com/free/all/chanId20076-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"诗歌散文\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20097-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"人物传记\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20098-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"影视剧本\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20075-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"评论文集\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20077-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"生活随笔\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20078-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"美文游记\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20079-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"短篇小说\",\"url\":\"//www.qidian.com/free/all/chanId12-subCateId20096-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"豪门\",\"url\":\"//www.qidian.com/free/all/tag%E8%B1%AA%E9%97%A8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"孤儿\",\"url\":\"//www.qidian.com/free/all/tag%E5%AD%A4%E5%84%BF-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"盗贼\",\"url\":\"//www.qidian.com/free/all/tag%E7%9B%97%E8%B4%BC-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"特工\",\"url\":\"//www.qidian.com/free/all/tag%E7%89%B9%E5%B7%A5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"黑客\",\"url\":\"//www.qidian.com/free/all/tag%E9%BB%91%E5%AE%A2-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"明星\",\"url\":\"//www.qidian.com/free/all/tag%E6%98%8E%E6%98%9F-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"特种兵\",\"url\":\"//www.qidian.com/free/all/tag%E7%89%B9%E7%A7%8D%E5%85%B5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"杀手\",\"url\":\"//www.qidian.com/free/all/tag%E6%9D%80%E6%89%8B-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"老师\",\"url\":\"//www.qidian.com/free/all/tag%E8%80%81%E5%B8%88-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"学生\",\"url\":\"//www.qidian.com/free/all/tag%E5%AD%A6%E7%94%9F-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"胖子\",\"url\":\"//www.qidian.com/free/all/tag%E8%83%96%E5%AD%90-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"宠物\",\"url\":\"//www.qidian.com/free/all/tag%E5%AE%A0%E7%89%A9-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"蜀山\",\"url\":\"//www.qidian.com/free/all/tag%E8%9C%80%E5%B1%B1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"魔王附体\",\"url\":\"//www.qidian.com/free/all/tag%E9%AD%94%E7%8E%8B%E9%99%84%E4%BD%93-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"LOL\",\"url\":\"//www.qidian.com/free/all/tagLOL-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"废材流\",\"url\":\"//www.qidian.com/free/all/tag%E5%BA%9F%E6%9D%90%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"护短\",\"url\":\"//www.qidian.com/free/all/tag%E6%8A%A4%E7%9F%AD-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"卡片\",\"url\":\"//www.qidian.com/free/all/tag%E5%8D%A1%E7%89%87-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"手游\",\"url\":\"//www.qidian.com/free/all/tag%E6%89%8B%E6%B8%B8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"法师\",\"url\":\"//www.qidian.com/free/all/tag%E6%B3%95%E5%B8%88-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"医生\",\"url\":\"//www.qidian.com/free/all/tag%E5%8C%BB%E7%94%9F-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"感情\",\"url\":\"//www.qidian.com/free/all/tag%E6%84%9F%E6%83%85-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"鉴宝\",\"url\":\"//www.qidian.com/free/all/tag%E9%89%B4%E5%AE%9D-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"亡灵\",\"url\":\"//www.qidian.com/free/all/tag%E4%BA%A1%E7%81%B5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"职场\",\"url\":\"//www.qidian.com/free/all/tag%E8%81%8C%E5%9C%BA-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"吸血鬼\",\"url\":\"//www.qidian.com/free/all/tag%E5%90%B8%E8%A1%80%E9%AC%BC-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"龙\",\"url\":\"//www.qidian.com/free/all/tag%E9%BE%99-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"西游\",\"url\":\"//www.qidian.com/free/all/tag%E8%A5%BF%E6%B8%B8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"鬼怪\",\"url\":\"//www.qidian.com/free/all/tag%E9%AC%BC%E6%80%AA-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"阵法\",\"url\":\"//www.qidian.com/free/all/tag%E9%98%B5%E6%B3%95-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"魔兽\",\"url\":\"//www.qidian.com/free/all/tag%E9%AD%94%E5%85%BD-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"勇猛\",\"url\":\"//www.qidian.com/free/all/tag%E5%8B%87%E7%8C%9B-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"玄学\",\"url\":\"//www.qidian.com/free/all/tag%E7%8E%84%E5%AD%A6-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"群穿\",\"url\":\"//www.qidian.com/free/all/tag%E7%BE%A4%E7%A9%BF-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"丹药\",\"url\":\"//www.qidian.com/free/all/tag%E4%B8%B9%E8%8D%AF-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"练功流\",\"url\":\"//www.qidian.com/free/all/tag%E7%BB%83%E5%8A%9F%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"召唤流\",\"url\":\"//www.qidian.com/free/all/tag%E5%8F%AC%E5%94%A4%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"恶搞\",\"url\":\"//www.qidian.com/free/all/tag%E6%81%B6%E6%90%9E-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"爆笑\",\"url\":\"//www.qidian.com/free/all/tag%E7%88%86%E7%AC%91-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"轻松\",\"url\":\"//www.qidian.com/free/all/tag%E8%BD%BB%E6%9D%BE-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"冷酷\",\"url\":\"//www.qidian.com/free/all/tag%E5%86%B7%E9%85%B7-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"腹黑\",\"url\":\"//www.qidian.com/free/all/tag%E8%85%B9%E9%BB%91-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"阳光\",\"url\":\"//www.qidian.com/free/all/tag%E9%98%B3%E5%85%89-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"狡猾\",\"url\":\"//www.qidian.com/free/all/tag%E7%8B%A1%E7%8C%BE-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"机智\",\"url\":\"//www.qidian.com/free/all/tag%E6%9C%BA%E6%99%BA-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"猥琐\",\"url\":\"//www.qidian.com/free/all/tag%E7%8C%A5%E7%90%90-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"嚣张\",\"url\":\"//www.qidian.com/free/all/tag%E5%9A%A3%E5%BC%A0-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"淡定\",\"url\":\"//www.qidian.com/free/all/tag%E6%B7%A1%E5%AE%9A-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"僵尸\",\"url\":\"//www.qidian.com/free/all/tag%E5%83%B5%E5%B0%B8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"丧尸\",\"url\":\"//www.qidian.com/free/all/tag%E4%B8%A7%E5%B0%B8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"盗墓\",\"url\":\"//www.qidian.com/free/all/tag%E7%9B%97%E5%A2%93-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"随身流\",\"url\":\"//www.qidian.com/free/all/tag%E9%9A%8F%E8%BA%AB%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"软饭流\",\"url\":\"//www.qidian.com/free/all/tag%E8%BD%AF%E9%A5%AD%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"无敌文\",\"url\":\"//www.qidian.com/free/all/tag%E6%97%A0%E6%95%8C%E6%96%87-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异兽流\",\"url\":\"//www.qidian.com/free/all/tag%E5%BC%82%E5%85%BD%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"系统流\",\"url\":\"//www.qidian.com/free/all/tag%E7%B3%BB%E7%BB%9F%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"洪荒流\",\"url\":\"//www.qidian.com/free/all/tag%E6%B4%AA%E8%8D%92%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"学院流\",\"url\":\"//www.qidian.com/free/all/tag%E5%AD%A6%E9%99%A2%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"位面\",\"url\":\"//www.qidian.com/free/all/tag%E4%BD%8D%E9%9D%A2-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"铁血\",\"url\":\"//www.qidian.com/free/all/tag%E9%93%81%E8%A1%80-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"励志\",\"url\":\"//www.qidian.com/free/all/tag%E5%8A%B1%E5%BF%97-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"坚毅\",\"url\":\"//www.qidian.com/free/all/tag%E5%9D%9A%E6%AF%85-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"变身\",\"url\":\"//www.qidian.com/free/all/tag%E5%8F%98%E8%BA%AB-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"强者回归\",\"url\":\"//www.qidian.com/free/all/tag%E5%BC%BA%E8%80%85%E5%9B%9E%E5%BD%92-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"赚钱\",\"url\":\"//www.qidian.com/free/all/tag%E8%B5%9A%E9%92%B1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"争霸流\",\"url\":\"//www.qidian.com/free/all/tag%E4%BA%89%E9%9C%B8%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"种田文\",\"url\":\"//www.qidian.com/free/all/tag%E7%A7%8D%E7%94%B0%E6%96%87-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"宅男\",\"url\":\"//www.qidian.com/free/all/tag%E5%AE%85%E7%94%B7-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"无限流\",\"url\":\"//www.qidian.com/free/all/tag%E6%97%A0%E9%99%90%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"技术流\",\"url\":\"//www.qidian.com/free/all/tag%E6%8A%80%E6%9C%AF%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"凡人流\",\"url\":\"//www.qidian.com/free/all/tag%E5%87%A1%E4%BA%BA%E6%B5%81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"热血\",\"url\":\"//www.qidian.com/free/all/tag%E7%83%AD%E8%A1%80-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"重生\",\"url\":\"//www.qidian.com/free/all/tag%E9%87%8D%E7%94%9F-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"穿越\",\"url\":\"//www.qidian.com/free/all/tag%E7%A9%BF%E8%B6%8A-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"༺ˇ»`ʚ 免费女生 ɞ´«ˇ༻\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1}},{\"title\":\"全部\",\"url\":\"//www.qdmm.com/free/all/page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"完本\",\"url\":\"//www.qdmm.com/free/all/action1-tag1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古代言情\",\"url\":\"//www.qdmm.com/free/all/chanId80-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古代情缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId801-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"宫闱宅斗\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId802-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"经商种田\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId803-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古典架空\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId804-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"女尊王朝\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId805-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"穿越奇情\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId806-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"西方时空\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30094-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"清穿民国\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30095-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"上古蛮荒\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30096-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"热血江湖\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30097-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"仙侠奇缘\",\"url\":\"//www.qdmm.com/free/all/chanId81-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"武侠情缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId810-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古典仙侠\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId811-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现代修真\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId812-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"远古洪荒\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId813-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"仙侣奇缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30093-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现代言情\",\"url\":\"//www.qdmm.com/free/all/chanId82-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"商战职场\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId821-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"豪门世家\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId822-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"都市生活\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId823-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"婚恋情缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId824-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"娱乐明星\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId825-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"都市异能\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId827-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"极道江湖\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId828-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"民国情缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId829-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异国情缘\",\"url\":\"//www.qdmm.com/free/all/chanId80-subCateId30098-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"浪漫青春\",\"url\":\"//www.qdmm.com/free/all/chanId83-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"青春校园\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId831-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"青春疼痛\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId832-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"叛逆成长\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId833-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"青春纯爱\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId834-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"玄幻言情\",\"url\":\"//www.qdmm.com/free/all/chanId84-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"东方玄幻\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId841-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异世大陆\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId844-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"西方奇幻\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId846-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"远古神话\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId847-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异族恋情\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId848-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"魔法幻情\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId849-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异能超术\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId30092-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"悬疑推理\",\"url\":\"//www.qdmm.com/free/all/chanId85-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"推理侦探\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId850-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"诡秘惊险\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId851-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"悬疑探险\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId852-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"奇妙世界\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId853-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"神秘文化\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId854-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"幽情奇缘\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId30099-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"短篇\",\"url\":\"//www.qdmm.com/free/all/chanId30083-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"短篇小说\",\"url\":\"//www.qdmm.com/free/all/chanId83-subCateId30089-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"科幻空间\",\"url\":\"//www.qdmm.com/free/all/chanId86-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"星际恋歌\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId864-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"时空穿梭\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId866-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"未来世界\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId862-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古武机甲\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId867-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"超级科技\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId868-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"进化变异\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId863-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"末世危机\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId869-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏竞技\",\"url\":\"//www.qdmm.com/free/all/chanId88-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"电子竞技\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId880-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"网游情缘\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId881-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"游戏异界\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId882-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"体育竞技\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId883-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"轻小说\",\"url\":\"//www.qdmm.com/free/all/chanId87-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"同人衍生\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30100-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"唯美幻想\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30101-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"萌系变身\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30102-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"恋爱日常\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30103-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"搞笑吐槽\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30104-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"古典衍生\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30105-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"影视衍生\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30106-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"动漫衍生\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30107-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"其他衍生\",\"url\":\"//www.qdmm.com/free/all/chanId86-subCateId30108-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"现实生活\",\"url\":\"//www.qdmm.com/free/all/chanId30120-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"家与情感\",\"url\":\"//www.qdmm.com/free/all/chanId30120-subCateId30121-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"行业人生\",\"url\":\"//www.qdmm.com/free/all/chanId30120-subCateId30122-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"探索科幻\",\"url\":\"//www.qdmm.com/free/all/chanId30120-subCateId30123-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"人文博览\",\"url\":\"//www.qdmm.com/free/all/chanId30120-subCateId30124-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"豪门\",\"url\":\"//www.qdmm.com/free/all/tag1-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"孤儿\",\"url\":\"//www.qdmm.com/free/all/tag2-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"盗贼\",\"url\":\"//www.qdmm.com/free/all/tag3-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"特工\",\"url\":\"//www.qdmm.com/free/all/tag4-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"黑客\",\"url\":\"//www.qdmm.com/free/all/tag5-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"明星\",\"url\":\"//www.qdmm.com/free/all/tag6-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"特种兵\",\"url\":\"//www.qdmm.com/free/all/tag7-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"杀手\",\"url\":\"//www.qdmm.com/free/all/tag8-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"老师\",\"url\":\"//www.qdmm.com/free/all/tag9-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"学生\",\"url\":\"//www.qdmm.com/free/all/tag10-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"胖子\",\"url\":\"//www.qdmm.com/free/all/tag11-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"宠物\",\"url\":\"//www.qdmm.com/free/all/tag12-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"蜀山\",\"url\":\"//www.qdmm.com/free/all/tag13-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"魔王附体\",\"url\":\"//www.qdmm.com/free/all/tag14-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"LOL\",\"url\":\"//www.qdmm.com/free/all/tag15-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"废材流\",\"url\":\"//www.qdmm.com/free/all/tag16-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"护短\",\"url\":\"//www.qdmm.com/free/all/tag17-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"卡片\",\"url\":\"//www.qdmm.com/free/all/tag18-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"手游\",\"url\":\"//www.qdmm.com/free/all/tag19-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"法师\",\"url\":\"//www.qdmm.com/free/all/tag20-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"医生\",\"url\":\"//www.qdmm.com/free/all/tag21-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"感情\",\"url\":\"//www.qdmm.com/free/all/tag22-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"鉴宝\",\"url\":\"//www.qdmm.com/free/all/tag23-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"亡灵\",\"url\":\"//www.qdmm.com/free/all/tag24-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"职场\",\"url\":\"//www.qdmm.com/free/all/tag25-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"吸血鬼\",\"url\":\"//www.qdmm.com/free/all/tag26-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"龙\",\"url\":\"//www.qdmm.com/free/all/tag27-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"西游\",\"url\":\"//www.qdmm.com/free/all/tag28-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"鬼怪\",\"url\":\"//www.qdmm.com/free/all/tag29-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"阵法\",\"url\":\"//www.qdmm.com/free/all/tag30-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"魔兽\",\"url\":\"//www.qdmm.com/free/all/tag31-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"勇猛\",\"url\":\"//www.qdmm.com/free/all/tag32-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"玄学\",\"url\":\"//www.qdmm.com/free/all/tag33-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"群穿\",\"url\":\"//www.qdmm.com/free/all/tag34-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"丹药\",\"url\":\"//www.qdmm.com/free/all/tag35-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"练功流\",\"url\":\"//www.qdmm.com/free/all/tag36-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"召唤流\",\"url\":\"//www.qdmm.com/free/all/tag37-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"恶搞\",\"url\":\"//www.qdmm.com/free/all/tag38-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"爆笑\",\"url\":\"//www.qdmm.com/free/all/tag39-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"轻松\",\"url\":\"//www.qdmm.com/free/all/tag40-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"冷酷\",\"url\":\"//www.qdmm.com/free/all/tag41-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"腹黑\",\"url\":\"//www.qdmm.com/free/all/tag42-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"阳光\",\"url\":\"//www.qdmm.com/free/all/tag43-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"狡猾\",\"url\":\"//www.qdmm.com/free/all/tag44-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"机智\",\"url\":\"//www.qdmm.com/free/all/tag45-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"猥琐\",\"url\":\"//www.qdmm.com/free/all/tag46-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"嚣张\",\"url\":\"//www.qdmm.com/free/all/tag47-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"淡定\",\"url\":\"//www.qdmm.com/free/all/tag48-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"僵尸\",\"url\":\"//www.qdmm.com/free/all/tag49-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"丧尸\",\"url\":\"//www.qdmm.com/free/all/tag50-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"盗墓\",\"url\":\"//www.qdmm.com/free/all/tag51-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"随身流\",\"url\":\"//www.qdmm.com/free/all/tag52-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"软饭流\",\"url\":\"//www.qdmm.com/free/all/tag53-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"无敌文\",\"url\":\"//www.qdmm.com/free/all/tag54-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"异兽流\",\"url\":\"//www.qdmm.com/free/all/tag55-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"系统流\",\"url\":\"//www.qdmm.com/free/all/tag56-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"洪荒流\",\"url\":\"//www.qdmm.com/free/all/tag57-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"学院流\",\"url\":\"//www.qdmm.com/free/all/tag58-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"位面\",\"url\":\"//www.qdmm.com/free/all/tag59-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"铁血\",\"url\":\"//www.qdmm.com/free/all/tag60-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"励志\",\"url\":\"//www.qdmm.com/free/all/tag61-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"坚毅\",\"url\":\"//www.qdmm.com/free/all/tag62-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"变身\",\"url\":\"//www.qdmm.com/free/all/tag63-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"强者回归\",\"url\":\"//www.qdmm.com/free/all/tag64-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"赚钱\",\"url\":\"//www.qdmm.com/free/all/tag65-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"争霸流\",\"url\":\"//www.qdmm.com/free/all/tag66-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"种田文\",\"url\":\"//www.qdmm.com/free/all/tag67-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"宅男\",\"url\":\"//www.qdmm.com/free/all/tag68-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"无限流\",\"url\":\"//www.qdmm.com/free/all/tag69-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"技术流\",\"url\":\"//www.qdmm.com/free/all/tag70-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"凡人流\",\"url\":\"//www.qdmm.com/free/all/tag71-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"热血\",\"url\":\"//www.qdmm.com/free/all/tag72-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"重生\",\"url\":\"//www.qdmm.com/free/all/tag73-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}},{\"title\":\"穿越\",\"url\":\"//www.qdmm.com/free/all/tag74-page{{page}}/\",\"style\":{\"layout_flexBasisPercent\":0.29}}]",
    "lastUpdateTime": 1773640189455,
    "loginUrl": "https://www.qidian.com/",
    "respondTime": 5508,
    "ruleBookInfo": {
      "author": "[property=\"og:novel:author\"]@content",
      "intro": "&nbsp;&nbsp;\n📕书      名：{{@@.book-info-top@id.bookName@text}}\n✏️作      者：{{@@.book-meta@.author@text##[作者:]*}}{{'\\n'+'​'}}\n\n📄作者信息：\n{{@@class.outer-intro@p@text}}\n*作品总数：{{@@class.work-number@em.1@text}}\n*累计字数：{{@@class.write@em@text}}\n*创作字数：{{@@class.days@em@text}}天\n🏷相关标签：{{@@class.book-attribute@text}}\n🔥总推荐数：{{@@class.count@em.1@text}}{{'\\n'+'​'}}\n📜简      介：\n{{@@class.intro@text}}{{'\\n'+'​'}}\n{{@@id.book-intro-detail@html}}",
      "kind": ".book-attribute@text&&[property=\"og:novel:update_time\"]@content",
      "lastChapter": "[property=\"og:novel:latest_chapter_name\"]@content",
      "name": "[property=\"og:novel:book_name\"]@content",
      "wordCount": "{{@@.count@em.0@text}}字"
    },
    "ruleContent": {
      "content": ".content@p@text"
    },
    "ruleExplore": {},
    "ruleSearch": {
      "author": ".author@.name.0@text",
      "bookList": ".book-img-text@ul@li",
      "bookUrl": ".book-info-title@a@href||.book-mid-info@a.0@href",
      "checkKeyWord": "开局圣人修为，女帝成了前妻",
      "intro": ".intro@text",
      "kind": ".author@a.1@text&&.author@span@text",
      "lastChapter": ".update@a@text",
      "name": ".book-info-title@a@text||.book-mid-info@a.0@text",
      "wordCount": "text.总字数@p@text##总字数"
    },
    "ruleToc": {
      "chapterList": "@css:\n#allCatalog>.catalog-volume>label,\n#allCatalog>.catalog-volume>ul\n@js:\nlist = [];\n$ = result;\nfor (i in $) {\n    if (/volume-name/.test(String($[i]))) {\n        text = \"🏮〖\" + String($[i].text()).replace(/订阅本卷.*/g, \"\").replace(/免费.*/g, \"免费\").trim() + \"〗🏮\";\n        list.push({\n            text: text,\n            volume: true\n        });\n    } else {  \n        $[i].select(\"li\").forEach(a => {     \n            info = String(a.select(\"a\").attr(\"title\")).replace(/.*时间：|章节/g, \"\");\n            vip = /chapter-locked/.test(a.select(\"em\"));\n            text = a.select(\"a\").text();\n            href = a.select(\"a\").attr(\"href\");\n            \n            // 根据VIP状态选择符号\n            if (vip) {\n                symbol = \"💎\";\n            } else {\n                symbol = \"💮\";\n            }\n            \n            // 计算填充空格数量，使符号与章节名称对齐\n            padding = \"  \".repeat(Math.max(0, text.length - symbol.length));\n            \n            // 组合符号和章节名称\n            formattedText = symbol + \"〖\" + text + padding + \"〗\" + symbol;\n            \n            // 添加到列表\n            list.push({   \n                text: formattedText,\n                href: href,\n                info: info,\n                vip: vip\n            });\n        });\n    }\n}\nlist",
      "chapterName": "text",
      "chapterUrl": "href",
      "isVolume": "volume",
      "updateTime": "info"
    },
    "searchUrl": "https://www.qidian.com/so/{{key}}.html?page={{page}},{\n  \"webView\": true\n}",
    "weight": 0
  },
  {
    "bookSourceGroup": "精品",
    "bookSourceName": "速读谷",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.sudugu.org",
    "customButton": false,
    "customOrder": 29,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"都市小说\",\"url\":\"/paihang/dushi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"玄幻小说\",\"url\":\"/paihang/xuanhuan-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"仙侠小说\",\"url\":\"/paihang/xianxia-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"轻小说\",\"url\":\"/paihang/qing-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"历史小说\",\"url\":\"/paihang/lishi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"科幻小说\",\"url\":\"/paihang/kehuan-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"诸天无限\",\"url\":\"/paihang/zhutianwuxian-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"游戏小说\",\"url\":\"/paihang/youxi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"奇幻小说\",\"url\":\"/paihang/qihuan-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"悬疑小说\",\"url\":\"/paihang/xuanyi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"体育小说\",\"url\":\"/paihang/tiyu-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"官场小说\",\"url\":\"/paihang/guanchang-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"军事小说\",\"url\":\"/paihang/junshi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"武侠小说\",\"url\":\"/paihang/wuxia-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"乡村小说\",\"url\":\"/paihang/xiangcun-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"现实小说\",\"url\":\"/paihang/xianshi-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}},\n{\"title\":\"言情小说\",\"url\":\"/paihang/yanqing-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.4}}]",
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\"\n}",
    "lastUpdateTime": 1774021771937,
    "respondTime": 4872,
    "ruleBookInfo": {
      "author": "class.itemtxt@tag.p.1@tag.a@text",
      "coverUrl": "class.item@tag.img@src",
      "downloadUrls": "class.op@tag.a.1@href\n<js>\nvar url=book.origin+result[0];\nresult=java.ajax(url);\nresult;\n</js>\nid.list@tag.ul@tag.li@a@href",
      "intro": "class.des.0@html",
      "kind": "class.itemtxt@tag.p.0@tag.span.1@text&&class.itemtxt@tag.p.0@tag.span.0@text&&class.itemtxt@tag.i.2@text",
      "lastChapter": "class.itemtxt@tag.ul@tag.li.0@tag.a@text",
      "name": "class.itemtxt@tag.h1@tag.a@text",
      "tocUrl": "class.itemtxt@tag.h3@tag.a@href",
      "wordCount": "class.itemtxt@tag.h1@tag.i@text"
    },
    "ruleContent": {
      "content": "class.con@html##(本章完)",
      "nextContentUrl": "text.下一页@href"
    },
    "ruleExplore": {
      "author": ".itemtxt@p.1@text",
      "bookList": ".container@.item",
      "bookUrl": "a.0@href",
      "coverUrl": "class.item@tag.img@src",
      "kind": ".itemtxt@span.0@text&&.itemtxt@span.1@text&&class.itemtxt@tag.i.1@text",
      "lastChapter": ".itemtxt@ul@li.0@a@text",
      "name": "h3@a@text"
    },
    "ruleSearch": {
      "author": "class.itemtxt@tag.p.1@tag.a@text",
      "bookList": "class.item",
      "bookUrl": "class.itemtxt@tag.h3@tag.a@href",
      "coverUrl": "class.item@tag.img@src",
      "intro": "class.itemtxt@tag.p.0@text",
      "lastChapter": "class.itemtxt@tag.ul@tag.li.0@tag.a@text",
      "name": "class.itemtxt@tag.h3@tag.a@text"
    },
    "ruleToc": {
      "chapterList": "id.list@tag.ul@tag.li",
      "chapterName": "tag.a@text",
      "chapterUrl": "tag.a@href",
      "nextTocUrl": "text.下一页@href"
    },
    "searchUrl": "/i/sor.aspx?key={{key}}",
    "weight": 0
  },
  {
    "bookSourceComment": "搞不定搜索，百度后直接复制详情页看吧",
    "bookSourceGroup": "搜索链接规则为空",
    "bookSourceName": "爱奇小说网",
    "bookSourceType": 0,
    "bookSourceUrl": "https://m.aqxsw.com/",
    "customButton": false,
    "customOrder": 30,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "玄幻魔法::/fenlei/1/\n武侠修真::/fenlei/2/\n都市言情::/fenlei/3/\n历史军事::/fenlei/4/\n科幻恐怖::/fenlei/5/\n网游动漫::/fenlei/6/\n穿越言情::/fenlei/7/",
    "lastUpdateTime": 1770440607865,
    "respondTime": 3856,
    "ruleBookInfo": {
      "author": "class.info@tag.p.0@text##作者：",
      "coverUrl": "img@src",
      "intro": "class.introbar@text##简介：",
      "kind": "class.info@tag.p.1@text##类别：",
      "lastChapter": "class.newest@a@text",
      "name": "tag.h2@class.title@text",
      "tocUrl": "/index.html"
    },
    "ruleContent": {
      "content": "id.content@html",
      "nextContentUrl": "class.pagebar@a.-1@href",
      "title": ".title@text"
    },
    "ruleExplore": {
      "author": "class.info@tag.p.0@text##作者：",
      "bookList": "id.list@article",
      "bookUrl": "article@a@href",
      "coverUrl": "img@src",
      "intro": "class.intro@text##简介：",
      "name": "tag.h2@class.title@text"
    },
    "ruleToc": {
      "chapterList": "-class.chapter@li",
      "chapterName": "a@text",
      "chapterUrl": "a@href",
      "nextTocUrl": "class.right@a.-1@href"
    },
    "weight": 0
  },
  {
    "bookSourceName": "看书网",
    "bookSourceType": 0,
    "bookSourceUrl": "https://www.kanzh.com/",
    "customButton": false,
    "customOrder": 31,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "header": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0\n\n",
    "lastUpdateTime": 1772378348632,
    "respondTime": 8329,
    "ruleBookInfo": {
      "author": "class.fix@tag.p.0@text",
      "kind": "class.fix@tag.p.1@text",
      "lastChapter": "class.s4@text",
      "name": "class.top@text",
      "tocUrl": "class.first_txt@a@href"
    },
    "ruleContent": {
      "content": "<js>\nvar bes = result.match(/PHA\\+[A-Za-z0-9+\\/]+={0,2}/g);\nif (!bes) {\n    var ml = java.webView(null,baseUrl,null);\n    java.setContent(ml)\n    var txt = java.getString(\"#txt>p@text\");\n    java.longToast(\"正文解密失败，转为webView动态加载。\");\n} else {\nvar result = [];\nfor (var i = 0; i < bes.length; i++) {\n    // 遍历数组，使用阅读内置Base64解码方法\n    var bsej = java.base64Decode(bes[i]);\n    var txtt = String(bsej);\n    result.push(txtt);\n      }\n\tvar txt = result.join('\\n');\n}\ntxt;\n</js>",
      "nextContentUrl": "class.read_btn@tag.a.3@href"
    },
    "ruleSearch": {
      "author": "class.s3@text",
      "bookList": "class.txt-list txt-list-row5@li",
      "bookUrl": "class.s2@tag.a@href",
      "checkKeyWord": "我的",
      "kind": "class.s1@text",
      "lastChapter": "class.s4@text",
      "name": "class.s2@text"
    },
    "ruleToc": {
      "chapterList": "class.br-b-1",
      "chapterName": "tag.a@text",
      "chapterUrl": "a@onclick##(\\d+)##$1###\n@js:\nbook.bookUrl.replace(\"index\",result)",
      "nextTocUrl": "class.page_num@tag.a.1@href"
    },
    "searchUrl": "{{cookie.setCookie(source.key,source.getVariable())}}\n/search.html,{\n  \"body\": \"s={{key}}\",\n  \"method\": \"POST\"\n}",
    "weight": 0
  },
  {
    "bookSourceComment": "3qishu.com，qishu99.com，同一个站\n原本的手机版有信息错误并且实际上不能下载，我换成了电脑版，重写了除搜索地址外的全部代码，现在可以正常用了。\n（但是这样一来原来的发现页就不能用了，懒得再写于是把发现页删了）\n2026.1.20 @歌行灯",
    "bookSourceGroup": "📥 下载",
    "bookSourceName": "📥 奇书网",
    "bookSourceType": 3,
    "bookSourceUrl": "https://www.qishu99.cc",
    "customButton": false,
    "customOrder": 32,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "lastUpdateTime": 1768912368633,
    "respondTime": 3409,
    "ruleBookInfo": {
      "coverUrl": ".nrlist > dl > .pic > .pics3@src",
      "downloadUrls": "https://www.qishu99.cc{{@@text.进入小说下载地址@href}}\n<js>java.ajax(result)</js>\n.downlist[0,1]@li@strong@a@href",
      "intro": ".softsay_title > .softsayxq > .cont@text##声明：.*"
    },
    "ruleSearch": {
      "author": ".info@.xm@b@a.1@text",
      "bookList": ".slist",
      "bookUrl": ".info > h4 > a@href",
      "checkKeyWord": "重生空间",
      "coverUrl": ".pic > a > img@src",
      "intro": ".info@p.1@text##小说简介：|\\[.+TXT下载\\]",
      "kind": ".info@.xm@b@a.0@text&&.info@.l@text##发布时间：\\d{4}-\\d{2}-\\d{2} \\| 小说状态：(.+) \\| 小说格式：.+ \\| 小说大小：(.+)##$1,$2",
      "lastChapter": ".info@.l@font@text",
      "name": ".info > h4 > a@text##《(.+)》全本TXT电子书下载##$1###"
    },
    "searchUrl": "/e/search/index.php,{\n\t\"method\":\"post\",\n\t\"body\":\"show=title,softsay,softwriter&keyboard={{key}}&tbname=download&tempid=1&Submit22=搜索\"\n\t}",
    "weight": 0
  },
  {
    "bookSourceComment": "主站：https://www.aiqu999.com（似乎是一个会自动跳转可用链接的链接）\n备用网址：\n  - www.aiqu654.com\n  - www.aqxsw222.com\n  - www.727txt.com\n  - www.27txt.La\n  - www.527txt.com\n网站给出的防迷路网址：www.272txt.com",
    "bookSourceGroup": "🎉 精选",
    "bookSourceName": "🌈爱去小说",
    "bookSourceType": 3,
    "bookSourceUrl": "https://lt.aqxsw888.com/",
    "customButton": false,
    "customOrder": 33,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"最近更新–强推\",\"url\":\"/list-high-0-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":1}},{\"title\":\"耽美小说\",\"url\":\"/list-high-2-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}},{\"title\":\"女生小说\",\"url\":\"/list-high-1-{{page}}.html\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}},{\"title\":\"男生小说\",\"url\":\"#\",\"style\":{\"layout_flexGrow\":1,\"layout_flexBasisPercent\":0.25}}]",
    "lastUpdateTime": 1773590429203,
    "respondTime": 12094,
    "ruleBookInfo": {
      "canReName": "1",
      "downloadUrls": "<js>\nif(baseUrl.indexOf('read')>-1){\n\turl = book.origin + '/' +java.getString(\"@@.readcontent@a@href\")\n\thtml = java.ajax(url)\n\tresult = html.match(/var downloadurl = \"([\\s\\S]+?)\";/)[1]\n}else{\n\turl = baseUrl.replace(/.*-(\\d+).*/, \"https://www.527txt.com/txt-xx/softdownfree.asp?softid=$1&ckm=mianfei\")\n\thtml = java.ajax(url)\n\tjava.setContent(html)\n\tresult = java.getString(\"@@text.第一下载地址(首选)@href\")\n}\n</js>",
      "intro": "#mainDownInfo@center.0@html||.readcontent@html"
    },
    "ruleExplore": {
      "author": ".rt@text##作者：(\\w+)##$1###",
      "bookList": ".mainlist_li||.mainSoftName||.read-list",
      "bookUrl": "a.1@href||a@href",
      "intro": ".pk-word-break-all@text",
      "kind": ".pk-text-success@text",
      "name": "a.1@text||a@text||.rt@text##.*《|》.*|完结|\\+番外|强推"
    },
    "ruleSearch": {
      "author": "a.search-card-author@a@text##作者：",
      "bookList": "#searchmain > .search-card",
      "bookUrl": ".search-card-link@a@href",
      "intro": ".search-card-content@text",
      "kind": "{{@@class.search-card-category@tag.a@text}}",
      "lastChapter": ".search-card-date@.oldDate@text",
      "name": ".search-card-title@a@text##《|》"
    },
    "ruleToc": {
      "chapterList": "html",
      "chapterName": "{{'🐑完结'}}"
    },
    "searchUrl": "https://www.aqxsw888.com/search.asp?word={{key}},{\"charset\":\"gb2312\"}",
    "weight": 0
  },
  {
    "bookSourceComment": "如不能加载请尝试删除书籍，重新搜索添加",
    "bookSourceGroup": "⑦📚  出版",
    "bookSourceName": "📚豆瓣阅读",
    "bookSourceType": 0,
    "bookSourceUrl": "https://read.douban.com",
    "bookUrlPattern": "https://read.douban.com/(ebook|read|column).*",
    "customButton": false,
    "customOrder": 34,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{'title':'今日限免','url':'https://read.douban.com/j/index/featured/?start=6'},{'title':'言情小说','url':'https://read.douban.com/kind/501?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'女性小说','url':'https://read.douban.com/kind/532?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'悬疑小说','url':'https://read.douban.com/kind/508?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'科幻小说','url':'https://read.douban.com/kind/505?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'幻想小说','url':'https://read.douban.com/kind/506?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'文艺小说','url':'https://read.douban.com/kind/503?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'历史小说','url':'https://read.douban.com/kind/510?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'非小说','url':'https://read.douban.com/kind/516?start={{(page-1)*20}}&sort=hot&promotion_only=False&min_price=None&max_price=None&works_type=1,{\\'headers\\':\\'{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 8.1.0; JKM-AL00b Build/HUAWEIJKM-AL00b; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36\"}\\'}','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'生活悬疑','url':'https://read.douban.com/j/tag/生活悬疑?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'都市犯罪','url':'https://read.douban.com/j/tag/都市犯罪?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'社会事件','url':'https://read.douban.com/j/tag/社会事件?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'私家侦探','url':'https://read.douban.com/j/tag/私家侦探?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'职业女性','url':'https://read.douban.com/j/tag/职业女性?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'单身女性','url':'https://read.douban.com/j/tag/单身女性?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'女性成长','url':'https://read.douban.com/j/tag/女性成长?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'家庭故事','url':'https://read.douban.com/j/tag/家庭故事?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'时空穿越','url':'https://read.douban.com/j/tag/时空穿越?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'都市奇幻','url':'https://read.douban.com/j/tag/都市奇幻?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'脑洞故事','url':'https://read.douban.com/j/tag/脑洞故事?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'近未来','url':'https://read.douban.com/j/tag/近未来?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'青春成长','url':'https://read.douban.com/j/tag/青春成长?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'都市冷暖','url':'https://read.douban.com/j/tag/都市冷暖?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'漂泊故事','url':'https://read.douban.com/j/tag/漂泊故事?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'时代记忆','url':'https://read.douban.com/j/tag/时代记忆?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'武侠小说','url':'https://read.douban.com/j/tag/武侠小说?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'历史纪实','url':'https://read.douban.com/j/tag/历史纪实?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'历史言情','url':'https://read.douban.com/j/tag/历史言情?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}},\n{'title':'历史传奇','url':'https://read.douban.com/j/tag/历史传奇?start={{(page-1)*10}}&limit={{(page)*10}}&sort=top','style':{layout_flexGrow: 1,layout_flexBasisPercent:0.2}}]",
    "jsLib": "function getImage(text){\n  return `<img src=\"data:image/svg+xml;base64,,{\"type\":\"zs\",\"style\":\"text\",\"js\":\"book?getSvg(\\`${text}\\`,1):getSvg(\\`${text}\\`,0)\"}\">`;\n}\n\n\nfunction getSvg(text,f){\n    const {java} = this;\n    let color = [\"#B2B2B2\",\"#707070\"];\n\tlet svg = `\n  <svg width=\"1000\" height=\"800\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M865 100 h-600c-60 0-110 50-110 110v150l-120 80 120 80v150c0 60 50 110 110 110h600c60 0 110-50 110-110V210c0-60-50-110-110-110z  \" fill=\"none\" stroke=\"${color[0]}\" stroke-width=\"55\"/>\n    <text x=\"570\" y=\"565\" font-family=\"Roboto Condensed\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"420\" font-weight=\"bold\" fill=\"${color[1]}\">\n      注\n    </text>\n  </svg>\n`;\nif(f){\n\tjava.longToast(\"\\n\\n\"+text)\n\t}\n    return \"data:image/svg+xml;base64,\" + java.base64Encode(svg);\n}",
    "lastUpdateTime": 1768918267737,
    "loginUrl": "https://read.douban.com/app",
    "respondTime": 2149,
    "ruleBookInfo": {
      "author": "class.author.0@class.author-item@text",
      "coverUrl": "class.cover shadow-cover@img@src",
      "intro": "{{@class.section-abstract@html||class.abstract-full@html||class.intro@html}}<br>{{@class.rally-waiting-tip@html}}",
      "kind": "@js:\nis_bundle = /bundle/.test(\"{{//link[@rel=\"alternate\"]/@href}}\");\nis_bundle?java.put(\"is_bundle\",is_bundle):java.put(\"is_bundle\",\"false\");\"\"",
      "lastChapter": "class.current-price-count@text##^##全本定价:",
      "name": "<js>\nr = result.match(/Ark.CSRF_TOKEN = '([^']+)'/)[1];\njava.put(\"X-CSRF-TOKEN\",r);\njava.getString(\"@class.article-title@text\")\n</js>",
      "tocUrl": "@js:\n\nif(java.get(\"is_bundle\")==\"false\"){\n\t\nid=baseUrl.match(/(\\d+)/)[1];\nif(baseUrl.match(/ebook/)){result=baseUrl}else{\nresult=\"https://read.douban.com/j/column_v2/\"+id+\"/chapters?start=0&limit=10000&latestFirst=0\";}\n}else{\n\tresult = baseUrl\n\t}"
    },
    "ruleContent": {
      "content": "<js>\nif(java.get(\"is_bundle\")==\"false\"){\nhtml = java.ajax(\"https://read.douban.com\");\neval(html.match(/Ark\\.(user = \\{[\\s\\S]+?\\})/)[1]);\ncok = user.id??\"anonymous\";\nt = String(java.getString(\"$.data\"));\nfunction name(){\n  try {\n    const decodedBytes = java.base64DecodeToByteArray(t);\n    const totalLen = decodedBytes.length;\n    const ivStart = totalLen - 16 - 13;\n    const ivBytes = decodedBytes.slice(ivStart, ivStart + 16);\n    const encryptedBytes = decodedBytes.slice(0, ivStart);    \n    const hashedKey = java.digestHex(cok, \"SHA-256\");   \n    const cipher = java.createSymmetricCrypto(\"AES/CBC/PKCS5Padding\", \n        java.hexDecodeToByteArray(hashedKey), \n        ivBytes\n    );\n    \n    const decryptedStr = cipher.decryptStr(encryptedBytes);\n    const jsonObj = JSON.parse(decryptedStr);\n    result = JSON.stringify(jsonObj.posts[0].contents);\n    \n} catch (e) {\n    java.log(\"解密错误: \" + e);\n    result = null;\n}\nreturn result\n}\nddd = name();\nconst bbb = book.getVariable(\"custom\");\nconst sss = source.getVariable();\n\n\n/*\n规范Json数据\nconst pattern = /:\"([\\s\\S]+?)\"(,\"|\\}|\\])/g;\nddd = String(ddd).replace(pattern, (match, content,suffix) => {\n  let replacedContent = content.replace(/\"/g, '\\\\\"');\n  return `:\"${replacedContent}\"${suffix}`;\n}).replace(/\\n+/g,'\\\\n').replace(/[\\x00-\\x1F\\x7F]/g,'');\n*/\n\t\nvar data = JSON.parse(String(ddd));\nfunction extractContent(item) {\n    const textList = item.data?.text;  \n    const process = (content) => {\n        if (typeof content === 'string') {    \t\n        \t    if(content==\"\"){   \t    \t\n        \t    \tcontent =\"\\n&lrm;\\n\"   \t    \t\n        \t    \t}\n            return content;\n        }\n        if (Array.isArray(content)) {\n            return content.map(process).join('');\n        }\n        if (content && (content.content || content.content===\"\")) {\n          \t let c;   \t  \n        \t  if(content.kind == \"footnote\"){\n        \t  \t try{\n        \t  \t \t    book.getVariable();\n        \t  \t \t    c = getImage(content.content)\n        \t  \t \t}catch(e){}\n         \t  \t\n        \t  \t if(/1/.test(sss)||/1/.test(bbb))c = \"【*\"+content.content+\"】\"\n        \t  \t}else{\n        \t  \t\tc = content.content\n        \t  \t\t}\n            return process(c);\n        }\n        return '';\n    };\n    return  process(textList);\n}\n\n\nfunction getChapterContent(chapterNumber) {\n    let chapterContent = [];\n    let currentChapter = -1;\n    let isFirstHeadlineFound = false;\n\n    for (let i = 0; i < data.length; i++) {\n        let item = data[i];\n        \n        if (item.type === 'headline') {\n            currentChapter++;\n            if (!isFirstHeadlineFound) {\n                isFirstHeadlineFound = true;\n            }\n            if (currentChapter > chapterNumber) {\n                break;\n            }\n        }\n        if ((currentChapter === chapterNumber) || (chapterNumber === 0 && !isFirstHeadlineFound && item.type !== 'headline')) {\n                if(item.type === \"illus\")chapterContent.push(`<img src=\"${item.data?.size.orig.src}\">\\n`);\n                if(item.type !== 'headline')chapterContent.push(extractContent(item));\n            \n        }\n    }\n    return chapterContent.length > 0 ? chapterContent.join('\\n') : null;\n}\n\nresult = \"\";\n// 检查是否需要使用章节逻辑\nif (book.bookUrl.includes(\"ebook\")) {    \n    let index = chapter.index;\n    result = getChapterContent(index);\n} else {\n    // 遍历数据，提取并拼接 content\n    data.forEach(item => {\n            if(item.type === \"illus\")result += `<img src=\"${item.data?.size.orig.src}\">\\n`\n            result += extractContent(item) + \"\\n\"; // 每个段落换行\n        \n    });\n}\n\n}else{\n\tbookName = java.getString(\"@class.article-title@text\");\n\tbookAuthor = java.getString(\"@class.author-item@text\");\n\timgSrc = java.getString(\"@class.cover shadow-cover@img@src\");\n\tinfo = java.getString(\"@class.info@p@text\");\n\tresult = `❗️刷新本章跳转加入书架界面❗️\\n书名：${bookName}\\n作者：${bookAuthor}\\n<img src=\"${imgSrc}\">\\n简介：\\n${info}`\n\t\tif(book.durChapterIndex === chapter.index){\n\t\turl = \"legado://import/addToBookshelf?src=\"+baseUrl;\n\t\tscript = `data:text/html;charset=utf-8,\n\t\t<html>\n\t\t<title>《${bookName}》加入书架</title>\t\t\n\t\t<img src=\"${imgSrc}\" style=\"max-width: 300px; max-height: 400px\">\n\t\t<p style=\"text-align: center;\"><a href=\"${url}\" style=\"font-size:50px;\">跳转加入书架</a></p>\n\t\t<p style=\"font-size:60px\">简介：${info}\n\t\t</p>\t\t\t\t\n\t\t</html>\n\t\t<script>\n        window.onload = function () {\n            window.location.href = '${url}';\n        };\n    </script>`;    \n\t\tjava.startBrowser(script,\"《\"+bookName+\"》\")\t\t\n\t\t}\t\t\n\t}\nresult\n\n</js>",
      "imageStyle": "FULL"
    },
    "ruleExplore": {
      "author": "class.author@text||$.author[0].name||$.author",
      "bookList": "<js>\nif(/featured/.test(baseUrl)){\n\tworkid = String(java.getString(\"$..todayWorksIds[*]\")).split(\"\\n\");\n\t\n\tbody = {\n  \"variables\": {\n    \"worksIds\": workid\n  },\n  \"query\": \"\\n          query getWorksList($worksIds: [ID!]) {\\n            worksList(worksIds: $worksIds) {\\n              \\n                  id\\n                  \\n    id\\n    isOrigin\\n    isEssay\\n    \\n    title\\n    cover(useSmall: false)\\n    url\\n    isBundle\\n    coverLabel(preferVip: false)\\n  \\n    \\n  url\\n  title\\n\\n    \\n  author {\\n    name\\n    url\\n  }\\n  origAuthor {\\n    name\\n    url\\n  }\\n  translator {\\n    name\\n    url\\n  }\\n\\n    \\n  abstract\\n  authorHighlight\\n  editorHighlight\\n\\n    \\n    isOrigin\\n    kinds {\\n      \\n    name @skip(if: true)\\n    shortName @include(if: true)\\n    id\\n  \\n    }\\n    ... on WorksBase @include(if: true) {\\n      wordCount\\n      wordCountUnit\\n    }\\n    ... on WorksBase @include(if: false) {\\n      inLibraryCount\\n    }\\n    ... on WorksBase @include(if: true) {\\n      \\n    isEssay\\n    \\n    ... on EssayWorks {\\n      favorCount\\n    }\\n  \\n    \\n    \\n    averageRating\\n    ratingCount\\n    url\\n    isColumn\\n    isFinished\\n  \\n  \\n  \\n    }\\n    ... on EbookWorks @include(if: false) {\\n      \\n    ... on EbookWorks {\\n      book {\\n        url\\n        averageRating\\n        ratingCount\\n      }\\n    }\\n  \\n    }\\n    ... on WorksBase @include(if: false) {\\n      isColumn\\n      isEssay\\n      onSaleTime\\n      ... on ColumnWorks {\\n        updateTime\\n      }\\n    }\\n    ... on WorksBase @include(if: true) {\\n      isColumn\\n      ... on ColumnWorks {\\n        isFinished\\n      }\\n    }\\n    ... on EssayWorks {\\n      essayActivityData {\\n        \\n    title\\n    uri\\n    tag {\\n      name\\n      color\\n      background\\n      icon2x\\n      icon3x\\n      iconSize {\\n        height\\n      }\\n      iconPosition {\\n        x y\\n      }\\n    }\\n  \\n      }\\n    }\\n    highlightTags {\\n      name\\n    }\\n    ... on WorksBase @include(if: false) {\\n      fanfiction {\\n        tags {\\n          id\\n          name\\n          url\\n        }\\n      }\\n    }\\n  \\n    \\n  ... on WorksBase {\\n    copyrightInfo {\\n      newlyAdapted\\n      newlyPublished\\n      adaptedName\\n      publishedName\\n    }\\n  }\\n\\n    \\n    ... on WorksBase @include(if: false) {\\n      \\n    fixedPrice\\n    salesPrice\\n    isRebate\\n    realPrice {\\n      price\\n      priceType\\n    }\\n  \\n    }\\n    ... on EbookWorks {\\n      \\n    fixedPrice\\n    salesPrice\\n    isRebate\\n    realPrice {\\n      price\\n      priceType\\n    }\\n  \\n    }\\n    ... on WorksBase @include(if: false) {\\n      ... on EbookWorks {\\n        id\\n        isPurchased\\n        isInWishlist\\n      }\\n    }\\n    ... on WorksBase @include(if: false) {\\n      fanfiction {\\n        fandoms {\\n          title\\n          url\\n        }\\n      }\\n    }\\n    ... on WorksBase @include(if: false) {\\n      fanfiction {\\n        kudoCount\\n      }\\n    }\\n  \\n                \\n            }\\n          }\\n        \",\n  \"operationName\": \"getWorksList\"\n}\nheaders={}\n\nfunction getFree(headers){\n\turl = \"https://read.douban.com/j/graphql\",\n\toption = {\n\t\t\"method\":\"POST\",\n\t\t\"body\":body\n\t\t}\n\t\tif(headers)option[\"headers\"]=headers;\n\t\turl = url+\",\"+JSON.stringify(option)\n   return\tjava.ajax(url);\n}\nresult = getFree(headers);\nif(/登录状态异常/.test(result)){\n\tx = result.match(/Ark.CSRF_TOKEN = '([^']+)'/)[1];\n\theaders[\"x-csrf-token\"] = x;\n\tresult = getFree(headers);\n\t}\n\t}\n\tresult\n</js>\nclass.item||$.data.worksList[*]||$.[?(@.alias_id)]",
      "bookUrl": "@js:\nresult = java.getString(\"@href||$.url\");\n\nif(!String(result)){\n\tresult = \"https://read.douban.com/column/{{$.alias_id||$.id}}/\"\n\t}\njava.put('is_bundle',/bundle/.test(result));\nresult",
      "coverUrl": "img@src||$.cover",
      "intro": "class.intro@text||$.abstract",
      "kind": "{{@@class.tag@text}},{{@@class.score@text}},{{@@class.amount}},{{@@class.price@text}},{{$.kind&&$.category&&$.tags[*].tag&&$.kinds[*].shortName&&$.highlightTags[*].name}}##(\\d+\\.\\d{2})##$1元💰",
      "name": "class.title@html||$.title##<span class=\"tag\">.*?</span>|<.*?>"
    },
    "ruleSearch": {
      "author": "$.author",
      "bookList": "$.[*]",
      "bookUrl": "https://read.douban.com/{{$.type}}/{{$.id}}/",
      "checkKeyWord": "红楼梦",
      "coverUrl": "$.cover",
      "intro": "$.abstract",
      "kind": "{{String(java.getString(\"$.fixed_price\"))===\"false\"?\"免费\":\"原价:\"+(Number(java.getString(\"$.fixed_price\"))/100)+\"元\"+\"💡特价:\"+(Number(java.getString(\"$.price\"))/100)+\"元\"}},{{$.tags[*].tag&&$.kind&&$.category}}",
      "lastChapter": "@js:\nString(java.getString(\"$.fixed_price\"))===\"false\"?\"免费\":\"原价:\"+(Number(java.getString(\"$.fixed_price\"))/100)+\"元\"+\"💡特价:\"+(Number(java.getString(\"$.price\"))/100)+\"元\"",
      "name": "$.title",
      "wordCount": "@js:\n\"{{$..is_bundle}}\"!=\"\"?java.put(\"is_bundle\",\"{{$..is_bundle}}\"):java.put(\"is_bundle\",\"false\");\"\""
    },
    "ruleToc": {
      "chapterList": "<js>\nresult = java.getElements(\"@class.story-item@a||class.ebook-list@li\");\nif(!result.length){\n\t\tresult = java.getElements(\"$.list[*]\")\n\t\t}\n\t\t\nif(result.length===0){\n  java.setContent('<a href=\"ebook/0/toc/0\">暂无目录</a>');\n\tresult = java.getElements(\"@@tag.a\")\n\t}\nresult;\n</js>",
      "chapterName": "img@alt||text||title",
      "chapterUrl": "<js>\nif(java.get(\"is_bundle\")==\"false\"){\naid = \"{{$.id}}\"==\"\"?\"{{@@href}}\".match(/ebook\\/(\\d+)/)[1]:\"{{$.id}}\";\n\nid=\"{{$.id}}\"==\"\"?\"{{@@href}}\".match(/ebook\\/\\d+\\/toc\\/(\\d+)/)[1]:\"\";\nurl = \"https://read.douban.com/j/article_v2/get_reader_data\";\nbody = \"aid=\"+aid;\nresult = url +\",\"+ JSON.stringify({\n\t\"method\":\"POST\",\n\t\"body\":String(body),\n\t\"headers\":{\n\t\t\"referer\":\"https://read.douban.com/reader/column/{{baseUrl.match(/\\/(\\d+)\\//)[1]}}/chapter/\"+(id!=\"\"?id:aid)+\"/\",\n\t\t\"X-CSRF-TOKEN\":java.get(\"X-CSRF-TOKEN\")\n\t\t}\n\t});\n\t}else{\n\t\tresult = java.getString(\"@tag.a.0@href\")\n\t\t}\n</js>",
      "isVip": "$.price"
    },
    "searchUrl": "https://read.douban.com/j/search?start={{(page-1)*10}}&limit=10&query={{key}}",
    "variableComment": "1、设置书籍变量【当前书】\n2、设置源变量【所有书】\n\n❗️填写 1 开启全文显示注释\n❗️填写后缓存过的正文要刷新才能显示",
    "weight": 0
  },
  {
    "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": 35,
    "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": 7188,
    "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
  },
  {
    "bookSourceComment": "flag = 1\ni = \"錒皚藹礙愛噯嬡璦曖靄諳銨鵪骯襖奧媼驁鰲壩罷鈀擺敗唄頒辦絆鈑幫綁鎊謗剝飽寶報鮑鴇齙輩貝鋇狽備憊鵯賁錛繃筆畢斃幣閉蓽嗶潷鉍篳蹕邊編貶變辯辮芐緶籩標驃颮飆鏢鑣鰾鱉別癟瀕濱賓擯儐繽檳殯臏鑌髕鬢餅稟撥缽鉑駁餑鈸鵓補鈽財參蠶殘慚慘燦驂黲蒼艙倉滄廁側冊測惻層詫鍤儕釵攙摻蟬饞讒纏鏟產闡顫囅諂讖蕆懺嬋驏覘禪鐔場嘗長償腸廠暢倀萇悵閶鯧鈔車徹硨塵陳襯傖諶櫬磣齔撐稱懲誠騁棖檉鋮鐺癡遲馳恥齒熾飭鴟沖衝蟲寵銃疇躊籌綢儔幬讎櫥廚鋤雛礎儲觸處芻絀躕傳釧瘡闖創愴錘綞純鶉綽輟齪辭詞賜鶿聰蔥囪從叢蓯驄樅湊輳躥竄攛錯銼鹺達噠韃帶貸駘紿擔單鄲撣膽憚誕彈殫賧癉簞當擋黨蕩檔讜碭襠搗島禱導盜燾燈鄧鐙敵滌遞締糴詆諦綈覿鏑顛點墊電巔鈿癲釣調銚鯛諜疊鰈釘頂錠訂鋌丟銩東動棟凍崠鶇竇犢獨讀賭鍍瀆櫝牘篤黷鍛斷緞籪兌隊對懟鐓噸頓鈍燉躉奪墮鐸鵝額訛惡餓諤堊閼軛鋨鍔鶚顎顓鱷誒兒爾餌貳邇鉺鴯鮞發罰閥琺礬釩煩販飯訪紡鈁魴飛誹廢費緋鐨鯡紛墳奮憤糞僨豐楓鋒風瘋馮縫諷鳳灃膚輻撫輔賦復負訃婦縛鳧駙紱紼賻麩鮒鰒釓該鈣蓋賅桿趕稈贛尷搟紺岡剛鋼綱崗戇鎬睪誥縞鋯擱鴿閣鉻個紇鎘潁給亙賡綆鯁龔宮鞏貢鉤溝茍構購夠詬緱覯蠱顧詁轂鈷錮鴣鵠鶻剮掛鴰摑關觀館慣貫詿摜鸛鰥廣獷規歸龜閨軌詭貴劊匭劌媯檜鮭鱖輥滾袞緄鯀鍋國過堝咼幗槨蟈鉿駭韓漢闞絎頡號灝顥閡鶴賀訶闔蠣橫轟鴻紅黌訌葒閎鱟壺護滬戶滸鶘嘩華畫劃話驊樺鏵懷壞歡環還緩換喚瘓煥渙奐繯鍰鯇黃謊鰉揮輝毀賄穢會燴匯諱誨繪詼薈噦澮繢琿暉葷渾諢餛閽獲貨禍鈥鑊擊機積饑跡譏雞績緝極輯級擠幾薊劑濟計記際繼紀訐詰薺嘰嚌驥璣覬齏磯羈蠆躋霽鱭鯽夾莢頰賈鉀價駕郟浹鋏鎵蟯殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗諫縑戔戩瞼鶼筧鰹韉將漿蔣槳獎講醬絳韁膠澆驕嬌攪鉸矯僥腳餃繳絞轎較撟嶠鷦鮫階節潔結誡屆癤頜鮚緊錦僅謹進晉燼盡勁荊莖巹藎饉縉贐覲鯨驚經頸靜鏡徑痙競凈剄涇逕弳脛靚糾廄舊鬮鳩鷲駒舉據鋸懼劇詎屨櫸颶鉅鋦窶齟鵑絹錈鐫雋覺決絕譎玨鈞軍駿皸開凱剴塏愾愷鎧鍇龕閌鈧銬顆殼課騍緙軻鈳錁頷墾懇齦鏗摳庫褲嚳塊儈鄶噲膾寬獪髖礦曠況誆誑鄺壙纊貺虧巋窺饋潰匱蕢憒聵簣閫錕鯤擴闊蠐蠟臘萊來賴崍徠淶瀨賚睞錸癩籟藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫嵐欖斕鑭襤瑯閬鋃撈勞澇嘮嶗銠鐒癆樂鰳鐳壘類淚誄縲籬貍離鯉禮麗厲勵礫歷瀝隸儷酈壢藶蒞蘺嚦邐驪縭櫪櫟轢礪鋰鸝癘糲躒靂鱺鱧倆聯蓮連鐮憐漣簾斂臉鏈戀煉練蘞奩瀲璉殮褳襝鰱糧涼兩輛諒魎療遼鐐繚釕鷯獵臨鄰鱗凜賃藺廩檁轔躪齡鈴靈嶺領綾欞蟶鯪餾劉瀏騮綹鎦鷚龍聾嚨籠壟攏隴蘢瀧瓏櫳朧礱樓婁摟簍僂蔞嘍嶁鏤瘺耬螻髏蘆盧顱廬爐擄鹵虜魯賂祿錄陸壚擼嚕閭瀘淥櫨櫓轤輅轆氌臚鸕鷺艫鱸巒攣孿灤亂臠孌欒鸞鑾掄輪倫侖淪綸論圇蘿羅邏鑼籮騾駱絡犖玀濼欏腡鏍驢呂鋁侶屢縷慮濾綠櫚褸鋝嘸媽瑪碼螞馬罵嗎嘜嬤榪買麥賣邁脈勱瞞饅蠻滿謾縵鏝顙鰻貓錨鉚貿麼沒鎂門悶們捫燜懣鍆錳夢瞇謎彌覓冪羋謐獼禰綿緬澠靦黽廟緲繆滅憫閩閔緡鳴銘謬謨驀饃歿鏌謀畝鉬吶鈉納難撓腦惱鬧鐃訥餒內擬膩鈮鯢攆輦鯰釀鳥蔦裊聶嚙鑷鎳隉蘗囁顢躡檸獰寧擰濘苧嚀聹鈕紐膿濃農儂噥駑釹諾儺瘧歐鷗毆嘔漚謳慪甌盤蹣龐拋皰賠轡噴鵬紕羆鈹騙諞駢飄縹頻貧嬪蘋憑評潑頗釙撲鋪樸譜鏷鐠棲臍齊騎豈啟氣棄訖蘄騏綺榿磧頎頏鰭牽釬鉛遷簽謙錢鉗潛淺譴塹僉蕁慳騫繾槧鈐槍嗆墻薔強搶嬙檣戧熗錆鏘鏹羥蹌鍬橋喬僑翹竅誚譙蕎繰磽蹺竊愜鍥篋欽親寢鋟輕氫傾頃請慶撳鯖瓊窮煢蛺巰賕蟣鰍趨區軀驅齲詘嶇闃覷鴝顴權勸詮綣輇銓卻鵲確闋闕愨讓饒擾繞蕘嬈橈熱韌認紉飪軔榮絨嶸蠑縟銣顰軟銳蜆閏潤灑薩颯鰓賽傘毿糝喪騷掃繅澀嗇銫穡殺剎紗鎩鯊篩曬釃刪閃陜贍繕訕姍騸釤鱔墑傷賞坰殤觴燒紹賒攝懾設厙灄畬紳審嬸腎滲詵諗瀋聲繩勝師獅濕詩時蝕實識駛勢適釋飾視試謚塒蒔弒軾貰鈰鰣壽獸綬樞輸書贖屬術樹豎數攄紓帥閂雙誰稅順說碩爍鑠絲飼廝駟緦鍶鷥聳慫頌訟誦擻藪餿颼鎪蘇訴肅謖穌雖隨綏歲誶孫損筍蓀猻縮瑣鎖嗩脧獺撻闥鉈鰨臺態鈦鮐攤貪癱灘壇譚談嘆曇鉭錟頇湯燙儻餳鐋鏜濤絳討韜鋱騰謄銻題體屜緹鵜闐條糶齠鰷貼鐵廳聽烴銅統慟頭鈄禿圖釷團摶頹蛻飩脫鴕馱駝橢籜鼉襪媧膃彎灣頑萬紈綰網輞韋違圍為濰維葦偉偽緯謂衛諉幃闈溈潿瑋韙煒鮪溫聞紋穩問閿甕撾蝸渦窩臥萵齷嗚鎢烏誣無蕪吳塢霧務誤鄔廡憮嫵騖鵡鶩錫犧襲習銑戲細餼鬩璽覡蝦轄峽俠狹廈嚇硤鮮纖賢銜閑顯險現獻縣餡羨憲線莧薟蘚峴獫嫻鷴癇蠔秈躚廂鑲鄉詳響項薌餉驤緗饗蕭囂銷曉嘯嘵瀟驍綃梟簫協挾攜脅諧寫瀉謝褻擷紲纈鋅釁興陘滎兇洶銹繡饈鵂虛噓須許敘緒續詡頊軒懸選癬絢諼鉉鏇學謔澩鱈勛詢尋馴訓訊遜塤潯鱘壓鴉鴨啞亞訝埡婭椏氬閹煙鹽嚴巖顏閻艷厭硯彥諺驗厴贗儼兗讞懨閆釅魘饜鼴鴦楊揚瘍陽癢養樣煬瑤搖堯遙窯謠藥軺鷂鰩爺頁業葉靨謁鄴曄燁醫銥頤遺儀蟻藝億憶義詣議誼譯異繹詒囈嶧飴懌驛縊軼貽釔鎰鐿瘞艤蔭陰銀飲隱銦癮櫻嬰鷹應纓瑩螢營熒蠅贏穎塋鶯縈鎣攖嚶瀅瀠瓔鸚癭頦罌喲擁傭癰踴詠鏞優憂郵鈾猶誘蕕銪魷輿魚漁娛與嶼語獄譽預馭傴俁諛諭蕷崳飫閾嫗紆覦歟鈺鵒鷸齬鴛淵轅園員圓緣遠櫞鳶黿約躍鑰粵悅閱鉞鄖勻隕運蘊醞暈韻鄆蕓惲慍紜韞殞氳雜災載攢暫贊瓚趲鏨贓臟駔鑿棗責擇則澤賾嘖幘簀賊譖贈綜繒軋鍘閘柵詐齋債氈盞斬輾嶄棧戰綻譫張漲帳賬脹趙詔釗蟄轍鍺這謫輒鷓貞針偵診鎮陣湞縝楨軫賑禎鴆掙睜猙爭幀癥鄭證諍崢鉦錚箏織職執紙摯擲幟質滯騭櫛梔軹輊贄鷙螄縶躓躑觶鐘終種腫眾鍾謅軸皺晝驟紂縐豬諸誅燭矚囑貯鑄駐佇櫧銖專磚轉賺囀饌顳樁莊裝妝壯狀錐贅墜綴騅縋諄準著濁諑鐲茲資漬諮緇輜貲眥錙齜鯔蹤總縱傯鄒諏騶鯫詛組鏃鉆纘躦鱒翺並蔔沈醜澱叠鬥範幹臯矽櫃後夥稭傑訣誇裏淩麽黴撚淒扡聖屍擡塗窪餵汙鍁鹹蠍彜湧遊籲禦願嶽雲竈紮劄築於誌註雕訁譾郤猛氹阪壟堖垵墊檾蕒葤蓧蒓菇槁摣咤唚哢噝噅撅噼謔襆嶴脊仿僥獁麅餘餷饊饢楞怵懍爿漵灩溷濫瀦淡寧糸絝緔瑉梘棬案橰櫫軲軤賫膁腖飈糊煆溜湣渺碸滾瞘鈈鉕鋣銱鋥鋶鐦鐧鍩鍀鍃錇鎄鎇鎿鐝鑥鑹鑔穭鶓鶥鸌癧屙瘂臒襇繈耮顬蟎麯鮁鮃鮎鯗鯝鯴鱝鯿鰠鰵鱅鞽韝齇葯慾裡姊佔徵唷勐砲髮澹噁姦乾鬆姪囉\";\nz = \"锕皑蔼碍爱嗳嫒瑷暧霭谙铵鹌肮袄奥媪骜鳌坝罢钯摆败呗颁办绊钣帮绑镑谤剥饱宝报鲍鸨龅辈贝钡狈备惫鹎贲锛绷笔毕毙币闭荜哔滗铋筚跸边编贬变辩辫苄缏笾标骠飑飙镖镖鳔鳖别瘪濒滨宾摈傧缤槟殡膑镔髌鬓饼禀拨钵铂驳饽钹鹁补钸财参蚕残惭惨灿骖黪苍舱仓沧厕侧册测恻层诧锸侪钗搀掺蝉馋谗缠铲产阐颤冁谄谶蒇忏婵骣觇禅镡场尝长偿肠厂畅伥苌怅阊鲳钞车彻砗尘陈衬伧谌榇碜龀撑称惩诚骋枨柽铖铛痴迟驰耻齿炽饬鸱冲冲虫宠铳畴踌筹绸俦帱雠橱厨锄雏础储触处刍绌蹰传钏疮闯创怆锤缍纯鹑绰辍龊辞词赐鹚聪葱囱从丛苁骢枞凑辏蹿窜撺错锉鹾达哒鞑带贷骀绐担单郸掸胆惮诞弹殚赕瘅箪当挡党荡档谠砀裆捣岛祷导盗焘灯邓镫敌涤递缔籴诋谛绨觌镝颠点垫电巅钿癫钓调铫鲷谍叠鲽钉顶锭订铤丢铥东动栋冻岽鸫窦犊独读赌镀渎椟牍笃黩锻断缎簖兑队对怼镦吨顿钝炖趸夺堕铎鹅额讹恶饿谔垩阏轭锇锷鹗颚颛鳄诶儿尔饵贰迩铒鸸鲕发罚阀珐矾钒烦贩饭访纺钫鲂飞诽废费绯镄鲱纷坟奋愤粪偾丰枫锋风疯冯缝讽凤沣肤辐抚辅赋复负讣妇缚凫驸绂绋赙麸鲋鳆钆该钙盖赅杆赶秆赣尴擀绀冈刚钢纲岗戆镐睾诰缟锆搁鸽阁铬个纥镉颍给亘赓绠鲠龚宫巩贡钩沟苟构购够诟缑觏蛊顾诂毂钴锢鸪鹄鹘剐挂鸹掴关观馆惯贯诖掼鹳鳏广犷规归龟闺轨诡贵刽匦刿妫桧鲑鳜辊滚衮绲鲧锅国过埚呙帼椁蝈铪骇韩汉阚绗颉号灏颢阂鹤贺诃阖蛎横轰鸿红黉讧荭闳鲎壶护沪户浒鹕哗华画划话骅桦铧怀坏欢环还缓换唤痪焕涣奂缳锾鲩黄谎鳇挥辉毁贿秽会烩汇讳诲绘诙荟哕浍缋珲晖荤浑诨馄阍获货祸钬镬击机积饥迹讥鸡绩缉极辑级挤几蓟剂济计记际继纪讦诘荠叽哜骥玑觊齑矶羁虿跻霁鲚鲫夹荚颊贾钾价驾郏浃铗镓蛲歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧谏缣戋戬睑鹣笕鲣鞯将浆蒋桨奖讲酱绛缰胶浇骄娇搅铰矫侥脚饺缴绞轿较挢峤鹪鲛阶节洁结诫届疖颌鲒紧锦仅谨进晋烬尽劲荆茎卺荩馑缙赆觐鲸惊经颈静镜径痉竞净刭泾迳弪胫靓纠厩旧阄鸠鹫驹举据锯惧剧讵屦榉飓钜锔窭龃鹃绢锩镌隽觉决绝谲珏钧军骏皲开凯剀垲忾恺铠锴龛闶钪铐颗壳课骒缂轲钶锞颔垦恳龈铿抠库裤喾块侩郐哙脍宽狯髋矿旷况诓诳邝圹纩贶亏岿窥馈溃匮蒉愦聩篑阃锟鲲扩阔蛴蜡腊莱来赖崃徕涞濑赉睐铼癞籁蓝栏拦篮阑兰澜谰揽览懒缆烂滥岚榄斓镧褴琅阆锒捞劳涝唠崂铑铹痨乐鳓镭垒类泪诔缧篱狸离鲤礼丽厉励砾历沥隶俪郦坜苈莅蓠呖逦骊缡枥栎轹砺锂鹂疠粝跞雳鲡鳢俩联莲连镰怜涟帘敛脸链恋炼练蔹奁潋琏殓裢裣鲢粮凉两辆谅魉疗辽镣缭钌鹩猎临邻鳞凛赁蔺廪檩辚躏龄铃灵岭领绫棂蛏鲮馏刘浏骝绺镏鹨龙聋咙笼垄拢陇茏泷珑栊胧砻楼娄搂篓偻蒌喽嵝镂瘘耧蝼髅芦卢颅庐炉掳卤虏鲁赂禄录陆垆撸噜闾泸渌栌橹轳辂辘氇胪鸬鹭舻鲈峦挛孪滦乱脔娈栾鸾銮抡轮伦仑沦纶论囵萝罗逻锣箩骡骆络荦猡泺椤脶镙驴吕铝侣屡缕虑滤绿榈褛锊呒妈玛码蚂马骂吗唛嬷杩买麦卖迈脉劢瞒馒蛮满谩缦镘颡鳗猫锚铆贸麽没镁门闷们扪焖懑钔锰梦眯谜弥觅幂芈谧猕祢绵缅渑腼黾庙缈缪灭悯闽闵缗鸣铭谬谟蓦馍殁镆谋亩钼呐钠纳难挠脑恼闹铙讷馁内拟腻铌鲵撵辇鲶酿鸟茑袅聂啮镊镍陧蘖嗫颟蹑柠狞宁拧泞苎咛聍钮纽脓浓农侬哝驽钕诺傩疟欧鸥殴呕沤讴怄瓯盘蹒庞抛疱赔辔喷鹏纰罴铍骗谝骈飘缥频贫嫔苹凭评泼颇钋扑铺朴谱镤镨栖脐齐骑岂启气弃讫蕲骐绮桤碛颀颃鳍牵钎铅迁签谦钱钳潜浅谴堑佥荨悭骞缱椠钤枪呛墙蔷强抢嫱樯戗炝锖锵镪羟跄锹桥乔侨翘窍诮谯荞缲硗跷窃惬锲箧钦亲寝锓轻氢倾顷请庆揿鲭琼穷茕蛱巯赇虮鳅趋区躯驱龋诎岖阒觑鸲颧权劝诠绻辁铨却鹊确阕阙悫让饶扰绕荛娆桡热韧认纫饪轫荣绒嵘蝾缛铷颦软锐蚬闰润洒萨飒鳃赛伞毵糁丧骚扫缫涩啬铯穑杀刹纱铩鲨筛晒酾删闪陕赡缮讪姗骟钐鳝墒伤赏垧殇觞烧绍赊摄慑设厍滠畲绅审婶肾渗诜谂渖声绳胜师狮湿诗时蚀实识驶势适释饰视试谥埘莳弑轼贳铈鲥寿兽绶枢输书赎属术树竖数摅纾帅闩双谁税顺说硕烁铄丝饲厮驷缌锶鸶耸怂颂讼诵擞薮馊飕锼苏诉肃谡稣虽随绥岁谇孙损笋荪狲缩琐锁唢睃獭挞闼铊鳎台态钛鲐摊贪瘫滩坛谭谈叹昙钽锬顸汤烫傥饧铴镗涛绦讨韬铽腾誊锑题体屉缇鹈阗条粜龆鲦贴铁厅听烃铜统恸头钭秃图钍团抟颓蜕饨脱鸵驮驼椭箨鼍袜娲腽弯湾顽万纨绾网辋韦违围为潍维苇伟伪纬谓卫诿帏闱沩涠玮韪炜鲔温闻纹稳问阌瓮挝蜗涡窝卧莴龌呜钨乌诬无芜吴坞雾务误邬庑怃妩骛鹉鹜锡牺袭习铣戏细饩阋玺觋虾辖峡侠狭厦吓硖鲜纤贤衔闲显险现献县馅羡宪线苋莶藓岘猃娴鹇痫蚝籼跹厢镶乡详响项芗饷骧缃飨萧嚣销晓啸哓潇骁绡枭箫协挟携胁谐写泻谢亵撷绁缬锌衅兴陉荥凶汹锈绣馐鸺虚嘘须许叙绪续诩顼轩悬选癣绚谖铉镟学谑泶鳕勋询寻驯训讯逊埙浔鲟压鸦鸭哑亚讶垭娅桠氩阉烟盐严岩颜阎艳厌砚彦谚验厣赝俨兖谳恹闫酽魇餍鼹鸯杨扬疡阳痒养样炀瑶摇尧遥窑谣药轺鹞鳐爷页业叶靥谒邺晔烨医铱颐遗仪蚁艺亿忆义诣议谊译异绎诒呓峄饴怿驿缢轶贻钇镒镱瘗舣荫阴银饮隐铟瘾樱婴鹰应缨莹萤营荧蝇赢颖茔莺萦蓥撄嘤滢潆璎鹦瘿颏罂哟拥佣痈踊咏镛优忧邮铀犹诱莸铕鱿舆鱼渔娱与屿语狱誉预驭伛俣谀谕蓣嵛饫阈妪纡觎欤钰鹆鹬龉鸳渊辕园员圆缘远橼鸢鼋约跃钥粤悦阅钺郧匀陨运蕴酝晕韵郓芸恽愠纭韫殒氲杂灾载攒暂赞瓒趱錾赃脏驵凿枣责择则泽赜啧帻箦贼谮赠综缯轧铡闸栅诈斋债毡盏斩辗崭栈战绽谵张涨帐账胀赵诏钊蛰辙锗这谪辄鹧贞针侦诊镇阵浈缜桢轸赈祯鸩挣睁狰争帧症郑证诤峥钲铮筝织职执纸挚掷帜质滞骘栉栀轵轾贽鸷蛳絷踬踯觯钟终种肿众锺诌轴皱昼骤纣绉猪诸诛烛瞩嘱贮铸驻伫槠铢专砖转赚啭馔颞桩庄装妆壮状锥赘坠缀骓缒谆准着浊诼镯兹资渍谘缁辎赀眦锱龇鲻踪总纵偬邹诹驺鲰诅组镞钻缵躜鳟翱并卜沉丑淀迭斗范干皋硅柜后伙秸杰诀夸里凌么霉捻凄扦圣尸抬涂洼喂污锨咸蝎彝涌游吁御愿岳云灶扎札筑于志注凋讠谫郄勐凼坂垅垴埯埝苘荬荮莜莼菰藁揸吒吣咔咝咴噘劈嚯幞岙嵴彷徼犸狍馀馇馓馕愣憷懔丬溆滟混漤潴澹甯纟绔绱珉枧桊桉槔橥轱轷赍肷胨飚煳煅熘愍淼砜磙眍钚钷铘铞锃锍锎锏锘锝锪锫锿镅镎镢镥镩镲稆鹋鹛鹱疬疴痖癯裥襁耢颥螨麴鲅鲆鲇鲞鲴鲺鲼鳊鳋鳘鳙鞒鞴齄药欲里姐占征哟猛炮发淡恶奸干松侄啰\";\nfunction ti(c, a, b) {\n  reg = new RegExp(a, \"g\");\n  return result.replace(reg, b);\n}",
    "bookSourceGroup": "漫画 书源",
    "bookSourceName": "久久漫画",
    "bookSourceType": 2,
    "bookSourceUrl": "https://www.jjmhw.cc",
    "bookUrlPattern": "",
    "customButton": false,
    "customOrder": 36,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[\n{\n    \"title\":\"连载\",\n    \"url\":\"/booklist?tag=全部&area=1&end=0&page={{page}}\",\n    \"style\":{\n        \"layout_flexGrow\":1\n    }\n},\n{\n    \"title\":\"完结\",\n    \"url\":\"/booklist?tag=全部&area=1&end=1&page={{page}}\",\n    \"style\":{\n        \"layout_flexGrow\":1\n    }\n}\n]\n",
    "header": "{\n  \"User-agent\":\"Dalvik/2.1.0 (Linux; U; Android 9; PCRT00 Build/PQ3B.190801.002)\"\n}",
    "lastUpdateTime": 1770270115839,
    "loginUrl": "",
    "respondTime": 2756,
    "ruleBookInfo": {
      "author": "author",
      "coverUrl": "cover",
      "init": "<js>\neval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('D(6(E.F));G J=H.I.K.L(9),$1=b(a){c 6(J.7(\\'[M=\"N:\\'+a+\\'\"]\\').f(\"O\"))},$2=b(a){c 6(J.7(a).P())},$3=b(a){c 6(J.7(a).f(\"Q\"))},$4=b(a){c 6(J.7(a).f(\"R-S\"))},h=T,s=$2(\".0-d-j-1\").5(/\\\\U|\\\\V/g,\"\"),k=$2(\".0-8-e-m:q-o(4) a\")+\",\"+$2(\".0-8-e-W a\"),l=$2(\".0-d-1 r:X-o a\"),t=$2(\".0-d-j-3\").5(/\\\\Y\\\\Z/g,\"\"),u=J.7(\".0-d-1 r\").10;1==11?v={12:$2(\".0-8-e-j\").5(/[\\\\13\\\\(].*/,\"\"),m:$2(\".0-8-e-m:q-o(3)\").5(/[,14&]|[\\\\15\\\\16][:\\\\w]/g,\"/\").5(/\\\\/\\\\/\\\\/|\\\\/\\\\//g,\"/\"),17:s+\",\"+k+\",\"+t,18:l+\"\\\\y\"+t+\"\\\\y[\"+u+\"]\",19:\"<A>\"+$2(\"p.0-1a\").5(/.*\\\\1b\\\\1c\\\\1d\\\\1e[:\\\\w].*/g,\"\").5(/(^|[\\\\1f\\\\1g\\\\1h!?]+[\"\\\\1i\\\\1j\\\\1k\\\\1l]?)/g,\"$1<A>\"),B:$4(\".0-8-B 1m\").5(/1n:/,\"1o:\"),h:h}:1p.1q(\"\\\\n\\\\C\\\\1r\\\\1s\\\\1t\\\\1u\\\\1v\\\\C\");9=1w.1x(v);1y(x 1z i)9=1A(9,i[x],z[x]);',62,99,'detail|||||replace|String|select|main|result||function|return|list|info|attr||url||title|||author||child||nth|li|||count|book|uff1a||u00b7||br|cover|u2757|eval|source|bookSourceComment|var|org|jsoup||Jsoup|parse|property|og|content|text|href|data|original|baseUrl|u4e2d|u5df2|class|last|u66f4|u65b0|length|flag|name|uff08|xX|u56fe|u6587|kind|latest|intro|desc|u5185|u5bb9|u4ecb|u7ecd|u3002|uff01|uff1f|u201d|u300d|uff09|u3011|img|http|https|java|toast|u672a|u542f|u7528|u4e66|u6e90|JSON|stringify|for|in|ti'.split('|'),0,{}))\n</js>",
      "intro": "intro",
      "kind": "kind",
      "lastChapter": "latest",
      "name": "name",
      "tocUrl": "url"
    },
    "ruleContent": {
      "content": "<js>\neval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('1==0.3(\"4\")?\"<5>\"+6(0.7(\".8-9-1.a b\")).c(/d:/g,\"e:\"):0.f(\"\\\\h\\\\2\\\\i\\\\j\\\\k\\\\l\\\\m\\\\2\");',23,23,'java||u2757|get|Enable|br|String|getElements|view|main|readForm|img|replace|http|https|toast||n|u672a|u542f|u7528|u4e66|u6e90'.split('|'),0,{}))\n</js>",
      "imageStyle": "FULL"
    },
    "ruleExplore": {
      "author": "",
      "bookList": "<js>\neval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('3(4(5.6));1==7?0.8(\".9-a b c\"):0.d(\"\\\\e\\\\2\\\\f\\\\g\\\\h\\\\i\\\\j\\\\2\");',20,20,'java||u2757|eval|String|source|bookSourceComment|flag|getElements|manga|list|ul|li|toast|n|u672a|u542f|u7528|u4e66|u6e90'.split('|'),0,{}))\n</js>",
      "bookUrl": "a.0@href",
      "coverUrl": ".manga-list-2-cover img@data-original##http:##https:",
      "intro": "",
      "name": ".manga-list-2-title@text\n<js>\neval(String(source.bookSourceComment));\nfor (x in i) result = ti(result, i[x], z[x]).replace(/[（\\(].*/, \"\");\n</js>"
    },
    "ruleSearch": {
      "author": ".book-list-info-bottom-item@text\n<js>\nresult = result\n  .replace(/[,xX&]|[图文][:：]/g, \"/\")\n  .replace(/\\/\\/\\/|\\/\\//g, \"/\")\n  .replace(/^[\\/]/g, \"\")\neval(String(source.bookSourceComment));\nfor (x in i) result = ti(result, i[x], z[x]);\n</js>\n",
      "bookList": ".book-list li",
      "bookUrl": "a.0@href",
      "coverUrl": ".book-list-cover img@data-original##http:##https:",
      "intro": ".book-list-info-desc",
      "kind": ".book-list-info-bottom-right-font@text##中|已",
      "name": ".book-list-info-title@text\n<js>\neval(String(source.bookSourceComment));\nfor (x in i) result = ti(result, i[x], z[x]).replace(/[（\\(].*/, \"\");\n</js>"
    },
    "ruleToc": {
      "chapterList": "<js>\neval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('4(5(6.7));1==8?0=2.9(\".b-0-1 c a\"):2.d(\"\\\\e\\\\3\\\\f\\\\g\\\\h\\\\i\\\\j\\\\3\");2.k(\"l\",1);0;',22,22,'list||java|u2757|eval|String|source|bookSourceComment|flag|getElements||detail|li|toast|n|u672a|u542f|u7528|u4e66|u6e90|put|Enable'.split('|'),0,{}))\n</js>",
      "chapterName": "text",
      "chapterUrl": "href"
    },
    "searchUrl": "\n<js>\neval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('2(3(4.5));1==6?\"/7?8={{9}}\":a.b(\"\\\\c\\\\0\\\\d\\\\e\\\\f\\\\g\\\\h\\\\0\");',18,18,'u2757||eval|String|source|bookSourceComment|flag|search|keyword|key|java|toast|n|u672a|u542f|u7528|u4e66|u6e90'.split('|'),0,{}))\n</js>",
    "weight": 25
  },
  {
    "bookSourceComment": "",
    "bookSourceGroup": "",
    "bookSourceName": "七星阁小说网",
    "bookSourceType": 0,
    "bookSourceUrl": "http://www.qixinge.net",
    "bookUrlPattern": "http://www.qixinge.net/info/\\d+/",
    "concurrentRate": "",
    "coverDecodeJs": "",
    "customButton": false,
    "customOrder": 37,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreScreen": "",
    "exploreUrl": " [\n  {\n    \"title\": \"⭕分类小说⭕\",\n    \"url\": \"\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 1\n    }\n  },\n  {\n    \"title\": \"首页\",\n    \"url\": \"/\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"玄幻\",\n    \"url\": \"/list1/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"武侠\",\n    \"url\": \"/list2/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"都市\",\n    \"url\": \"/list3/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"历史\",\n    \"url\": \"/list4/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"网游\",\n    \"url\": \"/list5/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"科幻\",\n    \"url\": \"/list6/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"言情\",\n    \"url\": \"/list7/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"其他\",\n    \"url\": \"/list8/{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"⭕完结小说⭕\",\n    \"url\": \"\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 1\n    }\n  },\n  {\n    \"title\": \"玄幻\",\n    \"url\": \"/full/1_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"武侠\",\n    \"url\": \"/full/2_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"都市\",\n    \"url\": \"/full/3_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"历史\",\n    \"url\": \"/full/4_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"网游\",\n    \"url\": \"/full/5_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"科幻\",\n    \"url\": \"/full/6_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"言情\",\n    \"url\": \"/full/7_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"其他\",\n    \"url\": \"/full/8_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"⭕排行榜⭕\",\n    \"url\": \"\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 1\n    }\n  },\n  {\n    \"title\": \"周榜\",\n    \"url\": \"/top/week_0_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"月榜\",\n    \"url\": \"/top/month_0_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"总榜\",\n    \"url\": \"/top/all_0_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"玄幻\",\n    \"url\": \"/top/all_1_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"武侠\",\n    \"url\": \"/top/all_2_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"都市\",\n    \"url\": \"/top/all_3_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"历史\",\n    \"url\": \"/top/all_4_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"网游\",\n    \"url\": \"/top/all_5_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"科幻\",\n    \"url\": \"/top/all_6_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"言情\",\n    \"url\": \"/top/all_7_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  },\n  {\n    \"title\": \"其他\",\n    \"url\": \"/top/all_8_{{page}}.html\",\n    \"style\": {\n      \"layout_flexGrow\": 1,\n      \"layout_flexBasisPercent\": 0.25\n    }\n  }\n]",
    "header": "@js:JSON.stringify({\"referer\":baseUrl})",
    "lastUpdateTime": 1772289427690,
    "loginCheckJs": "",
    "loginUi": "",
    "loginUrl": "",
    "respondTime": 5395,
    "ruleBookInfo": {
      "author": "@get:{a}",
      "canReName": "",
      "coverUrl": "@get:{i}",
      "init": "@put:{n:\"[property$=book_name]@content\",\na:\"[property$=author]@content\",\nc:\"[property~=category|status|update_time]@content\",\nl:\"[property$=latest_chapter_name]@content||[property$=lastest_chapter_name]@content\",\nd:\"[property$=description]@content\",\ni:\"[property$=image]@content\",\nt:\"text.章节目录@href||text.查看全部章节@href||text.查看更多章节@href\"}",
      "intro": "@get:{d}",
      "kind": "@get:{c}",
      "lastChapter": "@get:{l}",
      "name": "@get:{n}##免费阅读小说",
      "tocUrl": "@get:{t}",
      "wordCount": ""
    },
    "ruleContent": {
      "content": ".font_max@html",
      "imageStyle": "",
      "nextContentUrl": "text.下一@href",
      "replaceRegex": "##本章未完.*|第.*[(1/2)]页|(?:[^\\u4E00-\\u9FA5\\s！？。”」]|[一二三四五六七八九零壹贰叁肆伍陆柒捌玖点丶]){4,}(?<![\\.．点丶。])[\\.．点丶。]{1,2}(?![\\.．点丶。])(?:[^A-Z\\u4E00-\\u9FA5\\s！？“「]|[一二三四五六七八九零壹贰叁肆伍陆柒捌玖点丶])(?:[^\\u4E00-\\u9FA5\\s！？“「]|[一二三四五六七八九零壹贰叁肆伍陆柒捌玖点丶])+|(?:[^\\u4E00-\\u9FA5\\n！？。”」]|[一二三四五六七八九零壹贰叁肆伍陆柒捌玖点丶]){4,}[\\.．点丶。](?:[^\\n\\u4E00-\\u9FA5A-z]*[cC][^\\n\\u4E00-\\u9FA5A-z]*[oO][^\\n\\u4E00-\\u9FA5A-z]*[mM]|[^\\n\\u4E00-\\u9FA5A-z]*[cC][^\\n\\u4E00-\\u9FA5A-z]*[nN]|[^\\n\\u4E00-\\u9FA5A-z]*[nN][^\\n\\u4E00-\\u9FA5A-z]*[eE][^\\n\\u4E00-\\u9FA5A-z]*[tT])(?![A-z])",
      "sourceRegex": "",
      "webJs": ""
    },
    "ruleExplore": {
      "author": "",
      "bookList": "",
      "bookUrl": "",
      "coverUrl": "",
      "intro": "",
      "kind": "",
      "lastChapter": "",
      "name": "",
      "wordCount": ""
    },
    "ruleSearch": {
      "author": ".book_other@span.0@text",
      "bookList": ".col-md-6@dl",
      "bookUrl": "a.0@href",
      "coverUrl": "img@src",
      "intro": "",
      "kind": ".book_other.1:2@text##.*：|.*：",
      "lastChapter": ".book_other.3@a@text",
      "name": "h3@a@text##.*\\]|免费阅读小说",
      "wordCount": ""
    },
    "ruleToc": {
      "chapterList": ".book_list2 li a",
      "chapterName": "text",
      "chapterUrl": "href",
      "isVip": "",
      "isVolume": "",
      "nextTocUrl": ".page-link@a@href\n@js:\nnext = [];\nurl = result[0];\nlength = result.length;\np = src.match(/page-link\">1\\/(\\d+)/)||[];\npage = Number(p[1]);\nif(length < page){\n\tfor(i = 2; i <= page; i++){\n\t\tlink = String(url).replace(/_\\d+/,`_${i}`);\n\t\tnext.push(link)\n\t\t}\n\t\tnext;\n\t}else result",
      "updateTime": ""
    },
    "searchUrl": "http://www.qixinge.net/search.php?q={{key}}&p={{page}}",
    "variableComment": "",
    "weight": 2
  }
]