🌟卡拉漫画

https://www.kalamanhua.com

langzaier (13654)10/02 22:54

2026.10.2

更新了图片解密逻辑。此网站有限流。

二维码导入
{
    "bookSourceComment": "by狼崽儿 \/\/2026.8.19\n融合了好几个有名漫画网站资源的漫画网站。bug未知,如果有问题先从登录处进去搜索查看漫画,走一遍真人搜索流程。\n有些线路或者有些漫画本身资源有问题,线路问题换线路,漫画显示章节下架就说明看不了了。",
    "bookSourceGroup": "漫画书源",
    "bookSourceName": "🌟卡拉漫画",
    "bookSourceType": 2,
    "bookSourceUrl": "https:\/\/www.kalamanhua.com",
    "customOrder": 0,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "@js:\nvar result = [];\nvar push = function(title, url, size) {\n    result.push({\n        title: title,\n        url: url,\n        style: {\n            layout_flexGrow: 1,\n            layout_flexBasisPercent: size\n        }\n    });\n};\nvar regions = [\n    {name: '全部', code: '26'},\n    {name: '韩漫', code: 'Kc'},\n    {name: '日漫', code: 'Jc'},\n    {name: '中漫', code: 'Cc'},\n    {name: '欧美漫', code: 'Ec'},\n    {name: '其他', code: 'Oc'}\n];\nvar types = [\n    'All', '恋爱', '冒险', '生活', '校园', '热血', '魔法', '悬疑', '科幻',\n    '运动', '都市', '耽美', '搞笑', '单女主', '纯爱', '总裁', '奇幻', '恐怖',\n    '灵异', '异能', '穿越', '剧情', '古风', '言情', '玄幻', '复仇', '多女主',\n    '霸总', '虐恋', '青春', '真人', '重生', '甜宠', '游戏竞技', '家庭', 'BL',\n    '民国', '同人', '系统', '爱情', '美人', '喜剧', '纯真', '腹黑', '财阀',\n    '后宫', '战争', '修真', '其他'\n];\nfor (var r = 0; r < regions.length; r++) {\n    var region = regions[r];\n    for (var t = 0; t < types.length; t++) {\n        var type = types[t];\n        var isAll = (t === 0);\n        var base;\n        if (isAll) {\n            base = '\/type\/' + region.code;\n        } else {\n            var encodedType = (type === 'All' || type === 'BL') ? type : encodeURIComponent(type);\n            base = '\/type\/' + region.code + '--' + encodedType;\n        }\n        var url;\n        if (isAll) {\n            url = '@js:var base=\"' + base + '\";if(page==1){base+\"-----.html\";}else{base+\"---\"+page+\"--.html\";}';\n        } else {\n            url = '@js:var base=\"' + base + '\";if(page==1){base+\"---.html\";}else{base+\"-\"+page+\"--.html\";}';\n        }\n        var title;\n        if (isAll) {\n            title = '📌 ' + region.name + '·全部';\n        } else {\n            title = region.name + '·' + type;\n        }\n        var size = isAll ? 1 : 0.35;\n        push(title, url, size);\n    }\n}\nJSON.stringify(result);",
    "header": "{\n  \"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36\",\n  \"Referer\": \"https:\/\/www.kalamanhua.com\",\n  \"Cookie\": \"omo_token=93920aae5a549395; cf_human_passed=true\"\n}",
    "lastUpdateTime": "1790952895947",
    "loginCheckJs": "",
    "loginUrl": "https:\/\/www.kalamanhua.com",
    "respondTime": 15781,
    "ruleBookInfo": {
        "author": "##作者:([^<]+)<##$1###",
        "coverUrl": ".stui-content__thumb img@data-original@js:result + ',{\"headers\":{\"Referer\":\"https:\/\/www.kalamanhua.com\"}}'",
        "intro": "@js:\nvar names = [];\nvar tm = result.match(\/data-toggle=\"tab\"[^>]*>([^<]+)<\/g);\nif (tm) {\n    for (var i = 0; i < tm.length; i++) {\n        var mm = tm[i].match(\/>([^<]+)<\/);\n        if (mm) names.push(mm[1]);\n    }\n}\nvar n = names.length;\nif (n === 0) {\n    n = (result.match(\/<ul class=\"stui-content__playlist\/g) || []).length;\n    for (var z = 0; z < n; z++) {\n        names.push('线路' + (z + 1));\n    }\n}\nvar xu = '0';\ntry {\n    var cv = book.getVariable('custom');\n    if (cv != null && cv != '') {\n        xu = String(cv);\n    }\n} catch(e) {}\nif (xu == '0' || xu == '') {\n    var ov = String(book.variable || '');\n    if (ov != '') {\n        xu = ov;\n    }\n}\nvar list = '';\nfor (var i2 = 0; i2 < names.length; i2++) {\n    list += '◖' + i2 + '◗' + names[i2] + ' ';\n}\nvar lineInfo = '【线路列表】' + list.trim() + '\\n当前来源◖' + xu + '◗\\n(右上角书籍变量填 0-' + (n - 1) + ' 刷新切换线路)';\nvar desc = '';\nvar dcMatch = result.match(\/<span class=\"detail-content\" style=\"display: none;\">([\\s\\S]*?)<\\\/span>\/);\nif (dcMatch) {\n    desc = dcMatch[1].trim();\n}\nif (!desc) {\n    var dsMatch = result.match(\/<span class=\"detail-sketch\">([\\s\\S]*?)<\\\/span>\/);\n    if (dsMatch) {\n        desc = dsMatch[1].trim();\n    }\n}\nif (!desc) {\n    desc = java.getString('meta[name=\"description\"]@content') || '';\n}\nlineInfo + '\\n\\n📖 简介:' + desc;",
        "kind": ".stui-content__detail@text##类型:(.+?)地区:##$1##",
        "lastChapter": ".data span@text",
        "name": "h1.title@text"
    },
    "ruleContent": {
        "content": "@js:\nvar out = '';\nvar dbg = '';\nvar UA = 'Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/120.0.0.0 Mobile Safari\/537.36';\nvar REF = 'https:\/\/www.kalamanhua.com\/';\nvar CDN = 'https:\/\/image.kalaimg.top';\n\nvar logd = function (m) {\n  try { java.log('KALA' + m); } catch (e0) {}\n};\n\nvar bodyOf = function (r) {\n  if (!r) { return ''; }\n  try { if (typeof r.body === 'function') { return String(r.body()); } } catch (e1) {}\n  try { if (typeof r.body === 'string') { return r.body; } } catch (e2) {}\n  try { return String(r); } catch (e3) { return ''; }\n};\n\nvar got = function (s) {\n  if (!s) { return false; }\n  return s.indexOf('data-src') >= 0;\n};\n\nvar tryGet = function (u, h) {\n  try { return bodyOf(java.get(u, h)); } catch (e) { dbg += '|gE'; return ''; }\n};\n\nvar tryAjax = function (u) {\n  try { return String(java.ajax(u)); } catch (e) { dbg += '|aE'; return ''; }\n};\n\nvar pickTok = function (s) {\n  if (!s) { return ''; }\n  var m = s.match(\/(?:var|const|let) token = '([^']+)'\/);\n  if (m) { return m[1]; }\n  var k = s.indexOf('token');\n  if (k < 0) { return ''; }\n  var q1 = s.indexOf(\"'\", k);\n  if (q1 >= 0) {\n    var q2 = s.indexOf(\"'\", q1 + 1);\n    if (q2 > q1) { return s.substring(q1 + 1, q2); }\n  }\n  q1 = s.indexOf('\"', k);\n  if (q1 >= 0) {\n    var q3 = s.indexOf('\"', q1 + 1);\n    if (q3 > q1) { return s.substring(q1 + 1, q3); }\n  }\n  return '';\n};\n\nvar html = String(result);\nif (html.indexOf('player_aaaa') < 0) {\n  var t0 = pickTok(html);\n  if (t0) {\n    var h2 = tryAjax(baseUrl + '?cf_verify=' + t0);\n    if (!h2) { h2 = tryGet(baseUrl + '?cf_verify=' + t0, {Referer: REF, 'User-Agent': UA}); }\n    dbg += '|heal=' + h2.length;\n    if (h2.indexOf('player_aaaa') >= 0) { html = h2; }\n  }\n}\n\nvar um = html.match(\/\"url\":\"([0-9a-f]+)\"\/);\nvar enc = um ? um[1] : '';\nvar tk = '';\nvar page = '';\n\nif (enc) {\n  var minUrl = CDN + '\/play\/min\/' + enc;\n\n  page = tryGet(minUrl, {Referer: REF, 'User-Agent': UA});\n  dbg += '|p1=' + page.length;\n\n  if (!got(page)) {\n    page = tryAjax(minUrl);\n    dbg += '|a1=' + page.length;\n  }\n\n  if (!got(page)) {\n    tk = pickTok(page);\n    dbg += '|tk=' + (tk ? tk.length : 0);\n  }\n\n  if (!got(page)) {\n    if (tk) {\n      var q = minUrl + '?cf_verify=' + tk;\n      page = tryGet(q, {Referer: REF, 'User-Agent': UA, Cookie: 'omo_token=' + tk});\n      dbg += '|p2=' + page.length;\n      if (!got(page)) {\n        page = tryAjax(q);\n        dbg += '|a2=' + page.length;\n      }\n      if (!got(page)) {\n        page = tryGet(minUrl, {Referer: REF, 'User-Agent': UA, Cookie: 'omo_token=' + tk});\n        dbg += '|p3=' + page.length;\n      }\n    }\n  }\n\n  var imgs = page.match(\/data-src=\"[^\"]+\"\/g);\n  if (imgs) {\n    for (var i = 0; i < imgs.length; i++) {\n      var s = imgs[i].substring(10, imgs[i].length - 1);\n      var full = CDN + s;\n      if (full.indexOf('cf_verify=') < 0) {\n        if (tk) { full += '?cf_verify=' + tk; }\n      }\n      out += '<img src=\"' + full + '\">';\n    }\n    dbg += '|img=' + imgs.length;\n  } else {\n    out = 'ERR:no-img[' + page.length + ']' + dbg + '|h=' + page.substring(0, 40);\n  }\n} else {\n  out = 'ERR:no-enc' + dbg + '|h=' + html.substring(0, 40);\n}\n\nlogd(dbg);\nout;",
        "imageStyle": "FULL"
    },
    "ruleExplore": {
        "author": ".stui-vodlist__detail p@text",
        "bookList": "\/\/ul[contains(@class,'vodlist')]\/li",
        "bookUrl": "a@href",
        "coverUrl": "a@data-original",
        "intro": "@js:\nvar a = java.getString('.stui-vodlist__detail p@text');\nvar l = java.getString('.pic-text b@text');\nvar result = '作者:' + (a || '') + '\\n更新:' + (l || '');\nresult;",
        "kind": ".pic-text1 b@text",
        "lastChapter": ".pic-text b@text",
        "name": "a@title"
    },
    "ruleSearch": {
        "author": ".stui-vodlist__detail p@text",
        "bookList": "ul.stui-vodlist > li",
        "bookUrl": "a@href",
        "checkKeyWord": "",
        "coverUrl": "a@data-original@js:result + ',{\"headers\":{\"Referer\":\"https:\/\/www.kalamanhua.com\"}}'",
        "kind": ".pic-text1 b@text",
        "lastChapter": ".pic-text b@text",
        "name": "a@title"
    },
    "ruleToc": {
        "chapterList": "@js:\nvar xu = '0';\nvar mi = String(book.intro || '').match(\/来源◖(\\d+)◗\/);\nif (mi) { xu = mi[1]; }\ntry { var cv = book.getVariable('custom'); if (cv != null && cv != '') { xu = String(cv); } } catch(e) {}\nvar idx = parseInt(xu);\nif (!(idx >= 0)) { idx = 0; }\nvar doc = org.jsoup.Jsoup.parse(result);\nvar uls = doc.select('ul.stui-content__playlist');\nvar ul = uls.size() > 0 ? uls.get(Math.min(idx, uls.size() - 1)) : null;\nvar arr = [];\nif (ul) {\n  var as = ul.select('li a');\n  for (var i = 0; i < as.size(); i++) {\n    arr.push(JSON.stringify({name: as.get(i).text(), url: 'https:\/\/www.kalamanhua.com' + as.get(i).attr('href')}));\n  }\n}\narr;",
        "chapterName": "$.name",
        "chapterUrl": "$.url"
    },
    "searchUrl": "\/search\/page\/{{page}}\/wd\/{{key}}.html",
    "weight": 0
}
广告