可乐小说
https://www.kelexs.com/
dev-xx (13787)4天前
该用户很懒,什么介绍也没有写!
{
"bookSourceUrl": "https:\/\/www.kelexs.com\/",
"bookSourceName": "可乐小说",
"enabledExplore": true,
"enabled": true,
"bookSourceGroup": "",
"author": "",
"help": false,
"html": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <title>可乐小说<\/title>\r\n<\/head>\r\n<body>\r\n<\/body>\r\n<script src=\"https:\/\/vc.jd.com\/web\/js\/jquery-3.1.1.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/crypto-js\/4.2.0\/crypto-js.min.js\"><\/script>\r\n<script>\r\n var isCookieJar=true;\r\n class FlutterJSBridge {\r\n constructor() {\r\n this.init();\r\n }\r\n init() {\r\n if (window.flutter_inappwebview) {\r\n this.isReady = true;\r\n this.CookieJar();\r\n } else {\r\n window.addEventListener('flutterInAppWebViewPlatformReady', () => {\r\n this.isReady = true;\r\n console.log('JSBridge初始化完成');\r\n this.CookieJar();\r\n });\r\n }\r\n }\r\n async CookieJar() {\r\n try {\r\n await window.flutter_inappwebview.callHandler('CookieJar', isCookieJar);\r\n } catch (error) {\r\n console.error('汇报完成准备失败:', error);\r\n }\r\n }\r\n async getbuildNumber() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('buildNumber');\r\n } catch (error) {\r\n return 0;\r\n }\r\n }\r\n async getversion() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('version');\r\n } catch (error) {\r\n return \"0.0.0\";\r\n }\r\n }\r\n async toTraditional(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('toTraditional',str);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async toSimplified(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('toSimplified',str);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async getDeviceid() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('id');\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async getDevice() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('device');\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async log(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('log',str);\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async text(type,str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('text',type,str);\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async showToast(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('showToast',str);\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async getWebViewUA() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('getWebViewUA');\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async openurl(url) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('openurl',url,\"\");\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async openurlwithMimeType(url,mimeType) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('openurl',url,mimeType);\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async webview(url,js,html,body,header) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,\"\",\"\");\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async webViewGetOverrideUrl(url,js,html,body,header,overrideUrlRegex) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,overrideUrlRegex,\"\");\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async webViewGetSource(url,js,html,body,header,urlregex) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('webview',url,js,html,body,header,\"\",urlregex);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async startBrowser(url,title,header) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('startBrowser',url,title,header);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async startBrowserWithShouldOverrideUrlLoading(url,title,header) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('startBrowserWithShouldOverrideUrlLoading',url,title,header);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async startBrowserDp(url,title) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('startBrowserDp',url,title);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async back() {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('back');\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n async utf8ToGbkUrlEncoded(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('utf8ToGbkUrlEncoded',str);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async getVerificationCode(str,header) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('getVerificationCode',str,header);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async addbook(bookUrl) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('addbook',bookUrl);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async base64encode(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('base64encode',str);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n async base64decode(str) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('base64decode',str);\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n }\r\n class Http {\r\n constructor() {}\r\n async Get(url, headers, followRedirects) {\r\n try { return await window.flutter_inappwebview.callHandler('http', 'get', url, '', headers, followRedirects, ''); } catch (error) { return null; }\r\n }\r\n async Post(url, headers, body, contentType, followRedirects) {\r\n try { return await window.flutter_inappwebview.callHandler('http', 'post', url, body, headers, followRedirects, contentType); } catch (error) { return null; }\r\n }\r\n }\r\n class Cache {\r\n constructor() {}\r\n async get(key) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cache.get',key);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async set(key,value) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cache.set',key,value);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async remove(key) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cache.remove',key);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async getLoginInfo(){\r\n return await this.get(\"LoginInfo\")\r\n }\r\n async putLoginInfo(info){\r\n return await this.set(\"LoginInfo\",info)\r\n }\r\n async getbookVariable(bookurl){\r\n return await this.get(bookurl)\r\n }\r\n async setbookVariable(bookurl,value){\r\n return await this.set(bookurl,value)\r\n }\r\n }\r\n class Cookie {\r\n constructor() {}\r\n async get(url) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cookie.get',url);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async remove(url) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cookie.remove',url);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async set(url,value) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cookie.set',url,value);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async setCookie(url,key,value) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cookie.setcookie',url,key,value);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n async getCookie(url,value) {\r\n try {\r\n return await window.flutter_inappwebview.callHandler('cookie.getCookie',url,value);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n }\r\n function parseHTMLSafely(htmlStr) {\r\n try {\r\n var tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = htmlStr;\r\n return $(tempDiv);\r\n } catch (e) {\r\n flutterBridge.log(\"HTML解析错误:\"+e.message);\r\n return $('<div>');\r\n }\r\n }\r\n function removeHTMLSafely(tempContainer) {\r\n try {\r\n if (tempContainer[0]) { tempContainer = tempContainer[0]; }\r\n tempContainer.innerHTML = '';\r\n if (tempContainer.parentNode) {\r\n tempContainer.parentNode.removeChild(tempContainer);\r\n }\r\n } catch (e) {\r\n flutterBridge.log(\"HTML移除失败:\"+e.message);\r\n }\r\n }\r\n function removeHTMLTags(htmlString) {\r\n var result = htmlString.replace(\/<script\\b[^<]*(?:(?!<\\\/script>)<[^<]*)*<\\\/script>\/gi, '');\r\n result = result.replace(\/<style\\b[^<]*(?:(?!<\\\/style>)<[^<]*)*<\\\/style>\/gi, '');\r\n result = result.replace(\/<link\\b[^<]*(?:(?!<\\\/link>)<[^<]*)*<\\\/link>\/gi, '');\r\n return result;\r\n }\r\n<\/script>\r\n<script>\r\n const flutterBridge = new FlutterJSBridge();\r\n const cache = new Cache();\r\n const http = new Http();\r\n const cookie = new Cookie();\r\n var baseurl = \"https:\/\/www.kelexs.com\";\r\n var searchBase = \"https:\/\/www.rrssk.com\";\r\n var header = {\r\n \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 9; SM-G9600) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/95.0.4638.74 Mobile Safari\/537.36\",\r\n \"Referer\": baseurl\r\n };\r\n function getDateCookie() {\r\n var d = new Date();\r\n var y = String(d.getFullYear()).slice(2);\r\n var m = d.getMonth() + 1;\r\n var day = d.getDate();\r\n if (m < 10) { m = \"0\" + m; }\r\n if (day < 10) { day = \"0\" + day; }\r\n return \"k=\" + y + m + day;\r\n }\r\n function getSearchHeaders() {\r\n var h = JSON.parse(JSON.stringify(header));\r\n h[\"Cookie\"] = getDateCookie();\r\n h[\"Referer\"] = \"https:\/\/www.rrssk.com\/\";\r\n return JSON.stringify(h);\r\n }\r\n function getHeaders() {\r\n return JSON.stringify(header);\r\n }\r\n function aesEncrypt(plaintext) {\r\n var keyStr = 'lzxHpH8PLGXcrCIQ';\r\n var iv = CryptoJS.enc.Utf8.parse(keyStr);\r\n var key = CryptoJS.enc.Utf8.parse(keyStr);\r\n var keyWords = key.words.slice();\r\n while (keyWords.length < 8) { keyWords.push(0); }\r\n key = CryptoJS.lib.WordArray.create(keyWords, 32);\r\n var encrypted = CryptoJS.AES.encrypt(plaintext, key, {\r\n iv: iv,\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7\r\n });\r\n return encrypted.toString();\r\n }\r\n function extractBookId(html) {\r\n var m = html.match(\/upclick\\('([^']+)'\\)\/);\r\n return m ? m[1] : '';\r\n }\r\n function extractId(url) {\r\n var m = url.match(\/book\\\/([^\\.\\\/]+)\/);\r\n return m ? m[1] : '';\r\n }\r\n async function search(key, page) {\r\n try {\r\n var encrypted = '';\r\n try { encrypted = aesEncrypt(key); } catch(e) {}\r\n if (!encrypted) { encrypted = 'o14V2PbyUaQmq0BDTbjTdw=='; }\r\n encrypted = encodeURIComponent(encrypted);\r\n var searchUrl = searchBase + \"\/k-\" + encrypted + \".html\";\r\n var post = await http.Get(searchUrl, getSearchHeaders(), true);\r\n if (!post || !post.data) { return \"[]\"; }\r\n var html = post.data;\r\n flutterBridge.text(0, html);\r\n var $container = parseHTMLSafely(removeHTMLTags(html));\r\n var books = [];\r\n $container.find(\".list.dList ul li\").each(function() {\r\n var $item = $(this);\r\n var $pic = $item.find(\".pic\");\r\n var picHtml = $pic.html() || '';\r\n var bookId = extractBookId(picHtml);\r\n var bookUrl = '';\r\n if (bookId) {\r\n bookUrl = baseurl + '\/book\/' + bookId + '.html';\r\n } else {\r\n bookUrl = $pic.find(\"a\").attr(\"href\") || '';\r\n if (bookUrl && !bookUrl.startsWith('http')) {\r\n bookUrl = baseurl + bookUrl;\r\n }\r\n }\r\n if (!bookUrl) return;\r\n var name = $item.find(\".name.font18 a\").text().trim();\r\n if (!name) return;\r\n var coverUrl = $item.find(\".pic img\").attr(\"src\") || '';\r\n var $infoDls = $item.find(\".info dl\");\r\n var author = '';\r\n var kind = '';\r\n var latestChapterTitle = '';\r\n $infoDls.each(function() {\r\n var $dl = $(this);\r\n var dtText = $dl.find(\"dt\").text().trim();\r\n var ddText = $dl.find(\"dd\").text().trim();\r\n if (dtText.indexOf('作者') >= 0) {\r\n author = $dl.find(\"dd a\").text().trim() || ddText;\r\n } else if (dtText.indexOf('分类') >= 0) {\r\n kind = $dl.find(\"dd a\").text().trim() || ddText;\r\n } else if (dtText.indexOf('更新') >= 0 || dtText.indexOf('最新') >= 0) {\r\n latestChapterTitle = $dl.find(\"dd a\").text().trim() || ddText;\r\n }\r\n });\r\n var intro = $item.find(\".intro\").text().trim();\r\n var book = {\r\n bookUrl: bookUrl,\r\n name: name,\r\n author: author,\r\n coverUrl: coverUrl,\r\n kind: kind,\r\n latestChapterTitle: latestChapterTitle,\r\n intro: intro,\r\n tocUrl: bookUrl,\r\n type: 0\r\n };\r\n books.push(book);\r\n });\r\n removeHTMLSafely($container);\r\n return JSON.stringify(books);\r\n } catch (e) {\r\n flutterBridge.log(\"搜索错误:\" + e.message);\r\n return \"[]\";\r\n }\r\n }\r\n async function info(bookurl) {\r\n try {\r\n var post = await http.Get(bookurl, getHeaders(), true);\r\n if (!post || !post.data) {\r\n return JSON.stringify({ bookUrl: bookurl });\r\n }\r\n var html = post.data;\r\n flutterBridge.text(1, html);\r\n var $container = parseHTMLSafely(removeHTMLTags(html));\r\n var name = $container.find('meta[property=\"og:novel:book_name\"]').attr('content') || '';\r\n var author = $container.find('meta[property=\"og:novel:author\"]').attr('content') || '';\r\n var coverUrl = $container.find('meta[property=\"og:image\"]').attr('content') || '';\r\n var intro = $container.find('meta[property=\"og:description\"]').attr('content') || '';\r\n var kind = $container.find('meta[property=\"og:novel:category\"]').attr('content') || '';\r\n var status = $container.find('meta[property=\"og:novel:status\"]').attr('content') || '';\r\n var lastChapter = $container.find('meta[property=\"og:novel:latest_chapter_name\"]').attr('content') || '';\r\n var updateTime = $container.find('meta[property=\"og:novel:update_time\"]').attr('content') || '';\r\n var bookId = extractId(bookurl);\r\n var tocUrl = bookId ? baseurl + '\/chapter\/' + bookId + '.html' : bookurl;\r\n if (kind && updateTime) {\r\n kind = kind + ' | ' + updateTime;\r\n }\r\n var book = {\r\n bookUrl: bookurl,\r\n name: name,\r\n author: author,\r\n coverUrl: coverUrl,\r\n intro: intro,\r\n kind: kind,\r\n status: status,\r\n wordCount: lastChapter,\r\n tocUrl: tocUrl,\r\n type: 0\r\n };\r\n removeHTMLSafely($container);\r\n return JSON.stringify(book);\r\n } catch (e) {\r\n flutterBridge.log(\"详情错误:\" + e.message);\r\n return JSON.stringify({ bookUrl: bookurl });\r\n }\r\n }\r\n async function chapter(tocUrl) {\r\n try {\r\n var post = await http.Get(tocUrl, getHeaders(), true);\r\n if (!post || !post.data) { return \"[]\"; }\r\n var html = post.data;\r\n flutterBridge.text(2, html);\r\n var $container = parseHTMLSafely(removeHTMLTags(html));\r\n var chapters = [];\r\n $container.find(\".chapListBody ul a\").each(function() {\r\n var name = $(this).text().trim();\r\n var href = $(this).attr(\"href\") || '';\r\n if (!name || name.length < 1) return;\r\n if (name.indexOf('点击阅读') >= 0) return;\r\n if (!href.startsWith('http')) { href = baseurl + href; }\r\n chapters.push({\r\n name: name,\r\n chapterId: href,\r\n index: chapters.length,\r\n isPay: false, isVip: false, isVolume: false, tag: \"\"\r\n });\r\n });\r\n var pageCount = $container.find(\"[data-p]\").length;\r\n if (pageCount > 1) {\r\n var aid = $container.find(\".dropDown\").attr(\"data-aid\") || '';\r\n if (!aid) {\r\n var idMatch = tocUrl.match(\/chapter\\\/([^\\.\\\/]+)\/);\r\n aid = idMatch ? idMatch[1] : '';\r\n }\r\n if (aid) {\r\n var aesKey = '', aesIv = '';\r\n var jsMatch = html.match(\/<script[^>]+src=[\"']([^\"']*\\\/templates\\\/js\\\/[a-zA-Z0-9]{25,}\\.js)[\"'][^>]*><\\\/script>\/i);\r\n if (jsMatch) {\r\n var jsUrl = jsMatch[1];\r\n if (!jsUrl.startsWith('http')) jsUrl = baseurl + jsUrl;\r\n var jsResp = await http.Get(jsUrl, getHeaders(), true);\r\n if (jsResp && jsResp.data) {\r\n var jsContent = jsResp.data;\r\n var keyM = jsContent.match(\/new\\s+AESCrypt\\s*\\(\\s*'([^']+)'\\s*\\)\/);\r\n if (keyM) aesKey = keyM[1];\r\n var ivM = jsContent.match(\/this\\.iv\\s*=\\s*CryptoJS\\.enc\\.Utf8\\.parse\\s*\\(\\s*'([^']+)'\\s*\\)\/);\r\n if (ivM) aesIv = ivM[1];\r\n }\r\n }\r\n if (!aesKey) aesKey = 'LjR0uHn5Itr0mrtL4PjZZabGnOFWNNUn';\r\n if (!aesIv) aesIv = '3932334301612710';\r\n var cKey = CryptoJS.enc.Utf8.parse(aesKey);\r\n var cIv = CryptoJS.enc.Utf8.parse(aesIv);\r\n var ajaxHeaders = JSON.parse(JSON.stringify(header));\r\n ajaxHeaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n ajaxHeaders[\"Referer\"] = tocUrl;\r\n var ajaxHeadersStr = JSON.stringify(ajaxHeaders);\r\n var postUrl = baseurl + \"\/index.php?action=loadChapterPage\";\r\n function doPage(p) {\r\n var encrypted = CryptoJS.AES.encrypt(JSON.stringify({ id: aid, page: p }), cKey, {\r\n iv: cIv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7\r\n }).toString();\r\n return http.Post(postUrl, ajaxHeadersStr, \"data=\" + encodeURIComponent(encrypted), \"application\/x-www-form-urlencoded\", true);\r\n }\r\n var pages = [];\r\n for (var p = 2; p <= pageCount; p++) pages.push(p);\r\n for (var i = 0; i < pages.length; i += 4) {\r\n var batch = pages.slice(i, i + 4);\r\n var results = await Promise.all(batch.map(function(p) { return doPage(p); }));\r\n for (var j = 0; j < results.length; j++) {\r\n var ajaxPost = results[j];\r\n if (ajaxPost && ajaxPost.data) {\r\n try {\r\n var resp = JSON.parse(ajaxPost.data);\r\n if (resp.code === 0 && resp.data) {\r\n for (var k = 0; k < resp.data.length; k++) {\r\n var item = resp.data[k];\r\n chapters.push({\r\n name: item.chaptername,\r\n chapterId: baseurl + item.chapterurl,\r\n index: chapters.length,\r\n isPay: false, isVip: false, isVolume: false, tag: \"\"\r\n });\r\n }\r\n }\r\n } catch (e2) { flutterBridge.log(\"解析章节AJAX错误:\" + e2.message); }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n removeHTMLSafely($container);\r\n return JSON.stringify(chapters);\r\n } catch (e) {\r\n flutterBridge.log(\"章节错误:\" + e.message);\r\n return \"[]\";\r\n }\r\n }\r\n function extractContentText($content) {\r\n $content.find(\"#ad-container, #center_tip, script, style, iframe\").remove();\r\n var rawText = $content.html() || '';\r\n rawText = rawText.replace(\/<br\\s*\\\/?>\/gi, '\\n');\r\n rawText = rawText.replace(\/ \/g, ' ');\r\n rawText = rawText.replace(\/<p>\/gi, '');\r\n rawText = rawText.replace(\/<\\\/p>\/gi, '\\n');\r\n rawText = rawText.replace(\/<[^>]+>\/g, '');\r\n return rawText;\r\n }\r\n function filterAdLines(rawText) {\r\n var lines = rawText.split('\\n');\r\n var filtered = [];\r\n var adKeywords = [\"最新网址\", \"手机阅读\", \"请收藏本站\", \"本章未完\", \"点击继续\", \"温馨提示\", \"txt下载\", \"电子书下载\", \"可乐小说\", \"www.kelexs.com\", \"首发域名\", \"提供最舒适的阅读体验\", \"章节错误\", \"点此举报\", \"读取当前章节内容失败\"];\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i].trim();\r\n if (!line) continue;\r\n var isAd = false;\r\n for (var j = 0; j < adKeywords.length; j++) {\r\n if (line.indexOf(adKeywords[j]) >= 0) { isAd = true; break; }\r\n }\r\n if (!isAd) filtered.push(line);\r\n }\r\n return filtered.join('\\n');\r\n }\r\n async function content(url) {\r\n try {\r\n var allText = '';\r\n var curUrl = url;\r\n for (var p = 0; p < 20; p++) {\r\n var post = await http.Get(curUrl, getHeaders(), true);\r\n if (!post || !post.data) break;\r\n var html = post.data;\r\n flutterBridge.text(3, html);\r\n var $container = parseHTMLSafely(removeHTMLTags(html));\r\n var rawText = extractContentText($container.find(\".content\"));\r\n if (p === 0) { allText = rawText; } else { allText += '\\n' + rawText; }\r\n var nextHref = '';\r\n var idx = html.indexOf('class=\"btnBlack\"');\r\n while (idx >= 0) {\r\n var start = html.lastIndexOf('<a', idx);\r\n if (start >= 0) {\r\n var end = html.indexOf('<\/a>', idx);\r\n if (end > start) {\r\n var seg = html.substring(start, end + 4);\r\n if (seg.indexOf('下一页') > 0) {\r\n var hm = seg.match(\/href=\"([^\"]+)\"\/);\r\n if (hm && hm[1] !== '#') { nextHref = hm[1]; break; }\r\n }\r\n }\r\n }\r\n idx = html.indexOf('class=\"btnBlack\"', idx + 1);\r\n }\r\n removeHTMLSafely($container);\r\n if (!nextHref || nextHref === '#' || nextHref.indexOf('javascript') >= 0) break;\r\n if (!nextHref.startsWith('http')) { nextHref = baseurl + nextHref; }\r\n curUrl = nextHref;\r\n }\r\n var result = filterAdLines(allText);\r\n if (result.length < 50) return \"\";\r\n return result;\r\n } catch (e) {\r\n flutterBridge.log(\"正文错误:\" + e.message);\r\n return \"\";\r\n }\r\n }\r\n async function getfinds() {\r\n var result = [];\r\n var push = (title, url, type) => result.push({ title: title, url: url, type: type || 0 });\r\n push(\"全部\", baseurl + \"\/list-0-{{page}}\/\", 0);\r\n push(\"男生·玄幻\", baseurl + \"\/list-4-{{page}}\/\", 0);\r\n push(\"男生·奇幻\", baseurl + \"\/list-5-{{page}}\/\", 0);\r\n push(\"男生·武侠\", baseurl + \"\/list-6-{{page}}\/\", 0);\r\n push(\"男生·仙侠\", baseurl + \"\/list-7-{{page}}\/\", 0);\r\n push(\"男生·都市\", baseurl + \"\/list-8-{{page}}\/\", 0);\r\n push(\"男生·军事\", baseurl + \"\/list-9-{{page}}\/\", 0);\r\n push(\"男生·历史\", baseurl + \"\/list-10-{{page}}\/\", 0);\r\n push(\"男生·游戏\", baseurl + \"\/list-11-{{page}}\/\", 0);\r\n push(\"男生·体育\", baseurl + \"\/list-12-{{page}}\/\", 0);\r\n push(\"男生·科幻\", baseurl + \"\/list-13-{{page}}\/\", 0);\r\n push(\"男生·诸天无限\", baseurl + \"\/list-14-{{page}}\/\", 0);\r\n push(\"男生·悬疑\", baseurl + \"\/list-15-{{page}}\/\", 0);\r\n push(\"女生·古代言情\", baseurl + \"\/list-16-{{page}}\/\", 0);\r\n push(\"女生·现代言情\", baseurl + \"\/list-18-{{page}}\/\", 0);\r\n push(\"女生·浪漫青春\", baseurl + \"\/list-19-{{page}}\/\", 0);\r\n push(\"二次元\", baseurl + \"\/list-3-{{page}}\/\", 0);\r\n return JSON.stringify(result);\r\n }\r\n async function find(url, page) {\r\n try {\r\n var u = url.replace(\"{{page}}\", page);\r\n if (!u.startsWith('http')) { u = baseurl + u; }\r\n var post = await http.Get(u, getHeaders(), true);\r\n if (!post || !post.data) { return \"[]\"; }\r\n var html = post.data;\r\n var $container = parseHTMLSafely(removeHTMLTags(html));\r\n var books = [];\r\n $container.find(\".list.dList ul li\").each(function() {\r\n var $item = $(this);\r\n var $nameLink = $item.find(\".name.font18 a\");\r\n var bookUrl = $nameLink.attr(\"href\") || '';\r\n if (!bookUrl) return;\r\n if (!bookUrl.startsWith('http')) { bookUrl = baseurl + bookUrl; }\r\n var name = $nameLink.text().trim();\r\n if (!name) return;\r\n var coverUrl = $item.find(\".pic img\").attr(\"src\") || '';\r\n if (coverUrl && !coverUrl.startsWith('http')) { coverUrl = baseurl + coverUrl; }\r\n var $dls = $item.find(\".info dl\");\r\n var author = '';\r\n var kind = '';\r\n var latestChapterTitle = '';\r\n $dls.each(function() {\r\n var $dl = $(this);\r\n var dtText = $dl.find(\"dt\").text().trim();\r\n var aText = $dl.find(\"dd a\").text().trim();\r\n if (dtText.indexOf('作者') >= 0) {\r\n author = aText || $dl.find(\"dd\").text().trim();\r\n } else if (dtText.indexOf('分类') >= 0) {\r\n kind = aText || $dl.find(\"dd\").text().trim();\r\n } else if (dtText.indexOf('更新') >= 0) {\r\n latestChapterTitle = aText || $dl.find(\"dd\").text().trim();\r\n }\r\n });\r\n var intro = $item.find(\".intro\").text().trim();\r\n var book = {\r\n bookUrl: bookUrl,\r\n name: name,\r\n author: author,\r\n coverUrl: coverUrl,\r\n kind: kind,\r\n latestChapterTitle: latestChapterTitle,\r\n intro: intro,\r\n tocUrl: bookUrl,\r\n type: 0\r\n };\r\n books.push(book);\r\n });\r\n removeHTMLSafely($container);\r\n return JSON.stringify(books);\r\n } catch (e) {\r\n flutterBridge.log(\"发现错误:\" + e.message);\r\n return \"[]\";\r\n }\r\n }\r\n async function getloginurl(){\r\n return baseurl;\r\n }\r\n async function login(){\r\n }\r\n async function pay(bookurl,url){\r\n }\r\n async function imagedecrypt(url,image){\r\n }\r\n async function shouldOverrideUrlLoading(url){\r\n return true;\r\n }\r\n<\/script>\r\n<\/html>",
"login": false,
"lastUpdateTime": "1783326951842"
}