八叉书库

https://bcshuku.com/

zhangyiqiu819 (3655)1天前

修复正文解析
二维码导入
{
    "bookSourceGroup": "自己使用",
    "bookSourceName": "八叉书库",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/bcshuku.com\/",
    "bookUrlPattern": "https:\/\/bcshuku.com\/novel\\d+\/",
    "customButton": false,
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[\n{\"title\":\"分类\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1,\"layout_flexGrow\":1}},\n{\"title\":\"长篇\",\"url\":\"\/booklist1\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"综合\",\"url\":\"\/booklist2\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"武侠\",\"url\":\"\/booklist3\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"历史\",\"url\":\"\/booklist4\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"都市\",\"url\":\"\/booklist5\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"玄幻\",\"url\":\"\/booklist6\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},   \n{\"title\":\"女生\",\"url\":\"\/booklist7\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},   \n{\"title\":\"其他\",\"url\":\"\/booklist8\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"现代\",\"url\":\"\/booklist9\/{{page-1}}.html\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"排行榜单\",\"url\":\"\",\"style\":{\"layout_flexBasisPercent\":1,\"layout_flexGrow\":1}},\n{\"title\":\"热门排行\",\"url\":\"\/popular\/{{\n\tvar pjstr = 'index.html';\n\tif(page!=1)  pjstr='index_'+page+'.html';\n\tpjstr}}\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"最新更新\",\"url\":\"\/latest\/{{\n\tvar pjstr = 'index.html';\n\tif(page!=1)  pjstr='index_'+page+'.html';\n\tpjstr}}\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"最新入库\",\"url\":\"\/release\/{{\n\tvar pjstr = 'index.html';\n\tif(page!=1)  pjstr='index_'+page+'.html';\n\tpjstr}}\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}},\n{\"title\":\"完本小说\",\"url\":\"\/completed\/{{\n\tvar pjstr = 'index.html';\n\tif(page!=1)  pjstr='index_'+page+'.html';\n\tpjstr}}\",\"style\":{\"layout_flexBasisPercent\":0.25,\"layout_flexGrow\":1}}\n]",
    "header": "\"accept\": \"application\/json, text\/javascript, *\/*; q=0.01\",\n    \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n    \"cache-control\": \"no-cache\",\n    \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\n    \"origin\": \"https:\/\/bcshuku.com\",\n    \"pragma\": \"no-cache\",\n    \"priority\": \"u=1, i\",\n    \"sec-ch-ua\": \"\\\"Microsoft Edge\\\";v=\\\"143\\\", \\\"Chromium\\\";v=\\\"143\\\", \\\"Not A(Brand\\\";v=\\\"24\\\"\",\n    \"sec-ch-ua-mobile\": \"?0\",\n    \"sec-ch-ua-platform\": \"\\\"Windows\\\"\",\n    \"sec-fetch-dest\": \"empty\",\n    \"sec-fetch-mode\": \"cors\",\n    \"sec-fetch-site\": \"same-origin\",\n    \"user-agent\": \"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    \"x-requested-with\": \"XMLHttpRequest\"\n",
    "lastUpdateTime": "1792651808408",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "[property=\"og:novel:author\"]@content",
        "coverUrl": "[property=\"og:image\"]@content",
        "intro": "{{@@div[itemprop=\"description\"]@textNodes}}\n阅读👁:{{@@div.info-chitiet span[7]@text}}\n{{@@span.text-primary@text}}\n{{baseUrl}}",
        "kind": "div.info-chitiet span[3]@text",
        "lastChapter": "div[id=\"new-chapter\"] span[class=\"chapter-text\"][0]@text",
        "name": "[property=\"og:novel:book_name\"]@content"
    },
    "ruleContent": {
        "content": "@js:\n(() => {\n    let html = String(result || \"\");\n    if (!html) return \"\";\n\n    \/* ========== 第2段:通用字段提取(顺序无关 \/ 带不带引号都行) ========== *\/\n    let pick = (key) => {\n        let m = html.match(new RegExp('\"' + key + '\"\\\\s*:\\\\s*\"([^\"]*)\"'));\n        if (m) return m[1].trim();\n        m = html.match(new RegExp('\"' + key + '\"\\\\s*:\\\\s*([^,\\\\s}]+)'));\n        return m ? m[1].trim() : \"\";\n    };\n\n    let url     = pick(\"url\");\n    let mobile  = pick(\"mobile\") || \"1\";\n    let isk     = pick(\"isk\")    || \"1\";\n    let novel   = pick(\"novel\");\n    let chapter = pick(\"chapter\");\n    let t       = pick(\"t\");\n    let n       = pick(\"n\");\n    let sign    = pick(\"sign\");\n\n    \/* ========== 第2段:保留参数日志 ========== *\/\n    let paramsObj = { url, mobile, isk, novel, chapter, t, n, sign };\n    java.log(\n        Object.keys(paramsObj).map(k => k + \"=\" + paramsObj[k] + \",\\n\").join(\"\")\n    );\n\n    if (!url || !sign || !novel || !chapter) {\n        java.log(\"参数提取不完整\");\n        return \"\";\n    }\n\n    \/* ========== 第1段:请求体用 encodeURIComponent 编码 ========== *\/\n    let body =\n        \"url=\" + encodeURIComponent(url) +\n        \"&mobile=\" + encodeURIComponent(mobile) +\n        \"&isk=\" + encodeURIComponent(isk) +\n        \"&novel=\" + encodeURIComponent(novel) +\n        \"&chapter=\" + encodeURIComponent(chapter) +\n        \"&t=\" + encodeURIComponent(t) +\n        \"&n=\" + encodeURIComponent(n) +\n        \"&sign=\" + encodeURIComponent(sign);\n\n    java.log(\"body: \" + body);\n\n    let siteurl = \"https:\/\/bcshuku.com\";\n    let referer = (typeof baseUrl === \"string\" && baseUrl)\n        ? baseUrl\n        : siteurl + \"\/novel\/\" + novel + \"\/chapter\" + chapter + \".html\";\n\n    \/* ========== 第1段:请求头 \/ java.post ========== *\/\n    let response = java.post(siteurl + \"\/conapi.php\", body, {\n        'User-Agent': 'Mozilla\/5.0 (Linux; U; Android 10; zh-CN; MI 9 Build\/QKQ1.190828.002) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/100.0.4896.58 Quark\/10.5.1.1026 Mobile Safari\/537.36',\n        'Accept': 'application\/json, text\/javascript, *\/*; q=0.01',\n        'x-requested-with': 'XMLHttpRequest',\n        'content-type': 'application\/x-www-form-urlencoded; charset=UTF-8',\n        'origin': 'https:\/\/www.bcshuku.com',\n        'sec-fetch-site': 'same-origin',\n        'sec-fetch-mode': 'cors',\n        'sec-fetch-dest': 'empty',\n        'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',\n        'referer': referer,\n    });\n\n    \/* ========== 第1段:响应处理 ========== *\/\n    if (response && response.body()) {\n        try {\n            let data = JSON.parse(response.body());\n\n            \/\/ 补上第2段的 success 判断,避免把失败响应当正文\n            if (!data || data.success === false || data.success === 0 ||\n                data.success === \"0\" || !data.content) {\n                java.log(\"接口失败:\" + response.body());\n                return \"\";\n            }\n\n            let content = String(data.content);\n            java.log(content);\n\n            \/\/ 第2段:内容清洗\n            return content\n                .replace(\/<br\\s*\\\/?>\/gi, \"\\n\")\n                .replace(\/&nbsp;\/g, \" \")\n                .replace(\/&lt;\/g, \"<\")\n                .replace(\/&gt;\/g, \">\")\n                .replace(\/&amp;\/g, \"&\");\n        } catch (e) {\n            java.log(\"运行异常: \" + e.message);\n            return \"\";\n        }\n    } else {\n        java.log(\"响应体为空\");\n        return \"\";\n    }\n})()"
    },
    "ruleExplore": {
        "author": "\/\/div[@class='caption']\/div[@class=\"chi-tiet chuyen-muc\"]\/\/text()",
        "bookList": "\/\/div[@class=\"one-row\"]\/div[@class=\"col-md-3 col-sm-6 col-xs-6 home-truyendecu\"]",
        "bookUrl": "\/\/div[@class='caption']\/a\/@href",
        "coverUrl": "\/\/div[@class='each_truyen']\/a\/img\/@src",
        "lastChapter": "\/\/div[@class='caption']\/div[@class=\"chi-tiet tt-status\"]\/\/small[@class=\"btn-xs label-primary\"]\/text()",
        "name": "\/\/div[@class='caption']\/a\/@title"
    },
    "ruleSearch": {
        "bookList": "div.row div.one-row div.col-md-3",
        "bookUrl": "a[0]@href",
        "checkKeyWord": "https:\/\/bcshuku.com\/novel55078\/",
        "coverUrl": "div.each_truyen a img@src",
        "intro": "书籍状态📖:{{@@span.hoan-thanh-mau[0]@text}}\n阅读👁:{{@@div.luot-xem@textNodes}}\n更新时间🕰:{{@@div.chuyen-muc@textNodes}}\n{{@@a[0]@href##(.*)##https:\/\/bcshuku.com$1###}}",
        "lastChapter": "small.btn-xs@textNodes",
        "name": "h3[itemprop=\"name\"]@text"
    },
    "ruleToc": {
        "chapterList": "div[id=\"list-chapter\"] ul[class=\"list-chapter\"] li a",
        "chapterName": "span[class=\"chapter-text\"]@text",
        "chapterUrl": "@js:\nvar doc = org.jsoup.Jsoup.parse(result);\nvar link = doc.select(\"a\").first();\nvar chapterurl= 'https:\/\/bcshuku.com' + link.attr(\"href\");\nchapterurl;",
        "nextTocUrl": "\/\/div[@id=\"pagination\"]\/\/li[last()-1]\/a\/@href"
    },
    "searchUrl": "@js:\n\/\/ 第一步:搜索请求,拿到 searchid\nlet new_url = java.get('https:\/\/bcshuku.com\/e\/search\/index.php?keyboard='+key+'&show=title,writer,byr&searchget=1',{\n    \"accept\": \"text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/avif,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3;q=0.7\",\n    \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n    \"cache-control\": \"no-cache\",\n    \"pragma\": \"no-cache\",\n    \"referer\": \"https:\/\/bcshuku.com\",\n    \"sec-ch-ua\": \"\\\"Microsoft Edge\\\";v=\\\"143\\\", \\\"Chromium\\\";v=\\\"143\\\", \\\"Not A(Brand\\\";v=\\\"24\\\"\",\n    \"sec-ch-ua-mobile\": \"?1\",\n    \"sec-ch-ua-platform\": \"\\\"Android\\\"\",\n    \"sec-fetch-dest\": \"document\",\n    \"sec-fetch-mode\": \"navigate\",\n    \"sec-fetch-site\": \"same-origin\",\n    \"sec-fetch-user\": \"?1\",\n    \"upgrade-insecure-requests\": \"1\",\n    \"user-agent\": \"Mozilla\/5.0 (Linux; Android 6.0; Nexus 5 Build\/MRA58N) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/143.0.0.0 Mobile Safari\/537.36 Edg\/143.0.0.0\"\n});\n\nlet location = new_url.header(\"location\");\nlet searchid = location.match(\/searchid=(\\d+)\/)[1];\n\n\/\/ 分页修复(真正从第一页开始)\nlet url;\nif (page == 0) {\n    url = \"https:\/\/bcshuku.com\/e\/search\/result\/?searchid=\" + searchid;\n} else {\n    url = \"https:\/\/bcshuku.com\/e\/search\/result\/index.php?page=\" + (page - 1) + \"&searchid=\" + searchid;\n}\n\nurl;",
    "weight": 0
}
广告