MissKon写真图库

https://misskon.us/zh/

分享者: laizhiyu (6509)发布时间: 10/31 01:55

增加画质选择
二维码导入
{
    "articleStyle": 2,
    "cacheFirst": false,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/124.0.0.0 Mobile Safari\/537.36\"}",
    "jsLib": "\/\/ MissKon jsLib: MkRoot() 线路变量读取\n\/\/ ★源码实锤(两版一致): 正文 analyzeContentPage → AnalyzeRule(rssArticle, rssSource) → evalJS 绑定 source=rssSource(RssSource本体,有put\/get)\n\/\/ ⇒ 正文环境 source.get('key') 直接可用; getVariable() 是无参方法(整串variable), 带参会错位到 JsExtensions.get(url,headers) 发HTTP请求!\nfunction MkRoot() {\n  var v = 'https:\/\/misskon.us';\n  try {\n    var d = String(source.get('mkLine'));\n    if (d !== 'null' && d !== 'undefined' && d !== '') v = d;\n  } catch (e) {}\n\n  v = String(v == null ? '' : v);\n  if (v === 'null' || v === 'undefined') v = '';\n  if (v === '') v = 'https:\/\/misskon.us';\n  return v;\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUi": "[{\"name\": \"mkPub\", \"type\": \"text\", \"viewName\": \"'发布页地址(默认cc)'\"}, {\"name\": \"🧭获取发布页线路\", \"type\": \"button\", \"action\": \"MK_fetchPub()\"}, {\"name\": \"⏱测试延时\", \"type\": \"button\", \"action\": \"MK_testAll(true)\"}, {\"name\": \"MK画质按钮\", \"type\": \"button\", \"action\": \"MK_toggleQuality()\", \"viewName\": \"MK_qualityBtn()\"}, {\"name\": \"线路1\", \"type\": \"button\", \"action\": \"MK_switch(1)\", \"viewName\": \"MK_lineBtn(1)\"}, {\"name\": \"线路2\", \"type\": \"button\", \"action\": \"MK_switch(2)\", \"viewName\": \"MK_lineBtn(2)\"}, {\"name\": \"线路3\", \"type\": \"button\", \"action\": \"MK_switch(3)\", \"viewName\": \"MK_lineBtn(3)\"}, {\"name\": \"线路4\", \"type\": \"button\", \"action\": \"MK_switch(4)\", \"viewName\": \"MK_lineBtn(4)\"}, {\"name\": \"线路5\", \"type\": \"button\", \"action\": \"MK_switch(5)\", \"viewName\": \"MK_lineBtn(5)\"}, {\"name\": \"线路6\", \"type\": \"button\", \"action\": \"MK_switch(6)\", \"viewName\": \"MK_lineBtn(6)\"}, {\"name\": \"线路7\", \"type\": \"button\", \"action\": \"MK_switch(7)\", \"viewName\": \"MK_lineBtn(7)\"}, {\"name\": \"线路8\", \"type\": \"button\", \"action\": \"MK_switch(8)\", \"viewName\": \"MK_lineBtn(8)\"}, {\"name\": \"线路9\", \"type\": \"button\", \"action\": \"MK_switch(9)\", \"viewName\": \"MK_lineBtn(9)\"}, {\"name\": \"线路10\", \"type\": \"button\", \"action\": \"MK_switch(10)\", \"viewName\": \"MK_lineBtn(10)\"}, {\"name\": \"线路11\", \"type\": \"button\", \"action\": \"MK_switch(11)\", \"viewName\": \"MK_lineBtn(11)\"}, {\"name\": \"线路12\", \"type\": \"button\", \"action\": \"MK_switch(12)\", \"viewName\": \"MK_lineBtn(12)\"}]",
    "loginUrl": "\/\/ ==================== MissKon 线路管理面板 ====================\nvar MK_MAXLINES = 12;\n\nfunction MK_gv(v) {\n  var s = String(v == null ? '' : v);\n  if (s === 'null' || s === 'undefined') s = '';\n  return s;\n}\n\nfunction MK_line() {\n  var d = MK_gv(source.get('mkLine'));\n  if (d === '') d = 'https:\/\/misskon.us';\n  return d;\n}\n\nfunction MK_bases() {\n  var bases = [];\n  var i, u;\n  var saved = MK_gv(source.get('mkFound'));\n  if (saved !== '') {\n    var arr = saved.split(' ');\n    for (i = 0; i < arr.length; i++) {\n      u = arr[i];\n      if (u !== '' && bases.indexOf(u) < 0) bases.push(u);\n    }\n  }\n  var defs = ['https:\/\/misskon.us', 'https:\/\/misskon.org'];\n  for (i = 0; i < defs.length; i++) {\n    if (bases.indexOf(defs[i]) < 0) bases.push(defs[i]);\n  }\n  if (bases.length > MK_MAXLINES) bases = bases.slice(0, MK_MAXLINES);\n  return bases;\n}\n\nfunction MK_short(u) {\n  return String(u).replace('https:\/\/', '').replace('http:\/\/', '');\n}\n\nfunction MK_probe(url) {\n  try {\n    var r = java.connect(url, '{\"User-Agent\":\"Mozilla\/5.0\"}', 12000);\n    if (r == null) return 'E:空响应';\n    var body = '';\n    try { body = String(r.body()); } catch (e) { body = ''; }\n    if (body.indexOf('Exception') > -1 || body.indexOf('timeout') > -1) return 'E:' + body.substring(0, 36);\n    var code = -1;\n    try { code = r.code(); } catch (e2) { code = -1; }\n    if (code == 301 || code == 302) return String(code) + '跳转';\n    if (code != 200) return 'E:HTTP' + code;\n    if (body.length < 500) return 'E:内容异常';\n    return r.callTime() + 'ms';\n  } catch (e) {\n    return 'E:' + String(e).substring(0, 40);\n  }\n}\n\nfunction MK_testAll(auto) {\n  java.longToast('⏱开始测速...');\n  var bases = MK_bases();\n  var res = [];\n  var bestT = 2147483647, bestBase = '';\n  for (var i = 0; i < bases.length; i++) {\n    var b = bases[i];\n    var t = MK_probe(b + '\/zh\/albums');\n    res.push(MK_short(b) + ' : ' + t);\n    source.put('mkDelayKey' + i, b);\n    source.put('mkDelay' + i, t);\n    var m = \/^(\\d+)ms$\/.exec(t);\n    if (m) {\n      var tv = parseInt(m[1], 10);\n      if (auto && tv < bestT) { bestT = tv; bestBase = b; }\n    }\n  }\n  for (var j = bases.length; j < MK_MAXLINES; j++) {\n    source.put('mkDelayKey' + j, '');\n    source.put('mkDelay' + j, '');\n  }\n  var rpt = '测速完成(' + bases.length + '条)\\n' + res.join('\\n');\n  if (auto && bestBase !== '') {\n    source.put('mkLine', bestBase);\n    rpt += '\\n已自动切换: ' + MK_short(bestBase) + '\\n(发现页需清理排序缓存后生效)';\n    java.longToast('⚡最优 ' + MK_short(bestBase) + ' ' + bestT + 'ms');\n  }\n  try { java.reLoginView(); } catch (e) {}\n  return rpt;\n}\n\nfunction MK_fetchPub() {\n  java.longToast('🧭正在获取发布页...');\n  var pub = MK_gv(source.get('mkPub'));\n  if (pub === '') pub = 'https:\/\/misskon.cc';\n  if (pub.indexOf('http') !== 0) pub = 'https:\/\/' + pub;\n  var body = '';\n  try {\n    body = String(java.ajax(pub));\n  } catch (e) {\n    return '❌发布页获取失败: ' + String(e).substring(0, 60);\n  }\n  if (!body || body.length < 200) return '❌发布页内容异常(len=' + body.length + ')';\n  source.put('mkPubBody', body);\n  var re = \/https?:\\\/\\\/[a-z0-9.-]*misskon[a-z0-9.-]*(?::\\d+)?\/g;\n  var m, bases = [];\n  while ((m = re.exec(body)) !== null) {\n    var u = m[0].replace(\/\\\/+$\/, '');\n    if (u.indexOf('misskon.cc') < 0 && bases.indexOf(u) < 0) bases.push(u);\n  }\n  if (!bases.length) return '❌发布页未解析到线路(仅发布页自身)';\n  source.put('mkFound', bases.join(' '));\n  for (var i = 0; i < bases.length && i < MK_MAXLINES; i++) {\n    source.put('mkDelayKey' + i, bases[i]);\n  }\n  try { java.reLoginView(); } catch (e) {}\n  return '✅解析到 ' + bases.length + ' 条线路:\\n' + bases.join('\\n') + '\\n点⏱测试延时后选择线路';\n}\n\nfunction MK_switch(idx) {\n  var bases = MK_bases();\n  var b = bases[idx - 1];\n  if (!b) return '❌线路' + idx + '不存在(共' + bases.length + '条)';\n  source.put('mkLine', b);\n  try { java.reLoginView(); } catch (e) {}\n  java.longToast('✅已切换: ' + MK_short(b) + '\\n发现页需清理排序缓存后生效');\n  return '✅当前线路: ' + MK_short(b);\n}\n\nfunction MK_lineBtn(idx) {\n  var bases = MK_bases();\n  var b = bases[idx - 1];\n  if (!b) return '线路' + idx + ' (未启用)';\n  var label = '⚡' + MK_short(b);\n  if (MK_line() === b) label = '▶' + label;\n  var d = MK_gv(source.get('mkDelay' + (idx - 1)));\n  if (d !== '') label += ' ' + d;\n  return label;\n}\n\nfunction MK_quality() {\n  var q = MK_gv(source.get('mkQuality'));\n  if (q !== 'lite') q = 'hd';\n  return q;\n}\n\nfunction MK_toggleQuality() {\n  var q = MK_quality();\n  var nq = (q === 'hd') ? 'lite' : 'hd';\n  source.put('mkQuality', nq);\n  try { java.reLoginView(); } catch (e) {}\n  var msg = (nq === 'hd')\n    ? '已切换: 高清模式\\n单列大图, 浏览体验最佳\\n(旧文章需清除存档后生效)'\n    : '已切换: 省流模式\\n双列小图, 一屏浏览更多\\n(旧文章需清除存档后生效)';\n  java.longToast(msg);\n  return msg;\n}\n\nfunction MK_qualityBtn() {\n  return (MK_quality() === 'hd') ? '🎨画质:高清' : '🎨画质:省流';\n}\n\nfunction MK_showLine() {\n  return '当前: ' + MK_short(MK_line()) + ' | 线路数: ' + MK_bases().length;\n}\n\nfunction login() {\n  try { java.longToast('MissKon 无需登录, 直接使用'); } catch (e) {}\n}",
    "preload": false,
    "ruleArticles": "class.album-card",
    "ruleContent": "@js:\n\/\/ ==================== MissKon 正文 v2: 单页抓取 + URL 直构 ====================\n\/\/ 站点图片按 photos\/{slug}\/{1..N}.webp 连续编号, 第1页含总张数(N 张照片)\n\/\/ 只抓 baseUrl 一页, 其余图片 URL 全部构造: 4次串行HTML请求 -> 1次, 正文秒开\n(function () {\n  var NL = String.fromCharCode(10);\n  var MROOT = MkRoot();\n  var HDR = '{\"User-Agent\":\"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/124.0.0.0 Mobile Safari\/537.36\"}';\n  var LITE = false;\n  try {\n    if (String(source.get('mkQuality')) === 'lite') LITE = true;\n  } catch (e) {}\n\n\n  function getAttr(html, re) {\n    var m = re.exec(html);\n    return m ? m[1] : '';\n  }\n\n  var body = '';\n  try {\n    var r = java.connect(String(baseUrl), HDR, 15000);\n    if (r != null) body = String(r.body());\n  } catch (e) { body = ''; }\n\n  var imgs = [];\n  if (body.length > 1000) {\n    var slug = getAttr(body, \/photos\\\/([a-z0-9-]+)\\\/cover\\.webp\/);\n    var total = parseInt(getAttr(body, \/(\\d[\\d,]*)\\s*张照片\/).replace(\/,\/g, ''), 10) || 0;\n    if (!total) total = parseInt(getAttr(body, \/\"([\\d,]+) 张\/).replace(\/,\/g, ''), 10) || 0;\n    if (slug && total > 0 && total < 2000) {\n      for (var i = 1; i <= total; i++) {\n        imgs.push('https:\/\/images.misskon.us\/photos\/' + slug + '\/' + i + '.webp');\n      }\n    } else {\n      \/\/ 兜底: slug\/总数解析失败 -> 老方案(rel=next链)\n      var re = \/photos\\\\?\\\/([A-Za-z0-9-]+)\\\\?\\\/(\\d+)\\\\?\\.webp\/g;\n      var seen = {};\n      var url = String(baseUrl);\n      var prev = '';\n      var guard = 0;\n      while (guard < 30) {\n        var b = '';\n        try {\n          var r2 = java.connect(url, HDR, 15000);\n          if (r2 == null) break;\n          b = String(r2.body());\n        } catch (e2) { break; }\n        if (!b || b.length < 1000 || b === prev) break;\n        prev = b;\n        guard++;\n        var m;\n        while ((m = re.exec(b)) !== null) {\n          var sg = m[1];\n          if (!seen[sg]) seen[sg] = {};\n          if (seen[sg][m[2]]) continue;\n          seen[sg][m[2]] = 1;\n          imgs.push('https:\/\/images.misskon.us\/photos\/' + sg + '\/' + m[2] + '.webp');\n        }\n        if (!imgs.length) break;\n        var nx = getAttr(b, \/rel=\"next\" href=\"([^\"]+)\"\/);\n        if (!nx) break;\n        nx = nx.replace(\/&amp;\/g, '&');\n        if (nx.indexOf('http') !== 0) nx = MROOT + nx;\n        if (nx === url) break;\n        url = nx;\n      }\n    }\n  }\n\n  \/\/ ===== meta 与 HTML 组装 =====\n  var title = getAttr(body, \/<h1[^>]*>([\\s\\S]*?)<\\\/h1>\/);\n  title = title.replace(\/<[^>]+>\/g, '').replace(\/\\s+\/g, ' ');\n  var kw = getAttr(body, \/\"keywords\":\"([^\"]*)\"\/);\n  var date = getAttr(body, \/\"datePublished\":\"([^\"]*)\"\/);\n  var model = getAttr(body, \/\"creator\":\\{\"@type\":\"Person\",\"name\":\"([^\"]*)\"\/);\n  var total = getAttr(body, \/(\\d[\\d,]*)\\s*张照片\/);\n  var h = [];\n  h.push('<div style=\"font:15px\/1.6 sans-serif;max-width:760px;margin:0 auto;padding:12px\">');\n  if (LITE) {\n    h.push('<style>.mk-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.mk-grid img{width:100%;border-radius:6px;display:block;background:linear-gradient(90deg,#eee 25%,#f5f5f5 50%,#eee 75%);background-size:200% 100%;animation:mkShimmer 1.2s infinite}@media(min-width:600px){.mk-grid{grid-template-columns:1fr 1fr 1fr}}<\/style>');\n  } else {\n    h.push('<style>.mk-grid{display:block}.mk-grid img{width:100%;border-radius:6px;display:block;margin:0 0 10px;background:linear-gradient(90deg,#eee 25%,#f5f5f5 50%,#eee 75%);background-size:200% 100%;animation:mkShimmer 1.2s infinite}<\/style>');\n  }\n  h.push('<div style=\"font-size:19px;font-weight:700;margin:6px 0 2px\">' + title + '<\/div>');\n  h.push('<div style=\"font-size:12px;color:#888;margin-bottom:8px\">' + (model ? '👤 ' + model : '') + (kw ? ' | 🏷️ ' + kw : '') + (date ? ' | 📅 ' + date.substring(0, 10) : '') + (total ? ' | 🖼 ' + total + '张' : '') + '<\/div>');\n  h.push('<div style=\"height:1px;background:#eee;margin:8px 0 12px\"><\/div>');\n  h.push('<div class=\"mk-grid\">');\n  for (var k = 0; k < imgs.length; k++) {\n    h.push('<img loading=\"lazy\" decoding=\"async\" src=\"' + imgs[k] + '\" alt=\"' + (k + 1) + '\/' + imgs.length + '\">');\n  }\n  h.push('<\/div>');\n  h.push('<div style=\"text-align:center;color:#aaa;font-size:12px;padding:10px 0 20px\">- 共 ' + imgs.length + ' 张 -<\/div>');\n  h.push('<\/div>');\n  return h.join(NL);\n})();",
    "ruleImage": "@js:(function(){try{var im=result.select('img[src]');for(var i=0;i<im.size();i++){var s=im.get(i).attr('src');if(s.indexOf('images.misskon')>=0)return s}return ''}catch(e){return ''}})()",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "PAGE",
    "rulePubDate": "@js:(function(){try{var ds=result.select('div.text-\\\\[11px\\\\]');if(ds.size()>0)return ds.get(0).text();return ''}catch(e){return ''}})()",
    "ruleTitle": "tag.h3.0@text",
    "searchUrl": "{{(function(){var d='';try{d=String(source.get('mkLine'))}catch(e){}if(d==='null'||d==='undefined'||!d)d='https:\/\/misskon.us';return d+'\/zh\/albums\/search?q='+encodeURIComponent(key)})()}}",
    "showWebLog": false,
    "singleUrl": false,
    "sortUrl": "@js:\nvar d = '';\ntry { d = String(source.get('mkLine')); } catch (e) { d = ''; }\nif (d === 'null' || d === 'undefined' || d === '') d = 'https:\/\/misskon.us';\nvar L = [];\nL.push(\"最新图集::\" + d + \"\/zh\/albums\");\nL.push(\"所有分类::\" + d + \"\/zh\/\");\nL.push(\"a4u::\" + d + \"\/zh\/series\/a4u\");\nL.push(\"ai-photos::\" + d + \"\/zh\/series\/ai-photos\");\nL.push(\"aiss::\" + d + \"\/zh\/series\/aiss\");\nL.push(\"all-xiuren::\" + d + \"\/zh\/series\/all-xiuren\");\nL.push(\"artgravia::\" + d + \"\/zh\/series\/artgravia\");\nL.push(\"beijing-angel::\" + d + \"\/zh\/series\/beijing-angel\");\nL.push(\"book-scans::\" + d + \"\/zh\/series\/book-scans\");\nL.push(\"chinese-nude::\" + d + \"\/zh\/series\/chinese-nude\");\nL.push(\"chinese-studios::\" + d + \"\/zh\/series\/chinese-studios\");\nL.push(\"ddy::\" + d + \"\/zh\/series\/ddy\");\nL.push(\"dongguan-vgirls::\" + d + \"\/zh\/series\/dongguan-vgirls\");\nL.push(\"ed-mosaic::\" + d + \"\/zh\/series\/ed-mosaic\");\nL.push(\"escape::\" + d + \"\/zh\/series\/escape\");\nL.push(\"espacia-korea::\" + d + \"\/zh\/series\/espacia-korea\");\nL.push(\"fairy-club::\" + d + \"\/zh\/series\/fairy-club\");\nL.push(\"fantasy-factory::\" + d + \"\/zh\/series\/fantasy-factory\");\nL.push(\"flash::\" + d + \"\/zh\/series\/flash\");\nL.push(\"friday::\" + d + \"\/zh\/series\/friday\");\nL.push(\"girlt::\" + d + \"\/zh\/series\/girlt\");\nL.push(\"graphis::\" + d + \"\/zh\/series\/graphis\");\nL.push(\"hongkong-nude::\" + d + \"\/zh\/series\/hongkong-nude\");\nL.push(\"huang-fu::\" + d + \"\/zh\/series\/huang-fu\");\nL.push(\"iss::\" + d + \"\/zh\/series\/iss\");\nL.push(\"japanese-nude::\" + d + \"\/zh\/series\/japanese-nude\");\nL.push(\"jvid::\" + d + \"\/zh\/series\/jvid\");\nL.push(\"korean-nude::\" + d + \"\/zh\/series\/korean-nude\");\nL.push(\"leaked::\" + d + \"\/zh\/series\/leaked\");\nL.push(\"litu100::\" + d + \"\/zh\/series\/litu100\");\nL.push(\"loozy::\" + d + \"\/zh\/series\/loozy\");\nL.push(\"makemodel::\" + d + \"\/zh\/series\/makemodel\");\nL.push(\"metcn::\" + d + \"\/zh\/series\/metcn\");\nL.push(\"midnight-project::\" + d + \"\/zh\/series\/midnight-project\");\nL.push(\"missleg::\" + d + \"\/zh\/series\/missleg\");\nL.push(\"morning-sexy::\" + d + \"\/zh\/series\/morning-sexy\");\nL.push(\"other-photos::\" + d + \"\/zh\/series\/other-photos\");\nL.push(\"other-regions::\" + d + \"\/zh\/series\/other-regions\");\nL.push(\"other-studios::\" + d + \"\/zh\/series\/other-studios\");\nL.push(\"pandora::\" + d + \"\/zh\/series\/pandora\");\nL.push(\"pans::\" + d + \"\/zh\/series\/pans\");\nL.push(\"partycat::\" + d + \"\/zh\/series\/partycat\");\nL.push(\"pomelo::\" + d + \"\/zh\/series\/pomelo\");\nL.push(\"prestige::\" + d + \"\/zh\/series\/prestige\");\nL.push(\"pure-media::\" + d + \"\/zh\/series\/pure-media\");\nL.push(\"sivvi-studio::\" + d + \"\/zh\/series\/sivvi-studio\");\nL.push(\"sk-silk::\" + d + \"\/zh\/series\/sk-silk\");\nL.push(\"street-snap::\" + d + \"\/zh\/series\/street-snap\");\nL.push(\"super-pose-book::\" + d + \"\/zh\/series\/super-pose-book\");\nL.push(\"taiwan-nude::\" + d + \"\/zh\/series\/taiwan-nude\");\nL.push(\"toutiaogirls::\" + d + \"\/zh\/series\/toutiaogirls\");\nL.push(\"tpimage::\" + d + \"\/zh\/series\/tpimage\");\nL.push(\"tuigirl::\" + d + \"\/zh\/series\/tuigirl\");\nL.push(\"u238::\" + d + \"\/zh\/series\/u238\");\nL.push(\"ugirls::\" + d + \"\/zh\/series\/ugirls\");\nL.push(\"urabon::\" + d + \"\/zh\/series\/urabon\");\nL.push(\"weekly-post-digital-photo::\" + d + \"\/zh\/series\/weekly-post-digital-photo\");\nL.push(\"wind-sings::\" + d + \"\/zh\/series\/wind-sings\");\nL.push(\"wuji-works::\" + d + \"\/zh\/series\/wuji-works\");\nL.push(\"x-city::\" + d + \"\/zh\/series\/x-city\");\nL.push(\"xing-se::\" + d + \"\/zh\/series\/xing-se\");\nL.push(\"youmei::\" + d + \"\/zh\/series\/youmei\");\nL.push(\"youmi::\" + d + \"\/zh\/series\/youmi\");\nL.join('\\n');",
    "sourceComment": "MissKon.Us 亚洲写真图库订阅源 (LT版+E版双兼容)\n· 发现页: 最新图集 + 62个系列分类\n· 搜索: 站内搜索\n· 正文: 自动翻页收集全部图片\n· 无需登录; 登录面板提供发布页线路管理\n· ⚠站点限频60req\/min, 请勿高频刷新",
    "sourceGroup": "写真",
    "sourceIcon": "https:\/\/misskon.us\/favicon.svg",
    "sourceName": "MissKon写真图库",
    "sourceUrl": "https:\/\/misskon.us\/zh\/",
    "type": 0
}
广告