🎨禁漫天堂[国内]
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 {{@@class.train-number@text}}\n👍🏻{{@@class.list-style-none.d-inline-block p-r-15.-2@html}} 👁️{{@@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
}