🎨禁漫天堂[国内]

https://jmcomicgo.me

jiajunjin (10775)7天前

① 发布页:https://jmcomicgo.me
  
②❗❗❗需要在登录页面获取网址❗❗❗

③ 部分内容需要登录才会显示
  
④ 登录页面点击分流按钮切换站内分流,1,2,3,4代表站内分流线路

⑤ 更改发现排列在登录切换,切换后刷新发现

⑥ 复制xiaohan231大佬图片解密,支持了对未加密图片观看

⑦增加了对小说支持,增加了两个分流线路支持,小说最新章节90天后解锁
二维码导入
{
    "bookSourceComment": "① 发布页:https:\/\/jmcomicgo.me\n  \n②❗❗❗需要在登录页面获取网址❗❗❗\n\n③ 部分内容需要登录才会显示\n  \n④ 登录页面点击分流按钮切换站内分流,1,2,3,4代表站内分流线路\n\n⑤ 更改发现排列在登录切换,切换后刷新发现\n\n⑥ 复制xiaohan231大佬图片解密,支持了对未加密图片观看\n\n⑦增加了对小说支持,增加了两个分流线路支持,小说最新章节90天后解锁",
    "bookSourceGroup": "寿横大佬最新力作",
    "bookSourceName": "🎨禁漫天堂[国内]",
    "bookSourceType": 2,
    "bookSourceUrl": "https:\/\/jmcomicgo.me",
    "customOrder": 2,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "exploreUrl": "@js:\njava.toast(\"\\n 正在进行发现页热更新...\")\neval(String(source.loginUrl));\nlet URL =  Get('url')\nlet list = [];\n\npush = (title, url, size) => list.push({\n        \"title\": title,\n        \"url\": url,\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": size\n        }\n    });\nconst request = org.jsoup.Jsoup.parse(java.ajax(URL));\nconst aElements = request.select(\"li.hidden-md:nth-of-type(6) a\");\nconst sj = aElements.length > 0 ? aElements[0].attr('href').trim() : \"\";\n  const authInfo = JSON.parse(source.getLoginInfo());\n  const username = authInfo?.['账号'] || \"寿横\";\n    const password = authInfo?.['密码'] || \"\";\nif (username && password) {\n\t   const a = java.ajax(URL + '\/login')\n\t   const b = a.match(username)?.[0] || \"\"\n\t   if (b ==\"\") {\n\t\t\t\tLogin()\n\t\t\t\t} else {\n\t\t\t\t\tjava.toast(\"\\n 欢迎主人 \" + b )\n\t\t\t\t\t}\n\t\t}\n\t\tvar label = sortCriteria[Get('tag')].label;\n\t\tvar sort =  sortCriteria[Get('tag')].sort;\n\t\tvar _label = Category[Get('tag1')][0];\n\t\tvar _sort = Category[Get('tag1')][1];\n\n    push('[▶ '+ username +' ◀]', '', 1);\n    push('→ '+Get('url')+'  分流'+nums[Get('shunt')], '', 1);\n    push(sj?\"随机\":\"❗❗该链接不可用,请更换链接,然后刷新❗❗\",`${URL}${sj}`,1)\n    \n    push('漫画观看记录',Get('url')+'\/user\/'+ username +'\/favorite\/watchlist',0.45);\n    push('小说观看记录',Get('url')+'\/user\/'+ username +'\/favorite\/novel_watchlist',0.45);\n   \n    const weekDays = [\n{ \"D\": \"周日\", \"N\": \"7\" },\n{ \"D\": \"周一\", \"N\": \"1\" },\n{ \"D\": \"周二\", \"N\": \"2\" },\n{ \"D\": \"周三\", \"N\": \"3\" },\n{ \"D\": \"周四\", \"N\": \"4\" },\n{ \"D\": \"周五\", \"N\": \"5\" },\n{ \"D\": \"周六\", \"N\": \"6\" },\n{ \"D\": \"完结\", \"N\": \"0\" }\n];\nconst today = new Date();\nconst day = today.getDay() === 0 ? 7 : today.getDay();\nconst dayOfWeek = weekDays[today.getDay()].D;\npush('本日连载 - '+ dayOfWeek,Get('url')+'\/serialization\/' + day,1);\nweekDays.map(({D, N}) => {\n    push(D, `${URL}\/serialization\/${N}`, 0.25\n    );\n  });\n  \n    \tpush(`🏷️标签--按${label}--${_label}🏷️`, `${URL}\/albums${_sort}?o=${sort}&page=` + '{{page}}', 1);\n    \t\n    let _list = \t[\n    [\"同人\",\"albums\/doujin\"],\n    [\"韩漫\",\"albums\/hanman\"],\n    [\"English\",\"albums\/meiman\"],\n    [\"短篇\",\"albums\/short\"],\n    [\"单本\",\"albums\/single\"]\n    ];\n    _list.map(([t, u]) => {\n    \t    push(t, `${URL}\/${u}${_sort}?o=${sort}&page=` + '{{page}}', 0.25);\n    \t});\n\n    \tpush('┡其他类┦', `${URL}\/albums\/another?o=${sort}&page=` + '{{page}}', 1);\n    let __list = [\n    [\"其他\",\"albums\/another\/sub\/other\"],\n    [\"COS\", \"albums\/another\/sub\/cosplay\"],\n    [\"3D\", \"albums\/another\/sub\/3D\"],\n    [\"小说\", \"novels\"]\n    ];\n    \n    __list.map(([t, u]) => {\n    \t    push(t, `${URL}\/${u}?o=${sort}&page=` + '{{page}}', 0.25);\n    \t});\n    \t\n    \tpush('┡排行榜┦', '', 1);\n    \t\n    let typeList = [\n    [\"日榜\", \"&t=t\"],\n    [\"周榜\", \"&t=w\"],\n    [\"月榜\", \"&t=m\"],\n    [\"总榜\", \"\"]\n    ];\n    \n    typeList.map(([t, type]) => {\n    \t    push(t, `${URL}\/albums${_sort}?o=${sort}${type}&page=` + '{{page}}' , 0.2);\n    \t});\n    \t\n    let sorts1 = [\"無修正\",\"劇情向\",\"青年漫\",\"校服\",\"純愛\",\"人妻\",\"教師\",\"百合\",\"Yaoi\",\"性轉\",\"NTR\",\"女裝\",\"癡女\",\"全彩\",\"女性向\",\"完結\",\"純愛\",\"禁漫漢化組\"];\n    let sorts2 = [\"御姐\",\"熟女\",\"蘿莉\",\"巨乳\",\"貧乳\",\"女性支配\",\"教師\",\"女僕\",\"護士\",\"泳裝\",\"眼鏡\",\"連褲襪\",\"其他制服\",\"兔女郎\"];\n    let sorts3 = [\"群交\",\"足交\",\"束縛\",\"肛交\",\"阿黑顏\",\"藥物\",\"扶他\",\"調教\",\"野外露出\",\"催眠\",\"自慰\",\"觸手\",\"獸交\",\"亞人\",\"怪物女孩\",\"皮物\",\"附身\",\"ryona\",\"騎大車\"];\n    let sorts4 = [\"CG\",\"重口\",\"獵奇\",\"非H\",\"血腥暴力\",\"站長推薦\"];\n    \n  push('▶主题A漫◀','', 1)\n  sorts1.forEach(s => {\n    push(s, `${URL}\/search\/photos${_sort}?search_query=${s}&o=${sort}&page=` + '{{page}}', 0.25\n    );\n  });\n  push('▶角色\/扮演◀','', 1)\n  sorts2.forEach(s => {\n    push(s, `${URL}\/search\/photos${_sort}?search_query=${s}&o=${sort}&page=` + '{{page}}', 0.25\n    );\n  });\n  push('▶特殊PLAY◀','', 1)\n  sorts3.forEach(s => {\n    push(s, `${URL}\/search\/photos${_sort}?search_query=${s}&o=${sort}&page=` + '{{page}}', 0.25\n    );\n  });\n  push('▶其他◀','', 1)\n  sorts4.forEach(s => {\n    push(s, `${URL}\/search\/photos${_sort}?search_query=${s}&o=${sort}&page=` + '{{page}}', 0.25\n    );\n  });\n  \nJSON.stringify(list);",
    "header": "{\n\t\"User-Agent\":\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/128.0.0.0 Safari\/537.36\",\n\t\"Referer\":\"baseUrl\"\n}",
    "jsLib": "const nums = [1, 2, 3, 4];\nconst sortCriteria = [{ label: '时间', sort: 'mr' },{ label: '阅读', sort: 'mv' },{ label: '喜爱', sort: 'tf'},{ label: '评分', sort: 'tr' }];\nconst Category = [[\"全部\",\"\"],[\"中文\",\"\/sub\/chinese\"],[\"日语\",\"\/sub\/japanese\"],[\"CG\",\"\/sub\/CG\"],[\"无码\",\"\/sub\/no_mosaic\"],[\"上色\",\"\/sub\/coloring\"]];\n\nfunction put(data) {\n    const { java, source, cookie } = this;\n    return source.setVariable(JSON.stringify(data, null, '\\t'));\n}\n\nfunction Get(e) {\n    const { java, source, cookie } = this;\n    var get = JSON.parse(source.getVariable());\n    return get[e];\n}\n\nfunction n(e) {\n    let line = '\\n';\n    const count = parseInt(e, 10) || 1;\n    for (let m = 1; m < count; m++) {\n        line += '\\n';\n    }\n    return line;\n}\n",
    "lastUpdateTime": "1761057681105",
    "loginCheckJs": " var resultUrl = result.url();\n var resultCode = result.code();\n var resultBoDy = result.body();\n if (\/_cf_|ge_ua|verify.php\/ig.test(resultBoDy) ) {\n     if (key) {\n         url = baseUrl + java.ruleUrl;\n     }\n     cookie.removeCookie(baseUrl)\n     result = java.startBrowserAwait(resultUrl, \n     \t\"验证\", false);\n     \/\/java.log(result.body())\n     \/\/result = java.connect(resultUrl)\n }\nresult;",
    "loginUi": "[ \n {\n        \"name\": \"账号\",\n        \"type\": \"text\"\n    },\n    {\n        \"name\": \"密码\",\n        \"type\": \"password\"\n    },\n    {\n    \t\"name\": \"🏮登录🏮\",\n    \t   \"type\": \"button\",\n        \"action\": \"Login()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 1\n        }\n    \t},\n  { name: \"ˇ»`ʚ  切换分流  ɞ´«ˇ\", type: \"button\", \"action\": \"qh1()\",style: {layout_flexGrow: 1, layout_flexBasisPercent: 1} },\n  { name: \"时间\", type: \"button\", action: \"tag(0)\", style: {layout_flexGrow: 1, layout_flexBasisPercent: 0.2} },\n  { name: \"阅读\", type: \"button\", action: \"tag(1)\", style: {layout_flexGrow: 1, layout_flexBasisPercent: 0.2} },\n  { name: \"喜爱\", type: \"button\", action: \"tag(2)\", style: {layout_flexGrow: 1, layout_flexBasisPercent: 0.2} },\n  { name: \"评分\", type: \"button\", action: \"tag(3)\", style: {layout_flexGrow: 1, layout_flexBasisPercent: 0.2} },\n  { name: \"分类切换\", type: \"button\", action: \"qh2()\", style: {layout_flexGrow: 1, layout_flexBasisPercent: 1} },\n  {\n    \t   \"name\": \"获取链接\",\n    \t   \"type\": \"button\",\n        \"action\": \"url()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.45\n        }\n    \t},\n    {\n    \t   \"name\": \"切換链接\",\n    \t   \"type\": \"button\",\n        \"action\": \"qh()\",\n        \"style\": {\n            \"layout_flexGrow\": 1,\n            \"layout_flexBasisPercent\": 0.45\n        }\n    \t}\n]",
    "loginUrl": "function login(){}\noriginal = {\n'url' : 'https:\/\/jmcomicgo.me',\n'urls' : [\n'1','2','3'\n],\n'shunt' : 0,\n'tag' : 0,\n'tag1' : 0,\n};\ntry {\n    $$$ = JSON.parse(source.getVariable());\n    if ($$$ == null) {\n        error;\n    } else {\n       const tagKeyName = Object.keys($$$).find(key => key === 'tag1');\n         if (tagKeyName === undefined) {\n             error;\n         }\n    };\n} catch (e) {\n    $$$ = original;\n    put($$$);\n}\n\nfunction Login() {\n    const result = JSON.parse(source.getLoginInfo());\n    var username = result['账号'];\n    var password = result['密码'];\n    var options = {\n\t   body: `username=${username}&password=${password}&submit_login=1`,\n\t   method: 'POST'\n\t};\n\tif(Get('url') === 'https:\/\/jmcomicgo.me') {\n\t\tLog('请先获取URL');\n\t\t} else if(Get('url')) {\n\t\tLog(\"\\n⏳正在登录中,请等一会,很快就好...\");\n\t\tvar request = JSON.parse(java.log(java.ajax(Get('url') +`\/login,${JSON.stringify(options)}`)))\n\t\tif(request.status == '1') {\n\t\t\tLog('✅ 登录成功')\n\t\t} else {\n\t\t\tLog('❎ 登录失败')\n\t\t\t}\n\t} else {\n\t\tLog('❌ 未获取到有效URL,请切换url');\n\t\t}\n\t}\n\nfunction typeP(e) {\n    if (e == undefined) {\n        e = 0;\n    }\n    return sortCriteria[e].label;\n}\n\nfunction tag(e) {\n    if (tag == undefined) {\n        tag = result.tag;\n    }\n    if (e == $$$.tag) {\n        return Log('【标签切换提示】' + n(2) + '已经选择此标签,无需更换');\n    }\n    Log('【标签切换提示】' + n(2) + '已经切换到[' + typeP(e) + ']');\n    $$$.tag = e;\n    return put($$$);\n}\n\nfunction url() {\n    var html = java.ajax(`https:\/\/jmcomicgo.me`)\n    var url = html.match(\/china\"><span>(.*?)<\\\/span\/)[1].replace(\/\\s+\/g, \"\");\n    var url1 = html.match(\/first_line\"><span>(.*?)<\\\/span\/)[1].replace(\/\\s+\/g, \"\");\n    var url2 = html.match(\/second_line\"><span>(.*?)<\\\/span\/)[1].replace(\/\\s+\/g, \"\");\n    if (url == $$$.url) {\n         return Log('【站点提示】' + n(2) + '站点无需更换');\n    }\n    Log('站点变更:' + url)\n    $$$.url = url;\n    $$$.urls[0] = url\n    $$$.urls[1] = url1;\n    $$$.urls[2] = url2;\n    return put($$$);\n\t}\n\nfunction qh(){\n\tif ($$$.url = $$$.urls[0]) {\n\t\t$$$.urls[0] = $$$.urls[1];\n\t\t$$$.urls[1] = $$$.urls[2];\n\t\t$$$.urls[2] = $$$.url;\n\t\t$$$.url = $$$.urls[0];\n\t\tLog('站点变更:' + $$$.urls[0])\n\t\treturn put($$$);\n\t\t} \n\t}\n\nfunction qh1() {\n  $$$.shunt = ($$$.shunt + 1) % 4;\n  Log(\"分流\" + nums[$$$.shunt]);\n  return put($$$);\n}\n\nfunction qh2() {\n  $$$.tag1 = ($$$.tag1 + 1) % 6;\n  Log('【分类切换提示】' + n(2) + '已经切换到[' + Category[$$$.tag1][0] + ']');\n  return put($$$);\n}\n\nfunction Log(e) {\n    if (e == undefined) {\n        return;\n    }\n    java.longToast(e);\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "@js:\nif (baseUrl.match(\/novel\/)){\n\t\/\/小说\ntext=java.getString('.p-t-5 li a@text');\n}else {\n\t\/\/漫画\ntext=java.getString('a.web-author-tag:nth-of-type(1)@text');\n}\ntext;",
        "coverUrl": "class.thumb-overlay.2@img@src",
        "init": "<js>\nurl = baseUrl\nnum = baseUrl.includes(\"novel\") ? 1 : 2;\njava.put(\"btype\",num);\nresult\n<\/js>",
        "intro": "{{\"\\n\"}}\n&nbsp;{{@@class.train-number@text}}\n👍🏻{{@@class.list-style-none.d-inline-block p-r-15.-2@html}}&nbsp;&nbsp;👁️{{@@class.list-style-none.d-inline-block p-r-15.-1@html}}\n{{@@class.intro-collapse-content@text}}\n{{@@class.p-t-5 float-left@text##日期}}    {{@@class.p-t-5 float-right@text##日期}}\n{{@@div.p-t-5:nth-of-type(9)@text}}\n{{@@h2.p-t-5.0@text##叙述:}}",
        "kind": "@js:\nif (baseUrl.match(\/novel\/)){\n\t\/\/小说\ntext=java.getString('span[data-type=tags]@a@text');\n}else {\n\t\/\/漫画\ntext=java.getString('#intro-block@[data-type=tags]@a@text');\n}\ntext;",
        "name": "{{@@h1@text}}",
        "tocUrl": "baseUrl",
        "wordCount": "{{@@class.col-lg-7@div.1@div.p-t-5:nth-of-type(1)@text}}"
    },
    "ruleContent": {
        "content": "{{@class.novel-content@html}}\n{{@class.row thumb-overlay-albums@tag.img@data-original}}\n@js:url = baseUrl\nif(baseUrl.includes(\"novel\")){\n\tif(!result) {\n\t\tresult =\"\\n 90天後會自動解鎖\"\n\t\t result\n\t\t} else {\n\t\t\tresult\n\t}\t} else {\nresult.split(\"\\n\").map(x=>'<img src=\"'+x+'\">').join(\"\\n\")\n}",
        "imageDecode": "if (src.search(\"qyyuapi.com\") != -1) {\n    result;\n} else {\n    var Magua = new JavaImporter();\n    Magua.importPackage(Packages.java.io, Packages.android.graphics);\n    with(Magua) {\n        let mac = src.match(\/photos\\\/(\\d+)?\\\/(\\d+)?\/);\n        let bookId = mac[1];\n        let imgId = mac[2];\n        if (src.search(\"gif\") != -1 || Number(bookId) < 220980) {\n            result;\n        } else {\n            if (Number(bookId) > 421925) {\n                let md5 = java.md5Encode((bookId + imgId));\n                let ascii = md5.substr( - 1).charCodeAt(0);\n                var num = (ascii % 8 + 1) * 2;\n            } else if (Number(bookId) >= 268850) {\n                let md5 = java.md5Encode((bookId + imgId));\n                let ascii = md5.substr( - 1).charCodeAt(0);\n                var num = (ascii % 10 + 1) * 2;\n            } else {\n                var num = 10;\n            }\n            var img = BitmapFactory.decodeByteArray(result, 0, result.length);\n            var height = img.getHeight();\n            var width = img.getWidth();\n            var y = Math.floor(height \/ num);\n            var remainder = height % num;\n            var newImg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);\n            let canvas = new Canvas(newImg);\n            for (let i = 1; i <= num; i++) {\n                let h = i === num ? remainder: 0;\n                canvas.drawBitmap(Bitmap.createBitmap(img, 0, y * (i - 1), width, y + h), 0, height - y * i - h, null);\n            }\n            var newbit = new ByteArrayOutputStream();\n            newImg.compress(Bitmap.CompressFormat.PNG, 100, newbit);\n            newbit.toByteArray();\n        }\n    }\n}",
        "imageStyle": "FULL"
    },
    "ruleExplore": {},
    "ruleSearch": {
        "author": "@js:\nif (baseUrl.match(\/novel\/)){\n\t\/\/小说\ntext=java.getString('.title-truncate.2@text');\n}else {\n\t\/\/漫画\ntext=java.getString('.title-truncate.1@text');\n}\ntext;",
        "bookList": "@js:\nvar list\nif(baseUrl.match(\/favorite\/)){\nlist=java.getElements('div.col-xs-3');\n} else if(!baseUrl.match(\/album\\\/\\d+\/)) {\nlist=java.getElements('class.p-b-15');\n}\nlist;",
        "bookUrl": "tag.a.0@href",
        "coverUrl": "img@data-original||img@src",
        "intro": ".video-title@text",
        "kind": "{{@@class.tag@text}}",
        "lastChapter": "@js:\nif (baseUrl.match(\/novel\/)){\n\t\/\/小说\ntext=java.getString('.title-truncate.1@text');\n}else {\n\t\/\/漫画\ntext=java.getString('');\n}\ntext;",
        "name": "@js:\nif (baseUrl.match(\/novel_watchlist\/)){\ntext=java.getString('.title-truncate@text');\n} else if (baseUrl.match(\/favorite\/)){\ntext=java.getString('.image-item-text@text');\n}else {\ntext=java.getString('.video-title@text');\n}\ntext;",
        "wordCount": "{{@@span.0@text##^##👍🏻 }}"
    },
    "ruleToc": {
        "chapterList": "class.btn-toolbar.0@tag.a||.reading\n<js>\nlet type = +(java.get('btype'))\njava.log(type)\nswitch (type) {\n  case 1:\n    book.type = 8;\n    break;\n  case 2:\n    book.type = 64;\n}\nresult\n<\/js>",
        "chapterName": "text",
        "chapterUrl": "href\n@js:\nresult += \"\/?shunt=\" + nums[Get('shunt')]",
        "updateTime": "span@text"
    },
    "searchUrl": "{{Get('url')}}\/search\/photos?search_query={{key}}&search-type=photos&main_tag=0&page={{page}}",
    "weight": 0
}
广告