八叉书库
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(\/ \/g, \" \")\n .replace(\/<\/g, \"<\")\n .replace(\/>\/g, \">\")\n .replace(\/&\/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
}