🥕茶马小说

https://www.chamabooks.net

autobcb_admin (12020)2小时前

我是萝卜制作
二维码导入(APP尚未完成该功能)
{
    "bookSourceUrl": "https:\/\/www.chamabooks.net",
    "bookSourceName": "🥕茶马小说",
    "enabledExplore": true,
    "enabled": true,
    "bookSourceGroup": "",
    "author": "",
    "help": false,
    "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>茶马小说网书源<\/title>\n<\/head>\n<body>\n\n<\/body>\n<script src=\"https:\/\/vc.jd.com\/web\/js\/jquery-3.1.1.min.js\"><\/script>\n<script>\n  var isCookieJar = true;\n  class FlutterJSBridge {\n    constructor() {\n      this.init();\n    }\n\n    init() {\n      if (window.flutter_inappwebview) {\n        this.isReady = true;\n        this.CookieJar();\n      } else {\n        window.addEventListener('flutterInAppWebViewPlatformReady', () => {\n          this.isReady = true;\n          this.CookieJar();\n        });\n      }\n    }\n\n    async CookieJar() {\n      try {\n        await window.flutter_inappwebview.callHandler('CookieJar', isCookieJar);\n      } catch (error) {\n        console.error('CookieJar error:', error);\n      }\n    }\n\n    async getbuildNumber() {\n      try {\n        return await window.flutter_inappwebview.callHandler('buildNumber');\n      } catch (error) {\n        return 0;\n      }\n    }\n\n    async getversion() {\n      try {\n        return await window.flutter_inappwebview.callHandler('version');\n      } catch (error) {\n        return \"0.0.0\";\n      }\n    }\n\n    async toTraditional(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('toTraditional', str);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async toSimplified(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('toSimplified', str);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async voice() {\n      try {\n        return await window.flutter_inappwebview.callHandler('voice');\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async getDeviceid() {\n      try {\n        return await window.flutter_inappwebview.callHandler('id');\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async getDevice() {\n      try {\n        return await window.flutter_inappwebview.callHandler('device');\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async log(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('log', str);\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async text(type, str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('text', type, str);\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async showToast(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('showToast', str);\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async getWebViewUA() {\n      try {\n        return await window.flutter_inappwebview.callHandler('getWebViewUA');\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async openurl(url) {\n      try {\n        return await window.flutter_inappwebview.callHandler('openurl', url, \"\");\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async openurlwithMimeType(url, mimeType) {\n      try {\n        return await window.flutter_inappwebview.callHandler('openurl', url, mimeType);\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async webview(url, js, html, body, header) {\n      try {\n        return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, \"\", \"\");\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async webViewGetOverrideUrl(url, js, html, body, header, overrideUrlRegex) {\n      try {\n        return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, overrideUrlRegex, \"\");\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async webViewGetSource(url, js, html, body, header, urlregex) {\n      try {\n        return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, \"\", urlregex);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async webViewGetAjax(url, html, body, header, ajaxregex) {\n      try {\n        return await window.flutter_inappwebview.callHandler('webviewajax', url, html, body, header, ajaxregex);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async startBrowser(url, title, header) {\n      try {\n        return await window.flutter_inappwebview.callHandler('startBrowser', url, title, header);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async startBrowserWithShouldOverrideUrlLoading(url, title, header) {\n      try {\n        return await window.flutter_inappwebview.callHandler('startBrowserWithShouldOverrideUrlLoading', url, title, header);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async startBrowserDp(url, title) {\n      try {\n        return await window.flutter_inappwebview.callHandler('startBrowserDp', url, title);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async back() {\n      try {\n        return await window.flutter_inappwebview.callHandler('back');\n      } catch (error) {\n        return false;\n      }\n    }\n\n    async utf8ToGbkUrlEncoded(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('utf8ToGbkUrlEncoded', str);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async getVerificationCode(str, header) {\n      try {\n        return await window.flutter_inappwebview.callHandler('getVerificationCode', str, header);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async addbook(bookUrl) {\n      try {\n        return await window.flutter_inappwebview.callHandler('addbook', bookUrl);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async base64encode(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('base64encode', str);\n      } catch (error) {\n        return \"\";\n      }\n    }\n\n    async base64decode(str) {\n      try {\n        return await window.flutter_inappwebview.callHandler('base64decode', str);\n      } catch (error) {\n        return \"\";\n      }\n    }\n  }\n\n  class Http {\n    constructor() {}\n\n    async Get(url, headers, followRedirects) {\n      try {\n        return await window.flutter_inappwebview.callHandler('http', \"get\", url, \"\", JSON.stringify(headers), followRedirects, \"\");\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async Head(url, headers, followRedirects) {\n      try {\n        return await window.flutter_inappwebview.callHandler('http', \"head\", url, \"\", JSON.stringify(headers), followRedirects, \"\");\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async Post(url, headers, body, contenttype, followRedirects) {\n      try {\n        return await window.flutter_inappwebview.callHandler('http', \"post\", url, body, JSON.stringify(headers), followRedirects, contenttype);\n      } catch (error) {\n        return null;\n      }\n    }\n  }\n\n  class Cache {\n    constructor() {}\n\n    async get(key) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cache.get', key);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async set(key, value) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cache.set', key, value);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async remove(key) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cache.remove', key);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async getLoginInfo() {\n      return await this.get(\"LoginInfo\");\n    }\n\n    async putLoginInfo(info) {\n      return await this.set(\"LoginInfo\", info);\n    }\n\n    async getbookVariable(bookurl) {\n      return await this.get(bookurl);\n    }\n\n    async setbookVariable(bookurl, value) {\n      return await this.set(bookurl, value);\n    }\n  }\n\n  class Cookie {\n    constructor() {}\n\n    async get(url) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cookie.get', url);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async remove(url) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cookie.remove', url);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async set(url, value) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cookie.set', url, value);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async setCookie(url, key, value) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cookie.setcookie', url, key, value);\n      } catch (error) {\n        return null;\n      }\n    }\n\n    async getCookie(url, value) {\n      try {\n        return await window.flutter_inappwebview.callHandler('cookie.getCookie', url, value);\n      } catch (error) {\n        return null;\n      }\n    }\n  }\n\n  function parseHTMLSafely(htmlStr) {\n    try {\n      var tempDiv = document.createElement('div');\n      tempDiv.innerHTML = htmlStr;\n      return $(tempDiv);\n    } catch (e) {\n      flutterBridge.log(\"HTML解析错误:\" + e.message);\n      return $('<div>');\n    }\n  }\n\n  function removeHTMLSafely(tempContainer) {\n    try {\n      tempContainer.innerHTML = '';\n      if (tempContainer.parentNode) {\n        tempContainer.parentNode.removeChild(tempContainer);\n      }\n    } catch (e) {\n      flutterBridge.log(\"HTML移除失败:\" + e.message);\n    }\n  }\n\n  function removeHTMLTags(htmlString) {\n    let result = htmlString.replace(\/<script\\b[^<]*(?:(?!<\\\/script>)<[^<]*)*<\\\/script>\/gi, '');\n    result = result.replace(\/<style\\b[^<]*(?:(?!<\\\/style>)<[^<]*)*<\\\/style>\/gi, '');\n    return result;\n  }\n<\/script>\n\n<script>\n    const flutterBridge = new FlutterJSBridge();\n    const cache = new Cache();\n    const http = new Http();\n    const cookie = new Cookie();\n    const DOMAIN = \"https:\/\/www.chamabooks.net\";\n\n    async function search(key, page) {\n  if(page > 1){\n            return  \"[]\";\n        }\n    const url = `${DOMAIN}\/main?s=${encodeURIComponent(key)}`;\n    const headers = {\n        \"User-Agent\": await flutterBridge.getWebViewUA() || \"Mozilla\/5.0\",\n        \"Referer\": DOMAIN\n    };\n    const res = await http.Get(url, headers, true);\n    if (!res || !res.data) return \"[]\";\n\n    let $html = parseHTMLSafely(res.data);\n    let list = [];\n\n    $html.find(\".novel-item\").each(function () {\n        let $b = $(this);\n        let href = $b.find(\".novel-subject a\").attr(\"href\");\n        let name = $b.find(\".novel-subject a\").text().trim();\n        let author = $b.find(\".misc-value a\").text().trim();\n        let category = $b.find(\".category\").text().trim();\n\n       \n        let intro = \"\";\n        $b.find(\".novel-desc p\").each(function () {\n            let p = $(this).text().trim();\n            if (p) intro += p + \"\\n\\n\";\n        });\n\n        list.push({\n            bookUrl: href ? (href.startsWith(\"http\") ? href : DOMAIN + href) : \"\",\n            name: name,\n            author: author,\n            kind: category,\n            coverUrl: \"\",\n            intro: intro,\n            tocUrl: href ? (href.startsWith(\"http\") ? href : DOMAIN + href) : \"\",\n            type: 0\n        });\n    });\n\n    removeHTMLSafely($html[0]);\n    return JSON.stringify(list);\n}\n\n    async function info(bookurl) {\n    const url = bookurl.startsWith(\"http\") ? bookurl : `${DOMAIN}${bookurl}`;\n    const headers = {\n        \"User-Agent\": await flutterBridge.getWebViewUA() || \"Mozilla\/5.0\",\n        \"Referer\": DOMAIN\n    };\n    const res = await http.Get(url, headers, true);\n    if (!res || !res.data) return JSON.stringify({});\n\n    let $html = parseHTMLSafely(res.data);\n\n   \n    let intro = \"\";\n    $html.find(\".novel-summary-content p\").each(function () {\n        let p = $(this).text().trim();\n        if (p) intro += p + \"\\n\\n\";\n    });\n\n    const bookInfo = {\n        bookUrl: bookurl,\n        name: $html.find(\"#novel-header h1\").text().replace(\/作者:.*\/, \"\").trim().replace(\/《|》\/g, \"\"),\n        author: $html.find(\"#novel-header a\").text().replace(\"作者:\", \"\").trim(),\n        kind: $html.find(\".category\").text().trim(),\n        wordCount: $html.find(\".misc-value:contains('万')\").first().text().trim(),\n        chapterCount: $html.find(\".misc-value\").eq(1).text().trim(),\n        intro: intro,\n        coverUrl: \"\",\n        tocUrl: bookurl,\n        latestChapterTitle: \"\"\n    };\n\n    removeHTMLSafely($html[0]);\n    return JSON.stringify(bookInfo);\n}\r\n\n    async function chapter(tocUrl) {\n    const url = tocUrl.startsWith(\"http\") ? tocUrl : `${DOMAIN}${tocUrl}`;\n    const headers = {\n        \"User-Agent\": await flutterBridge.getWebViewUA() || \"Mozilla\/5.0\",\n        \"Referer\": DOMAIN\n    };\n    const res = await http.Get(url, headers, true);\n    if (!res || !res.data) return \"[]\";\n\n    let $html = parseHTMLSafely(res.data);\n    let list = [];\n    let index = 0;\n\n    $html.find(\".pg-sel option\").each(function () {\n        let $opt = $(this);\n        let chapterUrl = $opt.attr(\"value\");\n        let chapterName = $opt.text().trim();\n\n        list.push({\n            bookUrl: tocUrl,\n            chapterId: chapterUrl,\n            name: chapterName,\n            index: index++\n        });\n    });\n\n    removeHTMLSafely($html[0]);\n    return JSON.stringify(list);\n}\n\n    async function content(url) {\n    const purl = url.startsWith(\"http\") ? url : `${DOMAIN}${url}`;\n    const headers = {\n        \"User-Agent\": await flutterBridge.getWebViewUA() || \"Mozilla\/5.0\",\n        \"Referer\": purl.replace(\/\\\/[^\\\/]+$\/, \"\/\")\n    };\n    const res = await http.Get(purl, headers, true);\n    if (!res || !res.data) return \"获取正文失败\";\n\n    let $html = parseHTMLSafely(res.data);\n\n    let txt = \"\";\n    $html.find(\"#novel-content p\").each(function () {\n        let p = $(this).text().trim();\n        if (p) txt += p + \"\\n\\n\";\n    });\n\n    removeHTMLSafely($html[0]);\n    return txt;\n}\n    async function getfinds() {\n    var result = [];\n\n    var doc = parseHTMLSafely((await http.Get(DOMAIN, {}, true)).data);\n    var tagList = doc.find(\"#category-menu ul li a\");\n\n    for (var i = 0; i < tagList.length-1; i++) {\n        var a = tagList.eq(i);\n        var title = a.text().replace(\/\\s+\/g, \"\");\n        var href = a.attr(\"href\");\n\n        var url = DOMAIN + href + (href.includes(\"?\") ? \"&\" : \"?\") + \"page={{page}}\";\n\n        result.push({\n            title: title,\n            url: url\n        });\n    }\n\n    removeHTMLSafely(doc[0]);\n    return JSON.stringify(result);\n}\n    async function find(url, page) {\n    var result = [];\n\n    var targetUrl = url.replace(\/page=\\{\\{page\\}\\}\/, \"p=\" + page);\r\n    var doc = parseHTMLSafely((await http.Get(targetUrl, {}, true)).data);\n\n    var items = doc.find(\".novel-item\");\n\n    for (var i = 0; i < items.length; i++) {\n        var item = items.eq(i);\n\n        var href = item.find(\".novel-subject a\").attr(\"href\");\n        var name = item.find(\".novel-subject a\").text().trim();\n        var author = item.find(\".misc-value a\").text().trim();\n        var category = item.find(\".category\").text().trim();\n\n        var intro = \"\";\n        item.find(\".novel-desc p\").each(function () {\n            var p = $(this).text().trim();\n            if (p) intro += p + \"\\n\\n\";\n        });\n\n        var bookUrl = href.startsWith(\"http\") ? href : DOMAIN + href;\n\n        result.push({\n            bookUrl: bookUrl,\n            name: name,\n            author: author,\n            kind: category,\n            coverUrl: \"\",\n            intro: intro,\n            tocUrl: bookUrl,\n            type: 0\n        });\n    }\n\n    removeHTMLSafely(doc[0]);\n    return JSON.stringify(result);\n}\n    async function getloginurl() {\n        return JSON.stringify([]);\n    }\n\n    async function login() {\n        return;\n    }\n\n    async function pay(bookurl, url) {\n        return;\n    }\n\n    async function imagedecrypt(url, image) {\n        return [];\n    }\n\n    async function shouldOverrideUrlLoading(url) {\n        return true;\n    }\n\n    async function gethelp() {\n        return \"茶马小说网书源\";\n    }\n<\/script>\n<\/html>",
    "login": false,
    "lastUpdateTime": "1767342690223"
}
广告