篱笆好文学-libahao-v0306(公众号:好用的软件站)

https://www.libahao.com/

lindongjiang (1001)4小时前

暂无介绍说明

{
  "chapterContent": {
    "actionID": "chapterContent",
    "validConfig": "{\"maxPage\":10}",
    "content": "//div[@id='chapterContent']||@js:\nvar txt = String(result || '');\ntxt = txt.replace(/\\u00a0/g, ' ');\ntxt = txt.replace(/曾经有一群勇敢的探索者|退出纯净模式|篱笆好文学.*旅程/g, '');\ntxt = txt.replace(/本章(?:未完|结束),点击继续阅读->>/g, '');\ntxt = txt.replace(/\\s+/g, ' ').trim();\nreturn txt;",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.libahao.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": "(//section[contains(@class,'chapters-section')]/header/h2/text())[1]||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "moreKeys": {
      "maxPage": 10,
      "removeHtmlKeys": [
        "title",
        "content"
      ]
    },
    "host": "https://www.libahao.com/",
    "responseFormatType": "html",
    "parserID": "DOM",
    "nextPageUrl": "(//div[contains(@class,'chapter-navigation')]/a[last()]/@href)[1]||@js:\nvar host = String(config.host || 'https://www.libahao.com/');\nfunction absUrl(u, base){\n  u = String(u || '').trim();\n  if(!u || /^javascript:/i.test(u) || 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\\/([^\\/]+)\\/(\\d+)(?:_(\\d+))?\\.html$/i);\n  if(!m) return null;\n  var page = m[3] ? parseInt(m[3], 10) : 0;\n  if(page < 0) page = 0;\n  return {'bookKey': m[1], 'chapterId': m[2], '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.bookKey !== nxt.bookKey) return '';\nif(cur.chapterId !== nxt.chapterId) return '';\nif(nxt.page <= cur.page) return '';\nreturn cand;"
  },
  "enable": true,
  "bookDetail": {
    "cat": "//meta[@property='og:novel:category']/@content||(//section[contains(@class,'book-info')]//p[strong[contains(.,'类别')]]/a/text())[1]||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "responseFormatType": "html",
    "lastChapterTitle": "//meta[@property='og:novel:lastest_chapter_name']/@content||(//section[contains(@class,'book-info')]//p[strong[contains(.,'最新章节')]]/a/text())[1]||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "url": "//meta[@property='og:novel:read_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(params && params.responseUrl) return params.responseUrl;\nreturn '';",
    "desc": "//meta[@property='og:description']/@content||(//section[contains(@class,'book-info')]//p[strong[contains(.,'简介')]]/text()[last()])[1]||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "host": "https://www.libahao.com/",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.libahao.com/');\nfunction absUrl(u){\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  if(u.charAt(0) !== '/') u = '/' + u;\n  return host.replace(/\\/+$/, '') + u;\n}\nvar u = '';\nif(params && params.queryInfo){\n  u = params.queryInfo.detailUrl || params.queryInfo.url || '';\n}\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;\nreturn {'url': absUrl(u), 'httpHeaders': config.httpHeaders};",
    "actionID": "bookDetail",
    "detailUrl": "@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(params && params.responseUrl) return params.responseUrl;\nif(typeof result === 'string') return result;\nif(result && result.detailUrl) return result.detailUrl;\nif(result && result.url) return result.url;\nreturn '';",
    "cover": "(//section[contains(@class,'book-info')]//img[1]/@src)[1]||@js:\nvar host = String(config.host || 'https://www.libahao.com/');\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 host.replace(/\\/+$/, '') + u;",
    "validConfig": "",
    "parserID": "DOM",
    "wordCount": "",
    "status": "//meta[@property='og:novel:status']/@content||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "updateTime": "//meta[@property='og:novel:update_time']/@content||(//section[contains(@class,'book-info')]//p[strong[contains(.,'最新更新时间')]]/text()[last()])[1]||@js:return String(result || '').replace(/\\s+/g, ' ').trim();"
  },
  "bookWorld": {
    "分类": {
      "cat": "//td[1]/a/text()||@js:return String(result || '').replace(/[\\[\\]]/g, '').replace(/\\s+/g, ' ').trim();",
      "responseFormatType": "html",
      "author": "//td[4]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "lastChapterTitle": "//td[3]/a/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "bookName": "//td[2]/a/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
      "url": "//td[2]/a/@href",
      "host": "https://www.libahao.com/",
      "requestInfo": "@js:\nvar slug = 'xuanhuan';\nif(params && params.filters && params.filters.category) slug = String(params.filters.category);\nreturn {'url': config.host + slug + '/', 'httpHeaders': config.httpHeaders};",
      "actionID": "bookWorld",
      "detailUrl": "//td[2]/a/@href",
      "cover": "//td[2]/a/@href||@js:\nvar host = String(config.host || 'https://www.libahao.com/').replace(/\\/+$/, '');\nvar s = String(result || '');\nvar m = s.match(/\\/book\\/\\d+_(\\d+)\\//i);\nif(!m) return '';\nreturn host + '/data/image/' + m[1] + '.jpg';",
      "validConfig": "{\"maxPage\":1}",
      "parserID": "DOM",
      "list": "//div[contains(@class,'latest-updates')]//table//tr[td]",
      "moreKeys": {
        "_sIndex": 0,
        "maxPage": 1,
        "pageSize": 30,
        "removeHtmlKeys": [
          "bookName",
          "author",
          "cat",
          "lastChapterTitle",
          "updateTime"
        ],
        "requestFilters": [
          {
            "key": "category",
            "items": [
              {
                "title": "玄幻魔法",
                "value": "xuanhuan"
              },
              {
                "title": "武侠修真",
                "value": "xiuzhen"
              },
              {
                "title": "都市言情",
                "value": "dushi"
              },
              {
                "title": "历史军事",
                "value": "lishi"
              },
              {
                "title": "游戏竞技",
                "value": "wangyou"
              },
              {
                "title": "科幻灵异",
                "value": "kehuan"
              },
              {
                "title": "女生言情",
                "value": "nvpin"
              },
              {
                "title": "其他小说",
                "value": "qita"
              }
            ]
          }
        ]
      },
      "updateTime": "//td[5]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();"
    }
  },
  "sourceUrl": "https://www.libahao.com/",
  "sourceType": "text",
  "weight": 9999,
  "sourceName": "篱笆好文学-libahao-v0306(公众号:好用的软件站)",
  "httpHeaders": {
    "Referer": "https://www.libahao.com/",
    "Cookie": "ff028c4c2f83d2fa225821b6=cf3c106c01ea3df575a09928cde501c9",
    "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": "1772789280",
  "searchBook": {
    "cat": "//td[1]/a/text()||@js:return String(result || '').replace(/[\\[\\]]/g, '').replace(/\\s+/g, ' ').trim();",
    "responseFormatType": "html",
    "author": "//td[4]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "lastChapterTitle": "//td[3]/a/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "bookName": "//td[2]/a/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "url": "//td[2]/a/@href",
    "host": "https://www.libahao.com/",
    "requestInfo": "@js:\nvar routes = ['', 'xuanhuan/', 'xiuzhen/', 'dushi/', 'lishi/', 'wangyou/', 'kehuan/', 'nvpin/', 'qita/'];\nvar page = parseInt(params && params.pageIndex ? params.pageIndex : 1, 10);\nif(!page || page < 1) page = 1;\nif(page > routes.length) page = routes.length;\nreturn {'url': config.host + routes[page - 1], 'httpHeaders': config.httpHeaders};",
    "actionID": "searchBook",
    "detailUrl": "//td[2]/a/@href",
    "cover": "//td[2]/a/@href||@js:\nvar host = String(config.host || 'https://www.libahao.com/').replace(/\\/+$/, '');\nvar s = String(result || '');\nvar m = s.match(/\\/book\\/\\d+_(\\d+)\\//i);\nif(!m) return '';\nreturn host + '/data/image/' + m[1] + '.jpg';",
    "validConfig": "{\"maxPage\":9}",
    "parserID": "DOM",
    "list": "//div[contains(@class,'latest-updates')]//table//tr[td[2]/a]",
    "moreKeys": {
      "pageSize": 30,
      "maxPage": 9,
      "removeHtmlKeys": [
        "bookName",
        "author",
        "cat",
        "lastChapterTitle",
        "updateTime"
      ]
    },
    "updateTime": "//td[5]/text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();"
  },
  "chapterList": {
    "responseFormatType": "html",
    "url": "//text()||@js:\nvar host = String(config.host || 'https://www.libahao.com/');\nfunction toDigitSeq(s){\n  var map = {'零':'0','〇':'0','一':'1','二':'2','两':'2','三':'3','四':'4','五':'5','六':'6','七':'7','八':'8','九':'9'};\n  var out = '';\n  for(var i = 0; i < s.length; i++){\n    var ch = s.charAt(i);\n    if(map.hasOwnProperty(ch)) out += map[ch];\n    else if(/[0-9]/.test(ch)) out += ch;\n    else return '';\n  }\n  return out;\n}\nfunction parseCnInt(s){\n  s = String(s || '').trim();\n  if(!s) return 0;\n  if(/^\\d+$/.test(s)) return parseInt(s, 10);\n  var seq = toDigitSeq(s);\n  if(seq) return parseInt(seq, 10);\n  var num = {'零':0,'〇':0,'一':1,'二':2,'两':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9};\n  var unit = {'十':10,'百':100,'千':1000,'万':10000};\n  var section = 0;\n  var total = 0;\n  var number = 0;\n  for(var i = 0; i < s.length; i++){\n    var ch = s.charAt(i);\n    if(num.hasOwnProperty(ch)){\n      number = num[ch];\n      continue;\n    }\n    if(unit.hasOwnProperty(ch)){\n      var u = unit[ch];\n      if(u === 10000){\n        section = (section + (number || 0)) * u;\n        total += section;\n        section = 0;\n      }else{\n        if(number === 0) number = 1;\n        section += number * u;\n      }\n      number = 0;\n    }\n  }\n  return total + section + number;\n}\nvar title = String(result || '').replace(/\\s+/g, ' ').trim();\nvar n = 0;\nvar m = title.match(/^第([0-9零〇一二两三四五六七八九十百千万]+)[章回节卷集部篇]/);\nif(m) n = parseCnInt(m[1]);\nif(!n || n < 1) return '';\nvar base = '';\nif(params && params.queryInfo) base = params.queryInfo.detailUrl || params.queryInfo.url || '';\nif(!base && params && params.responseUrl) base = params.responseUrl;\nbase = String(base || '').trim();\nvar km = base.match(/\\/book\\/([^\\/]+)\\/?$/i);\nif(!km) km = base.match(/\\/book\\/([^\\/]+)\\/\\d+(?:_\\d+)?\\.html$/i);\nif(!km) return '';\nreturn host.replace(/\\/+$/, '') + '/book/' + km[1] + '/' + n + '.html';",
    "host": "https://www.libahao.com/",
    "requestInfo": "@js:\nvar host = String(config.host || 'https://www.libahao.com/');\nfunction absUrl(u){\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  if(u.charAt(0) !== '/') u = '/' + u;\n  return host.replace(/\\/+$/, '') + 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;\nreturn {'url': absUrl(u), 'httpHeaders': config.httpHeaders};",
    "actionID": "chapterList",
    "title": "//text()||@js:return String(result || '').replace(/\\s+/g, ' ').trim();",
    "detailUrl": "//text()||@js:\nvar host = String(config.host || 'https://www.libahao.com/');\nfunction toDigitSeq(s){\n  var map = {'零':'0','〇':'0','一':'1','二':'2','两':'2','三':'3','四':'4','五':'5','六':'6','七':'7','八':'8','九':'9'};\n  var out = '';\n  for(var i = 0; i < s.length; i++){\n    var ch = s.charAt(i);\n    if(map.hasOwnProperty(ch)) out += map[ch];\n    else if(/[0-9]/.test(ch)) out += ch;\n    else return '';\n  }\n  return out;\n}\nfunction parseCnInt(s){\n  s = String(s || '').trim();\n  if(!s) return 0;\n  if(/^\\d+$/.test(s)) return parseInt(s, 10);\n  var seq = toDigitSeq(s);\n  if(seq) return parseInt(seq, 10);\n  var num = {'零':0,'〇':0,'一':1,'二':2,'两':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9};\n  var unit = {'十':10,'百':100,'千':1000,'万':10000};\n  var section = 0;\n  var total = 0;\n  var number = 0;\n  for(var i = 0; i < s.length; i++){\n    var ch = s.charAt(i);\n    if(num.hasOwnProperty(ch)){\n      number = num[ch];\n      continue;\n    }\n    if(unit.hasOwnProperty(ch)){\n      var u = unit[ch];\n      if(u === 10000){\n        section = (section + (number || 0)) * u;\n        total += section;\n        section = 0;\n      }else{\n        if(number === 0) number = 1;\n        section += number * u;\n      }\n      number = 0;\n    }\n  }\n  return total + section + number;\n}\nvar title = String(result || '').replace(/\\s+/g, ' ').trim();\nvar n = 0;\nvar m = title.match(/^第([0-9零〇一二两三四五六七八九十百千万]+)[章回节卷集部篇]/);\nif(m) n = parseCnInt(m[1]);\nif(!n || n < 1) return '';\nvar base = '';\nif(params && params.queryInfo) base = params.queryInfo.detailUrl || params.queryInfo.url || '';\nif(!base && params && params.responseUrl) base = params.responseUrl;\nbase = String(base || '').trim();\nvar km = base.match(/\\/book\\/([^\\/]+)\\/?$/i);\nif(!km) km = base.match(/\\/book\\/([^\\/]+)\\/\\d+(?:_\\d+)?\\.html$/i);\nif(!km) return '';\nreturn host.replace(/\\/+$/, '') + '/book/' + km[1] + '/' + n + '.html';",
    "validConfig": "",
    "parserID": "DOM",
    "list": "//ul[contains(@class,'all-chapters')]/li/a",
    "moreKeys": {
      "removeHtmlKeys": [
        "title",
        "updateTime"
      ]
    },
    "updateTime": "//meta[@property='og:novel:update_time']/@content||@js:return String(result || '').trim();"
  }
}