书豪小说网-shuhaoxs-v0305(公众号:好用的软件站)

https://www.shuhaoxs.com/

lindongjiang (1001)3小时前

暂无介绍说明

网络导入
{
  "chapterContent": {
    "actionID": "chapterContent",
    "validConfig": "{\"maxPage\":20}",
    "content": "//div[contains(@class,'conBox')]//div[contains(@class,'content')][1]/p||//div[contains(@class,'conBox')]//div[contains(@class,'content')][1]",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.shuhaoxs.com/');\nfunction absUrl(u, base){\n  u = String(u || '').trim();\n  if(!u) return '';\n  if(/^https?:\\/\\//i.test(u)) return u;\n  if(u.indexOf('//') === 0) return 'https:' + u;\n  var b = String(base || host).trim();\n  if(!b) b = host;\n  var h = b.indexOf('#');\n  if(h >= 0) b = b.substring(0, h);\n  var q = b.indexOf('?');\n  if(q >= 0) b = b.substring(0, q);\n  var p = b.indexOf('://');\n  var origin = host;\n  if(p >= 0){\n    var s = b.indexOf('/', p + 3);\n    origin = s >= 0 ? b.substring(0, s) : b;\n  }\n  if(u.charAt(0) === '/') return origin + u;\n  if(b.charAt(b.length - 1) !== '/') {\n    var k = b.lastIndexOf('/');\n    if(k >= 0) b = b.substring(0, k + 1);\n    else b = origin + '/';\n  }\n  return b + u;\n}\nvar u = '';\nif(params && params.lastResponse && params.lastResponse.nextPageUrl) u = params.lastResponse.nextPageUrl;\nif(!u && params && params.queryInfo) u = params.queryInfo.url || params.queryInfo.detailUrl || '';\nif(!u && result){\n  if(typeof result === 'string') u = result;\n  else if(result.url) u = result.url;\n  else if(result.detailUrl) u = result.detailUrl;\n}\nif(!u && params && params.responseUrl) u = params.responseUrl;\nu = absUrl(u, params && params.responseUrl ? params.responseUrl : host);\nreturn {'url': u, 'httpHeaders': config.httpHeaders};",
    "title": "//h1[contains(@class,'title')][1]/text()||@js:\nvar t = String(result || '').replace(/\\s+/g, ' ').trim();\nif(t) return t;\nif(params && params.queryInfo && params.queryInfo.title) return String(params.queryInfo.title);\nreturn '';",
    "moreKeys": {
      "maxPage": 20,
      "removeHtmlKeys": [
        "title",
        "content"
      ]
    },
    "host": "https://www.shuhaoxs.com/",
    "responseFormatType": "html",
    "parserID": "DOM",
    "nextPageUrl": "(//div[contains(@class,'conBox')]//div[contains(@class,'btnW') and contains(@class,'font16')][1]/a[last()]/@href)[1]||@js:\nvar host = String(config.host || 'https://www.shuhaoxs.com/');\nfunction absUrl(u, base){\n  u = String(u || '').trim();\n  if(!u || u === '#' || /^javascript:/i.test(u)) return '';\n  if(/^https?:\\/\\//i.test(u)) return u;\n  if(u.indexOf('//') === 0) return 'https:' + u;\n  var b = String(base || host).trim();\n  if(!b) b = host;\n  var h = b.indexOf('#');\n  if(h >= 0) b = b.substring(0, h);\n  var q = b.indexOf('?');\n  if(q >= 0) b = b.substring(0, q);\n  var p = b.indexOf('://');\n  var origin = host;\n  if(p >= 0){\n    var s = b.indexOf('/', p + 3);\n    origin = s >= 0 ? b.substring(0, s) : b;\n  }\n  if(u.charAt(0) === '/') return origin + u;\n  if(b.charAt(b.length - 1) !== '/') {\n    var k = b.lastIndexOf('/');\n    if(k >= 0) b = b.substring(0, k + 1);\n    else b = origin + '/';\n  }\n  return b + u;\n}\nfunction parseReadUrl(u){\n  var x = absUrl(u, host);\n  if(!x) return null;\n  var h = x.indexOf('#');\n  if(h >= 0) x = x.substring(0, h);\n  var q = x.indexOf('?');\n  if(q >= 0) x = x.substring(0, q);\n  var m = x.match(/\\/book\\/([a-z0-9]+)-(\\d+)(?:-(\\d+))?\\.html$/i);\n  if(!m) return null;\n  var cid = parseInt(m[2], 10);\n  var page = m[3] ? parseInt(m[3], 10) : 1;\n  if(!cid || cid < 1 || !page || page < 1) return null;\n  return {'aid': m[1], 'cid': cid, 'page': page};\n}\nvar cand = absUrl(result, params && params.responseUrl ? params.responseUrl : host);\nif(!cand) return '';\nvar curUrl = '';\nif(params && params.responseUrl) curUrl = params.responseUrl;\nif(!curUrl && params && params.queryInfo) curUrl = params.queryInfo.url || params.queryInfo.detailUrl || '';\nvar cur = parseReadUrl(curUrl);\nvar nxt = parseReadUrl(cand);\nif(!cur || !nxt) return '';\nif(cur.aid !== nxt.aid) return '';\nif(cur.cid !== nxt.cid) return '';\nif(nxt.page <= cur.page) return '';\nreturn cand;"
  },
  "enable": true,
  "bookDetail": {
    "cat": "//meta[@property='og:novel:category']/@content||//div[contains(@class,'position')][1]/a[last()]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "responseFormatType": "html",
    "lastChapterTitle": "//meta[@property='og:novel:latest_chapter_name']/@content||//div[contains(@class,'chapList')][1]//li[1]/a/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "url": "//meta[@property='og:url']/@content||@js:\nif(params && params.queryInfo){\n  if(params.queryInfo.url) return params.queryInfo.url;\n  if(params.queryInfo.detailUrl) return params.queryInfo.detailUrl;\n}\nif(typeof result === 'string' && result) return result;\nif(result && result.url) return result.url;\nif(result && result.detailUrl) return result.detailUrl;\nreturn '';",
    "desc": "//meta[@property='og:description']/@content||//div[contains(@class,'chapBox')]//div[contains(@class,'intro')][1]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "host": "https://www.shuhaoxs.com/",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.shuhaoxs.com/');\nfunction absUrl(u, base){\n  u = String(u || '').trim();\n  if(!u) return '';\n  if(/^https?:\\/\\//i.test(u)) return u;\n  if(u.indexOf('//') === 0) return 'https:' + u;\n  var b = String(base || host).trim();\n  if(!b) b = host;\n  var h = b.indexOf('#');\n  if(h >= 0) b = b.substring(0, h);\n  var q = b.indexOf('?');\n  if(q >= 0) b = b.substring(0, q);\n  var p = b.indexOf('://');\n  var origin = host;\n  if(p >= 0){\n    var s = b.indexOf('/', p + 3);\n    origin = s >= 0 ? b.substring(0, s) : b;\n  }\n  if(u.charAt(0) === '/') return origin + u;\n  if(b.charAt(b.length - 1) !== '/') {\n    var k = b.lastIndexOf('/');\n    if(k >= 0) b = b.substring(0, k + 1);\n    else b = origin + '/';\n  }\n  return b + u;\n}\nvar u = '';\nif(params && params.queryInfo) u = params.queryInfo.detailUrl || params.queryInfo.url || '';\nif(!u && result){\n  if(typeof result === 'string') u = result;\n  else if(result.detailUrl) u = result.detailUrl;\n  else if(result.url) u = result.url;\n}\nif(!u && params && params.responseUrl) u = params.responseUrl;\nu = absUrl(u, params && params.responseUrl ? params.responseUrl : host);\nreturn {'url': u, 'httpHeaders': config.httpHeaders};",
    "actionID": "bookDetail",
    "detailUrl": "//meta[@property='og:url']/@content||@js:\nif(params && params.queryInfo){\n  if(params.queryInfo.detailUrl) return params.queryInfo.detailUrl;\n  if(params.queryInfo.url) return params.queryInfo.url;\n}\nif(typeof result === 'string' && result) return result;\nif(result && result.detailUrl) return result.detailUrl;\nif(result && result.url) return result.url;\nreturn '';",
    "cover": "//meta[@property='og:image']/@content||//div[contains(@class,'chapBox')]//div[contains(@class,'pic')]//img/@src||@js:\nvar u = String(result || '').trim();\nif(!u) return '';\nif(/^https?:\\/\\//i.test(u)) return u;\nif(u.indexOf('//') === 0) return 'https:' + u;\nif(u.charAt(0) !== '/') u = '/' + u;\nreturn config.host.replace(/\\/+$/, '') + u;",
    "validConfig": "",
    "parserID": "DOM",
    "status": "//meta[@property='og:novel:status']/@content||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "updateTime": "//meta[@property='og:novel:update_time']/@content||@js:return String(result || '').replace(/\\s+/g, ' ').trim();"
  },
  "bookWorld": {
    "分类": {
      "cat": "//div[contains(@class,'position')][1]/span[contains(@class,'cur')][1]/text()||@js:\nvar t = String(result || '').replace(/\\s+/g, ' ').trim();\nt = t.replace(/^>+\\s*/, '');\nt = t.replace(/小说$/, '');\nreturn t;",
      "responseFormatType": "html",
      "author": "//dl[dt[contains(.,'作者')]]/dd/a[1]/text()||//div[contains(@class,'infoM2')]//dl[1]/dd/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "lastChapterTitle": "//dl[dt[contains(.,'更新')]]/dd/a[1]/text()||//div[contains(@class,'infoM2')]//dl[2]/dd/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "bookName": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "url": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/@href",
      "desc": "//div[contains(@class,'txtb')]//div[contains(@class,'intro')][1]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "host": "https://www.shuhaoxs.com/",
      "requestInfo": "@js:\nvar cid = '8';\nif(params && params.filters && params.filters.category) cid = String(params.filters.category);\nvar page = parseInt(params.pageIndex || 1, 10);\nif(!page || page < 1) page = 1;\nvar url = config.host + 'list-' + cid + '/';\nif(page > 1) url = config.host + 'list-' + cid + '-' + page + '/';\nreturn {'url': url, 'httpHeaders': config.httpHeaders};",
      "actionID": "bookWorld",
      "detailUrl": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/@href",
      "cover": "//div[contains(@class,'pic')]//img/@src||@js:\nvar u = String(result || '').trim();\nif(!u) return '';\nif(/^https?:\\/\\//i.test(u)) return u;\nif(u.indexOf('//') === 0) return 'https:' + u;\nif(u.charAt(0) !== '/') u = '/' + u;\nreturn config.host.replace(/\\/+$/, '') + u;",
      "validConfig": "",
      "parserID": "DOM",
      "list": "//div[contains(@class,'rankIBox')]//div[contains(@class,'dList')][1]/ul/li",
      "moreKeys": {
        "_sIndex": 0,
        "maxPage": 200,
        "pageSize": 30,
        "removeHtmlKeys": [
          "bookName",
          "author",
          "cat",
          "lastChapterTitle",
          "desc"
        ],
        "requestFilters": [
          {
            "key": "category",
            "items": [
              {
                "title": "玄幻",
                "value": "4"
              },
              {
                "title": "奇幻",
                "value": "5"
              },
              {
                "title": "武侠",
                "value": "6"
              },
              {
                "title": "仙侠",
                "value": "7"
              },
              {
                "title": "都市",
                "value": "8"
              },
              {
                "title": "军事",
                "value": "9"
              },
              {
                "title": "历史",
                "value": "10"
              },
              {
                "title": "游戏",
                "value": "11"
              },
              {
                "title": "体育",
                "value": "12"
              },
              {
                "title": "科幻",
                "value": "13"
              },
              {
                "title": "诸天",
                "value": "14"
              },
              {
                "title": "言情",
                "value": "18"
              },
              {
                "title": "同人",
                "value": "27"
              }
            ]
          }
        ]
      },
      "status": "",
      "updateTime": ""
    }
  },
  "sourceUrl": "https://www.shuhaoxs.com/",
  "sourceType": "text",
  "weight": 9999,
  "sourceName": "书豪小说网-shuhaoxs-v0305(公众号:好用的软件站)",
  "httpHeaders": {
    "Referer": "https://www.shuhaoxs.com/",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
  },
  "miniAppVersion": "2.53.2",
  "lastModifyTime": "1772696090",
  "searchBook": {
    "cat": "//dl[dt[contains(.,'分类')]]/dd/a[1]/text()||//div[contains(@class,'position')][1]/span[contains(@class,'cur')][1]/text()||@js:\nvar t = String(result || '').replace(/\\s+/g, ' ').trim();\nt = t.replace(/^>+\\s*/, '');\nt = t.replace(/小说$/, '');\nreturn t;",
    "responseFormatType": "html",
    "author": "//dl[dt[contains(.,'作者')]]/dd/a[1]/text()||//div[contains(@class,'infoM2')]//dl[1]/dd/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "lastChapterTitle": "//dl[dt[contains(.,'更新')]]/dd/a[1]/text()||//div[contains(@class,'infoM2')]//dl[2]/dd/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "bookName": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/text()||@js:\nvar name = String(result || '').replace(/\\s+/g, ' ').trim();\nif(!name) return '';\nvar kw = String((params && params.keyWord) ? params.keyWord : '').replace(/\\s+/g, ' ').trim();\nif(!kw) return name;\nif(name.indexOf(kw) >= 0) return name;\nif(name.toLowerCase().indexOf(kw.toLowerCase()) >= 0) return name;\nreturn '';",
    "url": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/@href",
    "desc": "//div[contains(@class,'txtb')]//div[contains(@class,'intro')][1]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "host": "https://www.shuhaoxs.com/",
    "requestInfo": "@js:\nvar cats = [4,5,6,7,8,9,10,11,12,13,14,18,27];\nvar n = parseInt(params.pageIndex || 1, 10);\nif(!n || n < 1) n = 1;\nvar idx = (n - 1) % cats.length;\nvar catPage = Math.floor((n - 1) / cats.length) + 1;\nvar cid = cats[idx];\nvar url = config.host + 'list-' + cid + '/';\nif(catPage > 1) url = config.host + 'list-' + cid + '-' + catPage + '/';\nreturn {'url': url, 'httpHeaders': config.httpHeaders};",
    "actionID": "searchBook",
    "detailUrl": "//div[contains(@class,'txtb')]//div[contains(@class,'name')][1]/a[1]/@href",
    "cover": "//div[contains(@class,'pic')]//img/@src||@js:\nvar u = String(result || '').trim();\nif(!u) return '';\nif(/^https?:\\/\\//i.test(u)) return u;\nif(u.indexOf('//') === 0) return 'https:' + u;\nif(u.charAt(0) !== '/') u = '/' + u;\nreturn config.host.replace(/\\/+$/, '') + u;",
    "validConfig": "{\"maxPage\":260}",
    "parserID": "DOM",
    "list": "//div[contains(@class,'rankIBox')]//div[contains(@class,'dList')][1]/ul/li",
    "moreKeys": {
      "pageSize": 30,
      "maxPage": 260,
      "removeHtmlKeys": [
        "bookName",
        "author",
        "cat",
        "lastChapterTitle",
        "desc"
      ]
    },
    "status": "",
    "updateTime": ""
  },
  "chapterList": {
    "nextPageUrl": "data||@js:\nvar arr = result || [];\nif(Object.prototype.toString.call(arr) !== '[object Array]') return '';\nif(arr.length === 0) return '';\nvar u = String(params && params.responseUrl ? params.responseUrl : '');\nvar idm = u.match(/[?&]id=([a-z0-9]+)/i);\nvar aid = idm ? idm[1] : '';\nvar pm = u.match(/[?&]page=(\\d+)/i);\nvar page = pm ? parseInt(pm[1], 10) : 1;\nif(!page || page < 1) page = 1;\nvar first = parseInt(String(arr[0].chapterorder || ''), 10);\nvar start = (page - 1) * 100 + 1;\nif(!first || first !== start) return '';\nif(arr.length < 100) return '';\nif(!aid){\n  var cu = arr[0] && arr[0].chapterurl ? String(arr[0].chapterurl) : '';\n  var m = cu.match(/\\/book\\/([a-z0-9]+)-\\d+\\.html/i);\n  if(m) aid = m[1];\n}\nif(!aid) return '';\nreturn config.host + 'index.php?action=loadChapterPage&id=' + aid + '&page=' + (page + 1);",
    "responseFormatType": "json",
    "url": "chapterurl||@js:\nvar u = String(result || '').trim();\nif(!u) return '';\nif(/^https?:\\/\\//i.test(u)) return u;\nif(u.charAt(0) !== '/') u = '/' + u;\nreturn config.host.replace(/\\/+$/, '') + u;",
    "host": "https://www.shuhaoxs.com/",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.shuhaoxs.com/');\nfunction parseAid(u){\n  u = String(u || '');\n  var m = u.match(/[?&]id=([a-z0-9]+)/i);\n  if(m) return m[1];\n  m = u.match(/\\/book\\/([a-z0-9]+)\\.html/i);\n  if(m) return m[1];\n  m = u.match(/\\/chapter\\/([a-z0-9]+)\\.html/i);\n  if(m) return m[1];\n  m = u.match(/\\/book\\/([a-z0-9]+)-\\d+(?:-\\d+)?\\.html/i);\n  if(m) return m[1];\n  return '';\n}\nfunction parsePage(u){\n  var m = String(u || '').match(/[?&]page=(\\d+)/i);\n  if(!m) return 1;\n  var n = parseInt(m[1], 10);\n  if(!n || n < 1) return 1;\n  return n;\n}\nvar u = '';\nif(params && params.lastResponse && params.lastResponse.nextPageUrl){\n  u = String(params.lastResponse.nextPageUrl);\n}\nvar aid = parseAid(u);\nvar page = parsePage(u);\nif(!aid){\n  var q = '';\n  if(params && params.queryInfo) q = params.queryInfo.detailUrl || params.queryInfo.url || '';\n  if(!q && result){\n    if(typeof result === 'string') q = result;\n    else if(result.detailUrl) q = result.detailUrl;\n    else if(result.url) q = result.url;\n  }\n  if(!q && params && params.responseUrl) q = params.responseUrl;\n  aid = parseAid(q);\n  page = 1;\n}\nif(!aid) return {'url':'', 'httpHeaders':config.httpHeaders};\nvar reqUrl = host + 'index.php?action=loadChapterPage&id=' + aid + '&page=' + page;\nreturn {'url': reqUrl, 'POST': true, 'httpHeaders': config.httpHeaders, 'httpParams': {'id': aid, 'page': page}};",
    "actionID": "chapterList",
    "title": "chaptername||name||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "detailUrl": "chapterurl||@js:\nvar u = String(result || '').trim();\nif(!u) return '';\nif(/^https?:\\/\\//i.test(u)) return u;\nif(u.charAt(0) !== '/') u = '/' + u;\nreturn config.host.replace(/\\/+$/, '') + u;",
    "validConfig": "{\"maxPage\":20}",
    "parserID": "DOM",
    "list": "data||@js:\nvar arr = result || [];\nif(Object.prototype.toString.call(arr) !== '[object Array]') return [];\nvar u = String(params && params.responseUrl ? params.responseUrl : '');\nvar pm = u.match(/[?&]page=(\\d+)/i);\nvar page = pm ? parseInt(pm[1], 10) : 1;\nif(!page || page < 1) page = 1;\nvar start = (page - 1) * 100 + 1;\nvar end = page * 100;\nvar out = [];\nfor(var i = 0; i < arr.length; i++){\n  var it = arr[i] || {};\n  var ord = parseInt(String(it.chapterorder || ''), 10);\n  if(!ord) continue;\n  if(ord < start || ord > end) continue;\n  if(!it.chapterurl) continue;\n  out.push(it);\n}\nreturn out;",
    "moreKeys": {
      "maxPage": 20,
      "removeHtmlKeys": [
        "title"
      ]
    },
    "updateTime": ""
  }
}