🎨禁漫天堂
https://jmcomicqa.cc
JY535 (11131)1天前
优化了发现和登录ui,添加了jm号搜索,添加魔法线路
{ "bookSourceComment": "需要先在登录页面获取网址。\n部分内容需要登录才会显示,可登可不登。\n原作寿横、jiajunjin大佬,优化了发现和登录ui,添加了jm号搜索,添加魔法线路,有问题换魔法别用日韩。", "bookSourceGroup": "R18漫画", "bookSourceName": "🎨禁漫天堂", "bookSourceType": 2, "bookSourceUrl": "https:\/\/jmcomicqa.cc", "customOrder": 9, "enabled": true, "enabledCookieJar": true, "enabledExplore": true, "exploreUrl": "@js:\neval(String(source.loginUrl));\n\nvar URL = $$$.url;\nvar lineType = $$$.lineType || '主线路'; \nvar shunt = $$$.shunt || 1;\nvar weekIndex = $$$.weekIndex || 0; \nvar list = [];\n\nfunction push(title, url, size) { \n list.push({\n \"title\": title,\n \"url\": url,\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": size\n }\n });\n}\n\nvar urlHint = (lineType === '备用线路') ? ' (备用线路)' : (lineType === '国际通用' ? ' (国际通用)' : (lineType === '东南亚' ? ' (东南亚)' : ' (主线路)'));\n\npush('❗❗为空请获取\/更换链接,然后刷新❗❗','', 1);\npush('[▶ '+$$$.name+' ◀]', '', 1);\npush('[ '+$$$.url + urlHint + ' 分流' + $$$.shunt + ' ]', '', 1);\n\nvar sortConfigs = [\n { key: 'mr', title: '按时间' },\n { key: 'mv', title: '按阅读' },\n { key: 'tf', title: '按最爱' },\n { key: 'mo', title: '按收藏' },\n { key: 'tr', title: '按评分' },\n { key: 'md', title: '按评论' },\n { key: 'mp', title: '按图片' }\n];\n\nvar categories = [\n[\"全部\", \"albums?o={key}&page=\"],\n [\"COS\", \"albums\/another\/sub\/cosplay?o={key}&page=\"],\n [\"3D\", \"search\/photos?search_query=3D&o={key}&page=\"],\n [\"韩漫\", \"albums\/hanman?o={key}&page=\"],\n [\"热门\", \"albums?o={key}&page=\"],\n [\"单本\", \"albums\/single?o={key}&page=<,{{page}}>\"],\n [\"CG\", \"albums\/doujin\/sub\/CG?o={key}&page=<,{{page}}>\"],\n [\"青年漫\", \"albums\/single\/sub\/youth?o={key}&page=<,{{page}}>\"],\n [\"短篇\", \"albums\/short?o={key}&page=<,{{page}}>\"],\n [\"同人\", \"albums\/doujin?o={key}&page=<,{{page}}>\"],\n [\"其他\", \"albums\/another?o={key}&page=<,{{page}}>\"],\n [\"小说\", \"novels?o=mv?o={key}&page=<,{{page}}>\"],\n [\"美漫\", \"albums\/meiman?o={key}&page=<,{{page}}>\"],\n [\"C106&推荐本本\", \"promotes\/29?o={key}&page=<,{{page}}>\"],\n [\"禁漫去码&全彩化\", \"promotes\/30?o={key}&page=<,{{page}}>\"],\n [\"禁漫汉化组\", \"search\/photos?main_tag=0&search_query=%E7%A6%81%E6%BC%AB%E6%B1%89%E5%C%96%E7%BB%84?o={key}&page=<,{{page}}>\"]\n];\n\nvar currentTagIndex = Math.min(Math.max($$$.tag || 0, 0), sortConfigs.length - 1);\nvar currentKey = sortConfigs[currentTagIndex].key;\nvar currentTitle = sortConfigs[currentTagIndex].title;\n\n\npush('🏷️分类标签---' + currentTitle + '🏷️', '', 1);\n\n\n\nfor (var j = 0; j < categories.length; j++) {\n var arr = categories[j];\n var t = arr[0];\n var u = arr[1];\n var url = URL + '\/' + u.replace('{key}', currentKey);\n if (u.indexOf('<,{{page}}>') === -1) {\n url += '{{page}}';\n }\n push(t, url, 0.25);\n}\npush('🏷️每周必看 (当前: ' + weekIndex + ', 范围 0-210,0为最新)🏷️','',1); \n\ntry {\n var pageHtml = java.ajax(URL + '\/albums'); \n var albumRegex = \/href=\"\\\/album\\\/(\\d+)\"\/g;\n var matches = [];\n var match;\n while ((match = albumRegex.exec(pageHtml)) !== null) {\n matches.push(match[1]);\n }\n if (matches.length > 0) {\n var randomId = matches[Math.floor(Math.random() * matches.length)];\n var randomUrl = URL + '\/album\/' + randomId;\n push('🎲 随机看一本(仅测试版可用) 🎲', randomUrl, 1);\n }\n} catch (e) {\n java.log('Failed to fetch random album: ' + e);\n}\n\nvar weeklyTypes = [['日漫','manga'],['韩漫','hanman'],['其他','another']];\nfor (var i = 0; i < weeklyTypes.length; i++) {\n var arr = weeklyTypes[i];\n var t = arr[0];\n var p = arr[1];\n push(t, URL + '\/week\/' + weekIndex + '?skdad=1&type=' + p + '&page={{page}}', 0.25);\n}\n\n\n\npush('🏷️每周连载🏷️', '', 1);\nlet _list = [[\"周一\", \"serialization\/1&page=\"], [\"周二\", \"serialization\/2&page=\"], [\"周三\", \"serialization\/3&page=\"], [\"周四\", \"serialization\/4&page=\"],[\"周五\", \"serialization\/5&page=\"], [\"周六\", \"serialization\/6&page=\"], [\"周日\", \"serialization\/7&page=\"], [\"已完结\", \"serialization\/7&page=\"]];\n _list.map(([t, u]) => {\n \t push(t, `${URL}\/${u}` + '{{page}}', 0.25);\n \t});\npush('👁🗨阅读排行榜👁🗨', '', 1);\nvar typeList = [[\"日榜\", \"&t=t\"], [\"周榜\", \"&t=w\"], [\"月榜\", \"&t=m\"],[\"总榜\", \"\"]];\nfor (var k = 0; k < typeList.length; k++) {\n var arr = typeList[k];\n var t = arr[0];\n var type = arr[1];\n push(t, URL + '\/albums?o=mv' + type + '&page=' + '{{page}}' , 0.2);\n}\n\t\npush('♥️收藏排行榜♥️', '', 1);\nfor (var l = 0; l < typeList.length; l++) {\n var arr = typeList[l];\n var t = arr[0];\n var type = arr[1];\n push(t, URL + '\/albums?o=mo' + type + '&page=' + '{{page}}', 0.2);\n}\n\nvar sorts1 = [\"無修正\",\"劇情向\",\"青年漫\",\"校服\",\"純愛\",\"人妻\",\"教師\",\"百合\",\"Yaoi\",\"性轉\",\"女裝\",\"癡女\",\"全彩\",\"女性向\",\"完結\",\"純愛\",\"禁漫漢化組\"];\nvar sorts2 = [\"御姐\",\"熟女\",\"未成年\",\"巨乳\",\"貧乳\",\"女性支配\",\"教師\",\"女僕\",\"護士\",\"泳裝\",\"眼鏡\",\"連褲襪\",\"其他制服\",\"兔女郎\"];\nvar sorts3 = [\"群交\",\"足交\",\"束縛\",\"肛交\",\"阿黑顏\",\"藥物\",\"扶他\",\"調教\",\"野外露出\",\"催眠\",\"自慰\",\"觸手\",\"獸交\",\"亞人\",\"怪物女孩\",\"皮物\",\"附身\",\"ryona\",\"骑大车\"];\nvar sorts4 = [\"CG\",\"重口\",\"獵奇\",\"非H\",\"血腥暴力\",\"站長推薦\"];\nvar sortCriteria = [\n { label: '🏷️标签---按时间🏷️', sort: 'mr' },\n { label: '🏷️标签---按阅读🏷️', sort: 'mv' },\n { label: '🏷️标签---按最爱🏷️', sort: 'tf' },\n { label: '🏷️标签---按收藏🏷️', sort: 'mo' },\n { label: '🏷️标签---按评分🏷️', sort: 'tr' },\n { label: '🏷️标签---按评论🏷️', sort: 'md' },\n { label: '🏷️标签---按图片🏷️', sort: 'mp' }\n];\n\nvar sort = sortCriteria[$$$.tag].sort;\nvar label = sortCriteria[$$$.tag].label;\n\npush(label, '', 1);\npush('▶主题A漫◀','', 1);\nfor (var m = 0; m < sorts1.length; m++) {\n var s = sorts1[m];\n push(s, URL + '\/search\/photos?search_query=' + s + '&o=' + sort + '&page=' + '{{page}}', 0.25);\n}\n\npush('▶角色\/扮演◀','', 1);\nfor (var n = 0; n < sorts2.length; n++) {\n var s = sorts2[n];\n push(s, URL + '\/search\/photos?search_query=' + s + '&o=' + sort + '&page=' + '{{page}}', 0.25);\n}\n\npush('▶特殊PLAY◀','', 1);\nfor (var p = 0; p < sorts3.length; p++) {\n var s = sorts3[p];\n push(s, URL + '\/search\/photos?search_query=' + s + '&o=' + sort + '&page=' + '{{page}}', 0.25);\n}\n\npush('▶其他◀','', 1);\nfor (var q = 0; q < sorts4.length; q++) {\n var s = sorts4[q];\n push(s, URL + '\/search\/photos?search_query=' + s + '&o=' + sort + '&page=' + '{{page}}', 0.25);\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\/141.0.0.0 Safari\/537.36 Edg\/141.0.0.0\",\n\"Referer\":\"https:\/\/18comic.vip\/\"\n}", "jsLib": "function Get(e) {\n var $this = this;\n var java = $this.java;\n var source = $this.source;\n var cookie = $this.cookie;\n var get = JSON.parse(source.getVariable());\n return get[e];\n}", "lastUpdateTime": "1760810372215", "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 }\nresult;", "loginUi": "[ \n {\n \"name\": \"账号\",\n \"type\": \"text\"\n },\n {\n \"name\": \"密码\",\n \"type\": \"password\"\n },\n {\n \"name\": \"༺»`点击切换分流´«༻\",\n \"type\": \"button\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\n },\n {\n \"name\": \"切换分流线路(1-4)\",\n \"type\": \"button\",\n \"action\": \"toggleShunt()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.3\n }\n },\n {\n \"name\": \"切换国际线路\",\n \"type\": \"button\",\n \"action\": \"setIntlUrl()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.3,\n \"fontSize\": \"medium\",\n \"padding\": \"10px\",\n \"fontWeight\": \"bold\",\n \"color\": \"white\",\n \"backgroundColor\": \"#28a745\"\n }\n },\n {\n \"name\": \"切换东南亚线路\",\n \"type\": \"button\",\n \"action\": \"setSeaUrl()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.3,\n \"fontSize\": \"medium\",\n \"padding\": \"10px\",\n \"fontWeight\": \"bold\",\n \"color\": \"#000000\",\n \"backgroundColor\": \"#ffc107\"\n }\n },\n {\n \"name\": \"❤️获取\/切换国内直连\",\n \"type\": \"button\",\n \"action\": \"url()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.3,\n \"fontSize\": \"large\",\n \"padding\": \"15px\",\n \"fontWeight\": \"bold\",\n \"color\": \"white\",\n \"backgroundColor\": \"#007bff\"\n }\n },\n \n {\n \"name\": \"༺ˇ»`ʚ 点击切换排序 ɞ´«ˇ༻\",\n \"type\": \"button\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\n },\n {\n \"name\": \"时间\",\n \"type\": \"button\",\n \"action\": \"tag(0)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"阅读\",\n \"type\": \"button\",\n \"action\": \"tag(1)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"最爱\",\n \"type\": \"button\",\n \"action\": \"tag(2)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"收藏\",\n \"type\": \"button\",\n \"action\": \"tag(3)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"评分\",\n \"type\": \"button\",\n \"action\": \"tag(4)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"评论\",\n \"type\": \"button\",\n \"action\": \"tag(5)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"图片\",\n \"type\": \"button\",\n \"action\": \"tag(6)\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.25\n }\n },\n {\n \"name\": \"༺»`每周必看索引 (0-210)´«༻\",\n \"type\": \"button\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 1\n }\n },\n {\n \"name\": \"重置\",\n \"type\": \"button\",\n \"action\": \"resetWeekIndex()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.2\n }\n },\n {\n \"name\": \"随机\",\n \"type\": \"button\",\n \"action\": \"randomWeekIndex()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.2\n }\n },\n {\n \"name\": \"+1\",\n \"type\": \"button\",\n \"action\": \"incrementWeekIndex()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.2\n }\n },\n {\n \"name\": \"-1\",\n \"type\": \"button\",\n \"action\": \"decrementWeekIndex()\",\n \"style\": {\n \"layout_flexGrow\": 1,\n \"layout_flexBasisPercent\": 0.2\n }\n }\n]", "loginUrl": "var intlLinks = [];\nvar seaLinks = [];\nvar defaultIntlLinks = ['https:\/\/18comic.vip', 'https:\/\/18comic.ink'];\nvar defaultSeaLinks = ['https:\/\/jmcomic-zzz.one', 'https:\/\/jmcomic-zzz.org'];\nvar cachedPageHtml = null;\n\nfunction extractLinks(pageHtml, blockRegex) {\n var links = [];\n if (!pageHtml) return links;\n var blockMatch = pageHtml.match(blockRegex);\n if (blockMatch && blockMatch[1]) {\n var blockContent = blockMatch[1];\n var linkMatches = blockContent.match(\/<span>(.*?)<\\\/span>\/g);\n if (linkMatches) {\n links = linkMatches.map(function(spanTag) {\n var domain = spanTag.replace(\/<\\\/?span>\/g, '').trim();\n return 'https:\/\/' + domain;\n }).filter(function(url) {\n return url !== 'https:\/\/';\n });\n }\n }\n return links;\n}\n\nvar intlBlockRegex = \/<div class=\"international\">([\\s\\S]*?)<\\\/div>\/;\nvar seaBlockRegex = \/<div class=\"southeast_asia\">([\\s\\S]*?)<\\\/div>\/;\n\ntry {\n cachedPageHtml = java.ajax('https:\/\/jmcomicqa.cc');\n intlLinks = extractLinks(cachedPageHtml, intlBlockRegex);\n seaLinks = extractLinks(cachedPageHtml, seaBlockRegex);\n\n if (intlLinks.length === 0) {\n java.log('未能从jmcomicqa.cc提取国际线路, 启用备用线路。');\n intlLinks = defaultIntlLinks;\n }\n if (seaLinks.length === 0) {\n java.log('未能从jmcomicqa.cc提取东南亚线路, 启用备用线路。');\n seaLinks = defaultSeaLinks;\n }\n} catch (e) {\n java.log('访问jmcomicqa.cc失败, 启用备用线路: ' + e);\n intlLinks = defaultIntlLinks;\n seaLinks = defaultSeaLinks;\n}\n\nvar original = {\n 'url': 'https:\/\/jmcomicqa.cc',\n 'name': '寿横',\n 'tag': 0,\n 'weekIndex': 0, \n 'shunt': 1,\n 'usedIndexes': [],\n 'lineType': '主线路',\n 'intlLinkIndex': 0,\n 'seaLinkIndex': 0\n};\ntry {\n $$$= JSON.parse(source.getVariable());\n if ($$$ == null) {\n throw new Error();\n } else {\n if (!$$$.hasOwnProperty('usedIndexes'))$$$.usedIndexes = [];\n if (!$$$.hasOwnProperty('weekIndex')) $$$.weekIndex = 0;\n if (!$$$.hasOwnProperty('tag')) $$$.tag = 0;\n if (!$$$.hasOwnProperty('shunt')) $$$.shunt = 1; \n if (!$$$.hasOwnProperty('lineType')) $$$.lineType = '主线路';\n if (!$$$.hasOwnProperty('intlLinkIndex')) $$$.intlLinkIndex = 0;\n if (!$$$.hasOwnProperty('seaLinkIndex')) $$$.seaLinkIndex = 0;\n };\n} catch (e) {\n $$$= original;\n put($$$);\n}\n\nfunction put(data) {\n return source.setVariable(JSON.stringify(data, null, '\\t'));\n}\n\nfunction n(e) {\n var n_str = '\\n';\n for (var m = 1; m < e; m++) {\n n_str = n_str + '\\n';\n }\n return n_str;\n}\n\nfunction log(e) {\n if (e == undefined) {\n return;\n }\n java.longToast(e);\n}\n\nvar regexList = [\n \/china\"><span>(.*?)<\\\/span>\/,\n \/first_line\"><span>(.*?)<\\\/span>\/,\n \/second_line\"><span>(.*?)<\\\/span>\/\n];\n\nfunction getRandomUnusedIndex() {\n if ($$$.usedIndexes.length === regexList.length) {\n $$$.usedIndexes = [];\n }\n var randomIndex;\n do {\n randomIndex = Math.floor(Math.random() * regexList.length);\n } while ($$$.usedIndexes.indexOf(randomIndex) !== -1);\n $$$.usedIndexes.push(randomIndex);\n put($$$);\n return randomIndex;\n}\n\nvar MAX_INDEX = 210;\nvar MIN_INDEX = 0;\n\nfunction updateIndex(newIndex) {\n if (newIndex !== $$$.weekIndex) {\n $$$.weekIndex = newIndex;\n put($$$);\n log('【索引更新】每周必看索引已更新为: ' + newIndex + n(2) + '请刷新探索页');\n } else {\n log('【提示】索引值未更改,当前值为: ' + newIndex);\n }\n}\n\nfunction randomWeekIndex() {\n var newIndex = Math.floor(Math.random() * (MAX_INDEX + 1));\n updateIndex(newIndex);\n}\n\nfunction incrementWeekIndex() {\n var newIndex = $$$.weekIndex + 1;\n if (newIndex > MAX_INDEX) {\n newIndex = MAX_INDEX;\n log('【警告】已达最大索引值: ' + MAX_INDEX);\n }\n updateIndex(newIndex);\n}\n\nfunction decrementWeekIndex() {\n var newIndex = $$$.weekIndex - 1;\n if (newIndex < MIN_INDEX) {\n newIndex = MIN_INDEX;\n log('【警告】已达最小索引值: ' + MIN_INDEX);\n }\n updateIndex(newIndex);\n}\n\nfunction resetWeekIndex() {\n updateIndex(MIN_INDEX);\n}\n\nfunction login() {\n var result = JSON.parse(source.getLoginInfo());\n var username = result['账号'];\n $$$.name = username;\n var password = result['密码'];\n var options = {\n\t body: 'username=' + username + '&password=' + password + '&submit_login=1',\n\t method: 'POST'\n\t};\n if (!cachedPageHtml) {\n cachedPageHtml = java.ajax('https:\/\/jmcomicqa.cc');\n }\n var randomIndex = getRandomUnusedIndex();\n var currentRegex = regexList[randomIndex];\n var matchResult = cachedPageHtml.match(currentRegex);\n var url = matchResult ? matchResult[1] : $$$.url;\n \n var lineType = randomIndex === 0 ? '主线路' : '备用线路';\n var lineHint = randomIndex === 0 ? ' (默认主线路)' : ' (备用线路)';\n log('站点变更:' + url + lineHint);\n \n $$$.url = url;\n $$$.lineType = lineType;\n put($$$);\n java.ajax(url + '\/login,' + JSON.stringify(options));\n return put($$$);\n}\n\nvar P = ['时间', '阅读', '最爱', '收藏', '评分', '评论', '图片'];\n\nfunction typeP(e) {\n if (e == undefined || e < 0 || e >= P.length) {\n e = 0;\n }\n return P[e];\n}\n\nfunction tag(e) {\n if (e == $$$.tag) {\n return log('【标签切换提示】' + n(2) + '已经选择[' + typeP(e) + '],无需更换');\n }\n log('【标签切换提示】' + n(2) + '已经切换到[' + typeP(e) + '],请刷新探索页');\n $$$.tag = e;\n return put($$$);\n}\n\nfunction url() {\n if (!cachedPageHtml) {\n cachedPageHtml = java.ajax('https:\/\/jmcomicqa.cc');\n }\n var randomIndex = getRandomUnusedIndex();\n var currentRegex = regexList[randomIndex];\n var matchResult = cachedPageHtml.match(currentRegex);\n var url = matchResult ? matchResult[1] : $$$.url;\n \n var lineType = randomIndex === 0 ? '主线路' : '备用线路';\n var lineHint = randomIndex === 0 ? ' (默认主线路)' : ' (备用线路)';\n \n if (url == $$$.url) {\n return log('【站点提示】' + n(2) + '站点无需更换,当前为' + lineHint);\n }\n log('站点变更:' + url + lineHint);\n $$$.url = url;\n $$$.lineType = lineType;\n return put($$$);\n}\n\nfunction setIntlUrl() {\n if (typeof $$$.intlLinkIndex === 'undefined') $$$.intlLinkIndex = 0;\n $$$.intlLinkIndex = ($$$.intlLinkIndex + 1) % intlLinks.length;\n var newUrl = intlLinks[$$$.intlLinkIndex];\n $$$.url = newUrl;\n $$$.lineType = '国际通用,需魔法';\n put($$$);\n log('【国际站点】已切换 (' + ($$$.intlLinkIndex + 1) + '\/' + intlLinks.length + '): ' + newUrl + n(2) + '请刷新探索页');\n}\n\nfunction setSeaUrl() {\n if (typeof $$$.seaLinkIndex === 'undefined') $$$.seaLinkIndex = 0;\n $$$.seaLinkIndex = ($$$.seaLinkIndex + 1) % seaLinks.length;\n var newUrl = seaLinks[$$$.seaLinkIndex];\n $$$.url = newUrl;\n $$$.lineType = '东南亚,需魔法';\n put($$$);\n log('【东南亚站点】已切换 (' + ($$$.seaLinkIndex + 1) + '\/' + seaLinks.length + '): ' + newUrl + n(2) + '请刷新探索页');\n}\n\nfunction toggleShunt() {\n var newShunt = $$$.shunt + 1;\n if (newShunt > 4) {\n newShunt = 1;\n }\n log('【分流切换提示】' + n(2) + '已切换分流: ' + $$$.shunt + ' -> ' + newShunt + ',请刷新探索页');\n $$$.shunt = newShunt;\n return put($$$);\n}\n\n\nfunction shunt(e) {\n if (e < 1 || e > 4) {\n return log('【分流提示】' + n(2) + '分流值不合法,范围为1-4。');\n }\n if (e == $$$.shunt) {\n return log('【分流切换提示】' + n(2) + '已经选择分流[' + e + '],无需更换');\n }\n log('【分流切换提示】' + n(2) + '已经切换到分流[' + e + '],请刷新探索页');\n $$$.shunt = e;\n return put($$$);}", "respondTime": 180000, "ruleBookInfo": { "author": "{{@@.phone-author-tag@text}}", "coverUrl": ".thumb-overlay.2@img@src", "init": "<js>\nurl = baseUrl\nvar num = baseUrl.indexOf(\"novel\") !== -1 ? 1 : 2;\njava.put(\"btype\",num);\nresult\n<\/js>", "intro": " {{@@class.train-number@text}}\n{{@@class.intro-collapse-content@text}}\n{{@@class.p-t-5 float-left@text##日期}} {{@@class.p-t-5 float-right@text##日期}}\n{{@@class.col-xs-12 col-lg-7 nav-tab-content@class.p-t-5 p-b-5@text##叙述:|敘述:}}", "kind": "@js:\nvar text;\nif (baseUrl.indexOf('novel') !== -1){\n\ttext=java.getString('span[data-type=tags]@a@text');\n}else {\n\ttext=java.getString('#intro-block@[data-type=tags]@a@text');\n}\ntext;", "name": "{{@@h1@text}}", "tocUrl": "baseUrl", "wordCount": "{{@class.train-number@text}}" }, "ruleContent": { "content": "{{@class.novel-content@html}}\n{{@class.row thumb-overlay-albums@tag.img@data-original}}\n@js:var url = baseUrl\nif(baseUrl.indexOf(\"novel\") !== -1){\n\tresult\n\t} else {\n var lines = result.split(\"\\n\");\n var newLines = [];\n for (var i = 0; i < lines.length; i++) {\n newLines.push('<img src=\"' + lines[i] + '\">');\n }\n newLines.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 var mac = src.match(\/photos\\\/(\\d+)?\\\/(\\d+)?\/);\n var bookId = mac[1];\n var imgId = mac[2];\n if (src.search(\"gif\") != -1 || Number(bookId) < 220980) {\n result;\n } else {\n var num;\n if (Number(bookId) > 421925) {\n var md5 = java.md5Encode((bookId + imgId));\n var ascii = md5.substr( - 1).charCodeAt(0);\n num = (ascii % 8 + 1) * 2;\n } else if (Number(bookId) >= 268850) {\n var md5 = java.md5Encode((bookId + imgId));\n var ascii = md5.substr( - 1).charCodeAt(0);\n num = (ascii % 10 + 1) * 2;\n } else {\n 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 var canvas = new Canvas(newImg);\n for (var i = 1; i <= num; i++) {\n var 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:\nvar text;\nif (baseUrl.indexOf('novel') !== -1){\n\ttext=java.getString('.title-truncate.2@text');\n}else {\n\ttext=java.getString('.title-truncate.1@text');\n}\ntext;", "bookList": ".list-col||.list-item||.thumb-overlay-guess_likes", "bookUrl": "tag.a.0@href", "coverUrl": "img@data-original||img@src", "intro": ".video-title@text", "kind": ".tag@text", "lastChapter": "@js:\nvar text;\nif (baseUrl.indexOf('novel') !== -1){\n\ttext=java.getString('.title-truncate.1@text');\n}else {\n\ttext=java.getString('');\n}\ntext;", "name": ".video-title@text", "wordCount": "span.0@text##^##👍🏻" }, "ruleToc": { "chapterList": "class.btn-toolbar.0@tag.a||.reading\n<js>\nvar 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##(.*)##$1\/?shunt={{Get('shunt')}}", "preUpdateJs": "{{}}", "updateTime": "span@text" }, "searchUrl": "{{Get('url')}}\/search\/photos?search_query={{key}}&search-type=photos&main_tag=0&page={{page}}", "weight": 0 }