🎨包子漫画

https://cn.bzmgcn.com/

dev-xx (13787)07/23 09:24

该用户很懒,什么介绍也没有写!
二维码导入(APP尚未完成该功能)
{
    "bookSourceUrl": "https:\/\/cn.bzmgcn.com\/",
    "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() { this.init(); }\n        init() {\n            if (window.flutter_inappwebview) { this.isReady = true; this.CookieJar(); } else {\n                window.addEventListener('flutterInAppWebViewPlatformReady', () => { this.isReady = true; this.CookieJar(); });\n            }\n        }\n        async CookieJar() { try { await window.flutter_inappwebview.callHandler('CookieJar', isCookieJar); } catch (e) {} }\n        async log(str) { try { return await window.flutter_inappwebview.callHandler('log', str); } catch (e) { return false; } }\n        async text(type, str) { try { return await window.flutter_inappwebview.callHandler('text', type, str); } catch (e) { return false; } }\n        async showToast(str) { try { return await window.flutter_inappwebview.callHandler('showToast', str); } catch (e) { return false; } }\n        async webview(url, js, html, body, header) { try { return await window.flutter_inappwebview.callHandler('webview', url, js, html, body, header, \"\", \"\"); } catch (e) { return \"\"; } }\n        async startBrowser(url, title, header) { try { return await window.flutter_inappwebview.callHandler('startBrowser', url, title, header); } catch (e) { return \"\"; } }\n        async getWebViewUA() { try { return await window.flutter_inappwebview.callHandler('getWebViewUA'); } catch (e) { return \"\"; } }\n    }\n    class Http {\n        async Get(url, headers, followRedirects) {\n            try { return await window.flutter_inappwebview.callHandler('http', \"get\", url, \"\", JSON.stringify(headers), followRedirects, \"\"); } catch (e) { return null; }\n        }\n        async Head(url, headers, followRedirects) {\n            try { return await window.flutter_inappwebview.callHandler('http', \"head\", url, \"\", JSON.stringify(headers), followRedirects, \"\"); } catch (e) { return null; }\n        }\n        async Post(url, headers, body, contenttype, followRedirects) {\n            try { return await window.flutter_inappwebview.callHandler('http', \"post\", url, body, JSON.stringify(headers), followRedirects, contenttype); } catch (e) { return null; }\n        }\n    }\n    class Cache {\n        constructor() {}\n        async get(key) { try { return await window.flutter_inappwebview.callHandler('cache.get', key); } catch (e) { return null; } }\n        async set(key, value) { try { return await window.flutter_inappwebview.callHandler('cache.set', key, value); } catch (e) { return null; } }\n        async remove(key) { try { return await window.flutter_inappwebview.callHandler('cache.remove', key); } catch (e) { return null; } }\n        async getbookVariable(bookurl) { return await this.get(bookurl); }\n        async setbookVariable(bookurl, value) { return await this.set(bookurl, value); }\n    }\n    class Cookie {\n        async get(url) { try { return await window.flutter_inappwebview.callHandler('cookie.get', url); } catch (e) { return null; } }\n        async remove(url) { try { return await window.flutter_inappwebview.callHandler('cookie.remove', url); } catch (e) { return null; } }\n        async set(url, value) { try { return await window.flutter_inappwebview.callHandler('cookie.set', url, value); } catch (e) { return null; } }\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            if (tempContainer[0]) { tempContainer = tempContainer[0]; }\n            tempContainer.innerHTML = '';\n            if (tempContainer.parentNode) { tempContainer.parentNode.removeChild(tempContainer); }\n        } catch (e) {\n            flutterBridge.log(\"HTML移除失败:\" + e.message);\n        }\n    }\n\n    function removeHTMLTags(htmlString) {\n        var result = htmlString.replace(\/<script\\b[^<]*(?:(?!<\\\/script>)<[^<]*)*<\\\/script>\/gi, '');\n        result = result.replace(\/<style\\b[^<]*(?:(?!<\\\/style>)<[^<]*)*<\\\/style>\/gi, '');\n        result = result.replace(\/<link\\b[^<]*(?:(?!<\\\/link>)<[^<]*)*<\\\/link>\/gi, '');\n        return result;\n    }\n\n    function parseCards($container) {\n        var results = [];\n        $container.find(\".comics-card\").each(function() {\n            var $card = $(this);\n            var $titleEl = $card.find(\".comics-card__title h3\");\n            var $linkEl = $card.find(\"a.comics-card__info\");\n            if ($titleEl.length === 0 || $linkEl.length === 0) return;\n            var name = $titleEl.text().trim();\n            var author = $card.find(\"small.tags\").text().trim();\n            var $coverImg = $card.find(\".comics-card__poster amp-img\").first();\n            var cover = $coverImg.attr(\"src\") || \"\";\n            var link = $linkEl.attr(\"href\");\n            if (link && link.indexOf(\"http\") !== 0 && link.indexOf(\"\/\") === 0) link = baseurl + link;\n            results.push({\n                bookUrl: link,\n                name: name,\n                author: author,\n                coverUrl: cover,\n                kind: \"\",\n                wordCount: \"\",\n                type: 2\n            });\n        });\n        return results;\n    }\n\n    const flutterBridge = new FlutterJSBridge();\n    const cache = new Cache();\n    const http = new Http();\n    const cookie = new Cookie();\n    var baseurl = \"https:\/\/cn.bzmgcn.com\";\n    var header = {\n        \"User-Agent\": \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Safari\/537.36\",\n        \"Referer\": baseurl\n    };\n\n    async function search(key, page) {\n        var url = baseurl + \"\/search?q=\" + encodeURIComponent(key);\n        var resp = await http.Get(url, header, true);\n        if (!resp || !resp.data) return \"[]\";\n        var $temp = parseHTMLSafely(removeHTMLTags(resp.data));\n        var cards = parseCards($temp);\n        removeHTMLSafely($temp);\n        return JSON.stringify(cards);\n    }\n\n    async function getfinds() {\n        var result = [];\n        var push = function(title, url, type) { result.push({ title: title, url: url, type: type || 0 }); };\n        push(\"最新上架\", \"\/list\/new\", 0);\n        push(\"全部分类\", \"\/classify?type=all&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"国漫\", \"\/classify?type=all&region=cn&state=all&filter=*&page={{page}}\", 0);\n        push(\"日本\", \"\/classify?type=all&region=jp&state=all&filter=*&page={{page}}\", 0);\n        push(\"韩国\", \"\/classify?type=all&region=kr&state=all&filter=*&page={{page}}\", 0);\n        push(\"欧美\", \"\/classify?type=all&region=en&state=all&filter=*&page={{page}}\", 0);\n        push(\"连载中\", \"\/classify?type=all&region=all&state=serial&filter=*&page={{page}}\", 0);\n        push(\"已完结\", \"\/classify?type=all&region=all&state=pub&filter=*&page={{page}}\", 0);\n        push(\"玄幻\", \"\/classify?type=xuanhuan&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"热血\", \"\/classify?type=rexie&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"恋爱\", \"\/classify?type=lianai&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"奇幻\", \"\/classify?type=qihuan&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"冒险\", \"\/classify?type=mouxian&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"古风\", \"\/classify?type=gufeng&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"科幻\", \"\/classify?type=kehuan&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"悬疑\", \"\/classify?type=xuanyi&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"格斗\", \"\/classify?type=gedou&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"搞笑\", \"\/classify?type=gaoxiao&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"穿越\", \"\/classify?type=chuanyue&region=all&state=all&filter=*&page={{page}}\", 0);\n        push(\"都市\", \"\/classify?type=dushi&region=all&state=all&filter=*&page={{page}}\", 0);\n        return JSON.stringify(result);\n    }\n\n    async function find(url, page) {\n        var u = url;\n        var hasPagePlaceholder = u.indexOf(\"{{page}}\") >= 0;\n        if (hasPagePlaceholder) {\n            u = u.replace(\"{{page}}\", page);\n        }\n        if (u.indexOf(\"\/classify\") === 0) {\n            if (page > 1) {\n                var queryStr = u.split(\"?\")[1] || \"\";\n                var params = {};\n                queryStr.split(\"&\").forEach(function(p) {\n                    var kv = p.split(\"=\");\n                    if (kv.length === 2) params[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\n                });\n                var apiUrl = \"\/api\/bzmhq\/amp_comic_list?type=\" + (params.type || \"all\") +\n                    \"&region=\" + (params.region || \"all\") +\n                    \"&state=\" + (params.state || \"all\") +\n                    \"&filter=\" + (params.filter || \"*\") +\n                    \"&page=\" + page + \"&limit=36&language=cn\";\n                var resp = await http.Get(baseurl + apiUrl, header, true);\n                if (!resp || !resp.data) return \"[]\";\n                try {\n                    var json = JSON.parse(resp.data);\n                    var items = json.items || [];\n                    var cards = [];\n                    for (var i = 0; i < items.length; i++) {\n                        var item = items[i];\n                        var link = baseurl + \"\/comic\/\" + item.comic_id;\n                        var cover = \"https:\/\/static-tw.bzmgcn.com\/cover\/\" + item.topic_img + \"?w=285&h=375&q=100\";\n                        var kind = (item.type_names || []).join(\",\");\n                        cards.push({\n                            bookUrl: link,\n                            name: item.name || \"\",\n                            author: item.author || \"\",\n                            coverUrl: cover,\n                            kind: kind,\n                            wordCount: \"\",\n                            type: 2\n                        });\n                    }\n                    return JSON.stringify(cards);\n                } catch (e) {\n                    return \"[]\";\n                }\n            }\n            u = u.replace(\"&page=1\", \"\");\n        }\n        if (u.indexOf(\"\/list\/\") === 0) {\n            if (page > 1) {\n                u = u.replace(\"{{page}}\", page);\n            }\n            u = u.replace(\"{{page}}\", page);\n        }\n        if (!u.startsWith(\"http\")) u = baseurl + u;\n        var resp = await http.Get(u, header, true);\n        if (!resp || !resp.data) return \"[]\";\n        var $temp = parseHTMLSafely(removeHTMLTags(resp.data));\n        var $container = $temp;\n        var $grid = $temp.find(\".pure-g.classify-items\");\n        if ($grid.length > 0) $container = $grid;\n        var cards = parseCards($container);\n        removeHTMLSafely($temp);\n        return JSON.stringify(cards);\n    }\n\n    async function info(bookurl) {\n        var resp = await http.Get(bookurl, header, true);\n        if (!resp || !resp.data) return JSON.stringify({ bookUrl: bookurl, type: 2 });\n        var $temp = parseHTMLSafely(removeHTMLTags(resp.data));\n        var name = $temp.find(\"h1.comics-detail__title\").text().trim();\n        var author = $temp.find(\"h2.comics-detail__author\").text().trim();\n        var cover = $temp.find(\".de-info__box amp-img\").first().attr(\"src\") || \"\";\n        var intro = $temp.find(\"p.comics-detail__desc\").text().trim();\n        var $tagEls = $temp.find(\".tag-list .tag\");\n        var status = \"\";\n        var kind = \"\";\n        if ($tagEls.length > 0) {\n            status = $tagEls.first().text().trim();\n            var kinds = [];\n            $tagEls.each(function() {\n                var t = $(this).text().trim();\n                if (t !== \"国漫\" && t !== \"日本\" && t !== \"韩国\" && t !== \"欧美\") kinds.push(t);\n            });\n            kinds.shift();\n            kind = kinds.join(\",\");\n        }\n        var tocUrl = bookurl;\n        removeHTMLSafely($temp);\n        return JSON.stringify({\n            bookUrl: bookurl,\n            name: name,\n            author: author,\n            coverUrl: cover,\n            intro: intro,\n            kind: kind,\n            status: status,\n            wordCount: \"\",\n            tocUrl: tocUrl,\n            type: 2\n        });\n    }\n\n    async function chapter(tocUrl) {\n        var resp = await http.Get(tocUrl, header, true);\n        if (!resp || !resp.data) return \"[]\";\n        var html = resp.data;\n        var chapIdx = html.indexOf(\"章节目录\");\n        if (chapIdx >= 0) html = html.substring(chapIdx);\n        var tagRe = \/<a[^>]*class=\"[^\"]*comics-chapters__item[^\"]*\"[^>]*>[\\s\\S]*?<\\\/a>\/g;\n        var tags = html.match(tagRe);\n        var chapters = [];\n        if (tags) {\n            var seen = {};\n            for (var i = 0; i < tags.length; i++) {\n                var tag = tags[i];\n                var h = tag.match(\/href=\"([^\"]+)\"\/);\n                var s = tag.match(\/<span[^>]*>([\\s\\S]*?)<\\\/span>\/);\n                if (!h || !s) continue;\n                var href = h[1];\n                var title = s[1].replace(\/\\s+\/g, \" \").trim();\n                if (!href || !title || title.length < 1 || title.indexOf(\"点击阅读\") >= 0) continue;\n                if (seen[href]) continue;\n                seen[href] = true;\n                if (href.indexOf(\"&amp;\") >= 0) href = href.replace(\/&amp;\/g, \"&\");\n                if (href.indexOf(\"\/\") === 0) href = baseurl + href;\n                chapters.push({ name: title, chapterId: href, index: chapters.length, isPay: false, isVip: false, isVolume: false, tag: \"\" });\n            }\n        }\n        return chapters.length === 0 ? \"[]\" : JSON.stringify(chapters);\n    }\n\n    async function content(url) {\n        var allUrls = [];\n        var firstResp = await http.Get(url, header, true);\n        if (firstResp && firstResp.data) {\n            var tagRe = \/<amp-img[^>]*class=\"[^\"]*comic-contain__item[^\"]*\"[^>]*>\/g;\n            var m;\n            while ((m = tagRe.exec(firstResp.data)) !== null) {\n                var tag = m[0];\n                var src = null;\n                var ds = tag.match(\/data-src=\"([^\"]+)\"\/);\n                if (ds) src = ds[1];\n                if (!src) { var s = tag.match(\/src=\"([^\"]+)\"\/); if (s) src = s[1]; }\n                if (src && src.indexOf(\"http\") === 0 && allUrls.indexOf(src) < 0) allUrls.push(src);\n            }\n        }\n        if (allUrls.length === 0) {\n            var js = \"(function(){\" +\n                \"var imgs=[];var els=document.querySelectorAll('amp-img.comic-contain__item');\" +\n                \"for(var i=0;i<els.length;i++){\" +\n                    \"var s=els[i].getAttribute('data-src')||els[i].getAttribute('src');\" +\n                    \"if(s&&s.indexOf('http')===0)imgs.push(s);\" +\n                \"}\" +\n                \"return JSON.stringify({imgs:imgs});\" +\n            \"})()\";\n            var res = await flutterBridge.webview(url, js, \"\", \"\", JSON.stringify(header));\n            if (!res) return \"\";\n            try {\n                var data = JSON.parse(res);\n                for (var i = 0; i < data.imgs.length; i++) {\n                    if (allUrls.indexOf(data.imgs[i]) < 0) allUrls.push(data.imgs[i]);\n                }\n            } catch (e) { return \"\"; }\n        }\n        if (allUrls.length === 0) {\n            flutterBridge.showToast(\"未找到漫画图片\");\n            return \"\";\n        }\n        var result = \"\";\n        for (var i = 0; i < allUrls.length; i++) {\n            result += '<img src=\"' + allUrls[i] + ',{headers:{Referer:\\'' + baseurl + '\\'}}\" \/>';\n        }\n        return result;\n    }\n\n    async function getloginurl() { return baseurl; }\n    async function login() {}\n    async function pay(bookurl, url) {}\n    async function imagedecrypt(url, image) {}\n    async function shouldOverrideUrlLoading(url) { return true; }\n<\/script>\n<\/html>\n",
    "login": false,
    "lastUpdateTime": "1784769860212"
}
广告