G站漫画
https://m.g-mh.org/
mengluo9960 (14501)10小时前
// 梦不觉
{
"bookSourceComment": "\/\/ 梦不觉",
"bookSourceGroup": "漫画",
"bookSourceName": "G站漫画",
"bookSourceType": 2,
"bookSourceUrl": "https:\/\/m.g-mh.org\/",
"customButton": false,
"customOrder": 26,
"enabled": true,
"enabledCookieJar": false,
"enabledExplore": true,
"eventListener": false,
"exploreUrl": "@js:\n(function() {\n var items = [\n {\"title\":\"全部\",\"url\":\"https:\/\/m.g-mh.org\/manga\/page\/{{page}}\"},\n {\"title\":\"韩漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/kr\/page\/{{page}}\"},\n {\"title\":\"国漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/cn\/page\/{{page}}\"},\n {\"title\":\"日漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/jp\/page\/{{page}}\"},\n {\"title\":\"欧美\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/ou-mei\/page\/{{page}}\"},\n {\"title\":\"其他\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/qita\/page\/{{page}}\"},\n {\"title\":\"热门\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/hots\/page\/{{page}}\"},\n {\"title\":\"复仇\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/fuchou\/page\/{{page}}\"},\n {\"title\":\"古风\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/gufeng\/page\/{{page}}\"},\n {\"title\":\"奇幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/qihuan\/page\/{{page}}\"},\n {\"title\":\"逆袭\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/nixi\/page\/{{page}}\"},\n {\"title\":\"异能\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/yineng\/page\/{{page}}\"},\n {\"title\":\"宅向\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhaixiang\/page\/{{page}}\"},\n {\"title\":\"穿越\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/chuanyue\/page\/{{page}}\"},\n {\"title\":\"热血\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/rexue\/page\/{{page}}\"},\n {\"title\":\"纯爱\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/chunai\/page\/{{page}}\"},\n {\"title\":\"系统\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xitong\/page\/{{page}}\"},\n {\"title\":\"重生\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhongsheng\/page\/{{page}}\"},\n {\"title\":\"冒险\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/maoxian\/page\/{{page}}\"},\n {\"title\":\"灵异\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lingyi\/page\/{{page}}\"},\n {\"title\":\"大女主\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/danvzhu\/page\/{{page}}\"},\n {\"title\":\"剧情\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/juqing\/page\/{{page}}\"},\n {\"title\":\"恋爱\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lianai\/page\/{{page}}\"},\n {\"title\":\"玄幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xuanhuan\/page\/{{page}}\"},\n {\"title\":\"女神\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/nvshen\/page\/{{page}}\"},\n {\"title\":\"科幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/kehuan\/page\/{{page}}\"},\n {\"title\":\"魔幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/mohuan\/page\/{{page}}\"},\n {\"title\":\"推理\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/tuili\/page\/{{page}}\"},\n {\"title\":\"猎奇\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lieqi\/page\/{{page}}\"},\n {\"title\":\"治愈\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhiyu\/page\/{{page}}\"},\n {\"title\":\"都市\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/doushi\/page\/{{page}}\"},\n {\"title\":\"异形\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/yixing\/page\/{{page}}\"},\n {\"title\":\"青春\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/qingchun\/page\/{{page}}\"},\n {\"title\":\"末日\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/mori\/page\/{{page}}\"},\n {\"title\":\"悬疑\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xuanyi\/page\/{{page}}\"},\n {\"title\":\"修仙\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xiuxian\/page\/{{page}}\"},\n {\"title\":\"战斗\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhandou\/page\/{{page}}\"}\n ];\n\n var ui = [];\n\n \/\/ 搜索框 + 搜索按钮(一行)\n ui.push({title:'关键字', type:'text', default:'', style:{layout_flexBasisPercent:0.7, layout_flexGrow:1}});\n ui.push({title:'🔍 搜索', type:'button', action:\"var k=infoMap['关键字']; if(!k){ java.toast('请输入关键字'); } else { java.searchBook(k, source); }\", style:{layout_flexBasisPercent:1, layout_flexGrow:1}});\n\n \/\/ 分类标签:每行两个\n for (var i = 0; i < items.length; i++) {\n ui.push({title: items[i].title, url: items[i].url, style:{layout_flexBasisPercent:0.25, layout_flexGrow:1}});\n }\n\n return JSON.stringify(ui);\n})()",
"header": "{\"User-Agent\":\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/121.0.0.0 Safari\/537.36\",\"Referer\":\"https:\/\/m.g-mh.org\/\"}",
"lastUpdateTime": "1788321628633",
"respondTime": 180000,
"ruleBookInfo": {
"author": "a[href^='\/manga-author\/'] span@text",
"coverUrl": "img.1@src",
"intro": "#info p.line-clamp-4@text",
"kind": "a[href^='\/manga-genre\/'] span@text&&a[href^='\/manga-tag\/'] span@text",
"lastChapter": "#lastchap@text",
"name": "h1@text##\\s*\\n.*",
"tocUrl": "@js:\ntry{\n let mid = String(result).match(\/data-mid=\"(\\d+)\"\/);\n if(mid && mid[1]){\n java.put(\"mid\", mid[1]);\n \"https:\/\/api-get-v3.mgsearcher.com\/api\/manga\/get?mid=\" + mid[1] + \"&mode=all\";\n } else {\n \"\";\n }\n}catch(e){\"\"}"
},
"ruleContent": {
"content": "@js:(function(){\ntry{\n var resultStr = result;\n \n if(typeof resultStr === 'undefined' || resultStr === null) return '';\n \n var json;\n if(typeof resultStr === 'object') {\n json = resultStr;\n } else {\n if(typeof resultStr !== 'string' || resultStr.length < 10) return '';\n try { json = JSON.parse(resultStr); } catch(e) { return ''; }\n }\n \n var info = json.data && json.data.info ? json.data.info : {};\n var imagesData = info.images;\n var NL = String.fromCharCode(10);\n var host = 'https:\/\/c-nc-1.6wm.top';\n \n if(imagesData && imagesData.images) {\n var imgs = imagesData.images;\n var isString = typeof imgs === 'string';\n \n if(!isString && typeof imgs === 'object' && typeof imgs.length === 'number') {\n if(imgs.length > 0 && typeof imgs[0] === 'string' && imgs[0].indexOf('J7r') === 0) {\n var joined = '';\n for(var _i = 0; _i < imgs.length; _i++) { joined += imgs[_i]; }\n imagesData = { images: joined, line: imagesData.line || 1 };\n isString = true;\n } else {\n var line = imagesData.line || 1;\n if(line === 2) host = 'https:\/\/c-nd2-1.6wm.top';\n else if(line === 3) host = 'https:\/\/c-nd3-1.6wm.top';\n var tags = [];\n for(var _j = 0; _j < imgs.length; _j++) {\n var u = imgs[_j];\n if(u && typeof u === 'object' && u.url) u = u.url;\n if(u && typeof u === 'string') {\n if(u.indexOf('http') !== 0) u = host + u;\n tags.push('<img src=\"' + u + '\">');\n }\n }\n return tags.join(NL);\n }\n }\n \n if(isString) {\n var encrypted = imgs;\n var lineNum = imagesData.line || 1;\n \n if(encrypted.substring(0, 3) !== 'J7r' || encrypted.substring(encrypted.length - 2) !== 'nQ' || encrypted.length < 20) return '';\n \n var FROM_TABLE = '_-9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n var TO_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n var CHUNK_SIZE = 7;\n var MAGIC_A = 'kD';\n var MAGIC_B = 'W4s';\n \n var stripped = encrypted.substring(3, encrypted.length - 2);\n var dataLen = stripped.length;\n var K = Math.floor((dataLen - 5) \/ 3);\n \n var p1_len = K;\n var R = dataLen - K - 3;\n \n var markerFound = true;\n if(stripped.substring(p1_len, p1_len + 2) !== MAGIC_A) markerFound = false;\n if(stripped.substring(R, R + 3) !== MAGIC_B) markerFound = false;\n \n if(!markerFound) {\n var idxA = stripped.indexOf(MAGIC_A);\n var idxB = stripped.indexOf(MAGIC_B);\n if(idxA >= 0 && idxB > idxA + 2) {\n p1_len = idxA;\n R = idxB;\n } else { return ''; }\n }\n \n var p1 = stripped.substring(0, p1_len);\n var p3 = stripped.substring(p1_len + 2, R);\n var p5 = stripped.substring(R + 3);\n \n var pairSwap = function(str) {\n var out = '';\n var i = 0;\n var chunkIdx = 0;\n while(i < str.length) {\n var chunk = str.substring(i, i + CHUNK_SIZE);\n if(chunkIdx % 2 === 1) {\n var rev = '';\n for(var j = chunk.length - 1; j >= 0; j--) rev += chunk[j];\n chunk = rev;\n }\n out += chunk;\n i += CHUNK_SIZE;\n chunkIdx++;\n }\n return out;\n };\n \n var combined = pairSwap(p5 + p1 + p3);\n var substituted = '';\n for(var si = 0; si < combined.length; si++) {\n var c = combined.charAt(si);\n var idx = FROM_TABLE.indexOf(c);\n substituted += idx >= 0 ? TO_TABLE.charAt(idx) : c;\n }\n \n var b64 = substituted.replace(\/-\/g, '+').replace(\/_\/g, '\/');\n while(b64.length % 4 !== 0) b64 += '=';\n \n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/';\n var decoded = '';\n for(var bi = 0; bi < b64.length; bi += 4) {\n if(b64.charAt(bi+1) === '') break;\n var c1 = chars.indexOf(b64.charAt(bi));\n var c2 = chars.indexOf(b64.charAt(bi+1));\n var c3 = chars.indexOf(b64.charAt(bi+2));\n var c4 = chars.indexOf(b64.charAt(bi+3));\n var triple = (c1 << 18) | (c2 << 12) | ((c3 & 63) << 6) | (c4 & 63);\n decoded += String.fromCharCode((triple >>> 16) & 255);\n if(c3 >= 0) decoded += String.fromCharCode((triple >>> 8) & 255);\n if(c4 >= 0) decoded += String.fromCharCode(triple & 255);\n }\n \n var imageList = JSON.parse(decoded);\n \n if(!imageList || typeof imageList !== 'object' || typeof imageList.length === 'undefined') return '';\n \n if(lineNum === 2) host = 'https:\/\/c-nd2-1.6wm.top';\n else if(lineNum === 3) host = 'https:\/\/c-nd3-1.6wm.top';\n \n var imgTags = [];\n for(var ti = 0; ti < imageList.length; ti++) {\n var item = imageList[ti];\n var url = item && (item.url || item);\n if(url && typeof url === 'string') {\n if(url.indexOf('http') !== 0) url = host + url;\n imgTags.push('<img src=\"' + url + '\">');\n }\n }\n \n return imgTags.join(NL);\n }\n }\n \n return '';\n} catch(e) {\n return '';\n}\n})()"
},
"ruleExplore": {
"bookList": "div.cardlist > div.pb-2",
"bookUrl": "a@href",
"coverUrl": "img@src",
"name": "h3.cardtitle@text"
},
"ruleSearch": {
"author": "a[href*='\/manga-author\/'] span@text",
"bookList": ".cardlist > div.pb-2",
"bookUrl": "a@href",
"checkKeyWord": "万界守门人",
"coverUrl": "img.card@src",
"name": "h3@text"
},
"ruleToc": {
"chapterList": "@js:\nlet json=JSON.parse(result);\nlet list=json.data.chapters||json.data.info.chapters||[];\nlist.map(item=>JSON.stringify(item));",
"chapterName": "@js:\nlet obj=JSON.parse(result);\nobj.name||obj.title||obj.chapter_name||obj.chapter_title||(obj.attributes&&obj.attributes.title)||JSON.stringify(obj);",
"chapterUrl": "@js:\nlet obj=JSON.parse(result);\nlet mid=java.get(\"mid\");\nlet cid=obj.id||obj.chapter_id;\nif(mid&&cid){\n \"https:\/\/api-get-v3.mgsearcher.com\/api\/v2\/chapter\/getinfo?m=\"+mid+\"&c=\"+cid;\n}else{\"\"}"
},
"searchUrl": "https:\/\/m.g-mh.org\/s\/{{key}}?page={{page}}",
"weight": 0
}