📚豆瓣阅读

https://read.douban.com

guaner001125 (317)06/28 20:14

去除搜索限制
二维码导入
{
    "bookSourceComment": "如不能加载请尝试删除书籍,重新搜索添加",
    "bookSourceGroup": "⑦📚  出版",
    "bookSourceName": "📚豆瓣阅读",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/read.douban.com",
    "bookUrlPattern": "https:\/\/read.douban.com\/(ebook|read|column).*",
    "customOrder": 87,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "[{'title':'今日限免','url':'https:\/\/read.douban.com\/j\/index\/finalized\/?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}}]",
    "lastUpdateTime": "1751112883651",
    "loginUrl": "https:\/\/read.douban.com\/app",
    "respondTime": 203289,
    "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>\n\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\";\n\nt = java.getString(\"$.data\");\nscript = `<script>\nt = \"${t}\";\nfunction name(t){\n  const e = Uint8Array.from(window.atob(t), (t=>t.charCodeAt(0)))\n    , i = e.buffer\n    , u = e.length - 16 - 13\n    , d = new Uint8Array(i,u,16)\n    , p = new Uint8Array(i,0,u)\n    , f = {};\n    f.name = \"AES-CBC\",\n    f[\"iv\"] = d,\n  c = new TextEncoder().encode(\"${cok}\");\n  return window[\"crypto\"][\"subtle\"][\"digest\"](\"SHA-256\", c)\n  .then(t=>window[\"crypto\"][\"subtle\"][\"importKey\"](\"raw\", t, \"AES-CBC\", !0, [\"decrypt\"])\n  .then(t=>window[\"crypto\"][\"subtle\"][\"decrypt\"](f, t, p))\n  .then(t=>JSON.parse((new TextDecoder).decode(t)))\n .then(t=>t.posts[0].contents));\n}\n(async function () {\n  result = await name(t)\n  })();\n<\/script>`;\n\n\nddd = java.webView(script,baseUrl,\"result\");\n\n\/\/规范Json数据\n\/\/ 定义正则表达式\nconst pattern = \/:\"(.*?)\"([,\\]\\}])\/g;\nconst bbb = book.getVariable(\"custom\");\nconst sss = source.getVariable();\n\/\/ 替换逻辑\nddd = String(ddd).replace(pattern, (match, content,suffix) => {\n  \/\/ 将内容中的双引号替换为转义字符\n  const replacedContent = content.replace(\/\"\/g, '\\\\\"');\n  \/\/ 返回替换后的结果\n  return `:\"${replacedContent}\"${suffix}`;\n}).replace(\/\\n+\/g,'\\\\n').replace(\/[\\x00-\\x1F\\x7F]\/g,'');\nvar data = JSON.parse(String(ddd));\n\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 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>"
    },
    "ruleExplore": {
        "author": "class.author@text||$.author[0].name||$.author",
        "bookList": "<js>\nif(\/finalized\/.test(baseUrl)){\n\tworkid = String(java.getString(\"$.list[1].data.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
}
广告