猕蛙

https://www.manwaku.com

SH869 (2786)3天前

随机邮箱,注册完刷新发现,刷新发现要手动
二维码导入
{
    "bookSourceComment": "'https:\/\/www.mhtmh.org\n'https:\/\/www.mhtmh.com\n'https:\/\/www.manwaku.com\n'https:\/\/www.mwmw.cc\n\/\/建议注册或登录使用\n\/\/随机注册也可以\n\/\/\t注册或登录后请重新刷新发现\n\/\/❗免责声明:  \n本工具\/代码\/内容仅供学习交流使用,严禁用于任何非法用途。使用者应严格遵守所在国家或地区的法律法规,任何因滥用或违规使用导致的后果均与开发者\/提供者无关,责任自负❗",
    "bookSourceGroup": "🎨🔞",
    "bookSourceName": "猕蛙",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/www.manwaku.com",
    "customOrder": 15,
    "enabled": false,
    "enabledCookieJar": true,
    "enabledExplore": false,
    "exploreUrl": "@js:\nvar result = [];\nvar baseUrl = \"\/api\/cate\";\n\n\/\/ 动态获取标签\nvar tags = [];\nvar doc = org.jsoup.Jsoup.parse(java.ajax(source.key + '\/cate'));\nvar tagContainers = doc.select('.tag-container').toArray();\nvar lastContainer = tagContainers[tagContainers.length - 1];\nvar tagElements = lastContainer.select('a');\n\n\/\/ 提取标签数据\nfor (var i = 0; i < tagElements.size(); i++) {\n    var element = tagElements.get(i);\n    tags.push({\n        value: element.attr('data-value'),\n        text: element.text()\n    });\n}\n\n\/\/ 排序选项\nconst sortOptions = [\n    { text: \"更新\", value: 0 },\n    { text: \"新作\", value: 1 },\n    { text: \"热门\", value: 3 },\n    { text: \"畅销\", value: 2 },\n    { text: \"收藏\", value: 4 }\n];\n\n\/\/ 创建分类项\nvar createCategory = (title, tag, sort) => {\n    const body = {\n        page: { page: \"{{page}}\", pageSize: 36 },\n        category: \"comic\",\n        sort: sort,\n        comic: { status: -1, day: 0, tag: tag },\n        video: { year: 0, typeId: 0, typeId1: 0, area: \"\", lang: \"\", status: -1, day: 0 },\n        novel: { status: -1, day: 0, sortId: 0 }\n    };\n    \n    \/\/ 构建URL,包含标签值\n    const url = baseUrl + (tag ? \"\/\" + tag : \"\") + \",\" + JSON.stringify({\n        body: JSON.stringify(body).replace('\"{{page}}\"', '{{page}}'),\n        method: \"POST\",\n        headers: {\n            \"X-Requested-With\": \"XMLHttpRequest\",\n            \"Content-Type\": \"application\/json\",\n            \"authHeader\": source.getLoginHeader() || \"\"\n        }\n    });\n    \n    result.push({\n        title: title,\n        url: url,\n        style: {\n            layout_flexGrow: 1,\n            layout_flexBasisPercent: 0.25\n        }\n    });\n};\n\n\/\/ 生成分类\nsortOptions.forEach(so => {\n    \/\/ 添加排序标题\n    result.push({\n        title: so.text,\n        url: \"\",\n        style: { \n            layout_flexGrow: 1, \n            layout_flexBasisPercent: 1 \n        }\n    });\n\n    \/\/ 添加该排序下的所有标签\n    tags.forEach(tag => {\n        createCategory(tag.text, tag.value, so.value);\n    });\n});\n\nJSON.stringify(result);",
    "header": "@js:\nJSON.stringify({\n\"cache-control\": \"no-cache\",\n\"Accept-Language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n\"sec-ch-ua\": \"Android\",\n\"User-Agent\": \"Mozilla\/5.0 (Linux; Android 10; K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/127.0.0.0 Mobile Safari\/537.36 EdgA\/127.0.0.0\"\n})",
    "lastUpdateTime": "1756052250572",
    "loginUi": "[\n    {\n    \t\"name\": \"用户名\", \n    \t\"type\": \"text\"\n    \t},\n    {\n    \t\"name\": \"密码\", \n    \"type\": \"text\"\n    },\n   {\n       \"name\": \"随机注册\",\n       \"type\": \"button\",\n       \"action\": \"register()\",\n       \"style\": {\n           \"layout_flexGrow\": 1,\n           \"layout_flexBasisPercent\": 0.25\n       }\n   }\n]",
    "loginUrl": "function register() {\n    const regUrl = `${baseUrl.replace(\/\\\/+$\/,'').replace(\/[^\\w.:\\\/-]\/g,'')}\/api\/user\/register`.replace(\/\\\/+\/gi, \"\/\");\n    \n    const randomUsername = generateRandomString(8); \/\/ 随机用户名\n    const randomPassword = generateRandomString(10); \/\/ 随机密码\n    \n    const domains = [\"qq.com\", \"gmail.com\", \"163.com\", \"outlook.com\"]; \/\/ 邮箱池\n    const randomDomain = domains[Math.floor(Math.random() * domains.length)]; \/\/ 随机选择邮箱域名:生成0到domains.length-1的随机索引\n    \n    const randomEmail = generateRealisticEmail(randomDomain); \/\/ 随机邮箱\n    const randomNickname = generateRandomString(6); \/\/ 随机昵称\n    \n    const registerParams = {\n        method: \"POST\",\n        headers: {\"Content-Type\": \"application\/json\", \"x-requested-with\": \"XMLHttpRequest\"},\n        body: JSON.stringify({\n        \tusername: randomUsername, password: randomPassword, \n        \temail: randomEmail,\n        \tnickname: randomNickname})\n    };\n    \n    java.log(\"尝试注册: \" + registerParams.body);\n    const response = java.post(regUrl, registerParams.body, registerParams.headers);\n    const body = response.body();\n    \n    try {\n        const result = JSON.parse(body);\n        if (result.code === 200) {\n            const token = result.data.token;\n            const authHeader = JSON.stringify({Authorization: `Bearer ${token}`, Cookie: `authToken=${token}`});\n            source.putLoginInfo(JSON.stringify({\"用户名\": randomUsername, \"密码\": randomPassword}));\n            java.longToast(\"注册成功\");\n            return source.putLoginHeader(authHeader);\n        } else {\n            throw Error(result.msg || \"注册失败\");\n        }\n    } catch (e) {\n        java.log(\"注册失败: \" + e.message + \", 响应: \" + body);\n        throw Error(\"注册失败\");\n    }\n}\n\nfunction generateRandomString(length, includeNumbers = true) {\n    const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n    let result = '';\n    for (let i = 0; i < length; i++) result += chars[Math.floor(Math.random() * chars.length)];\n    return result;\n}\n\nfunction generateRealisticEmail(domain) {\n    let username;\n    switch (domain) {\n        case \"qq.com\":\n            username = Math.floor(100000000 + Math.random() * 900000000).toString();\n            break;\n            \n        case \"163.com\":\n            username = generateRandomString(6 + Math.floor(Math.random() * 4), true);\n            if (Math.random() > 0.6) username = username.slice(0, 3) + '_' + username.slice(3);\n            break;\n            \n        case \"outlook.com\":\n            username = generateRandomString(6 + Math.floor(Math.random() * 4), true);\n            if (Math.random() > 0.7) username = username.slice(0, 3) + '.' + username.slice(3);\n            break;\n            \n        default:\n            username = generateRandomString(7 + Math.floor(Math.random() * 5), true);\n            break;\n    }\n    \n    return username + \"@\" + domain;\n}\n\nfunction login() {\n    const loginUrl = `${baseUrl.replace(\/\\\/+$\/,'').replace(\/[^\\w.:\\\/-]\/g,'')}\/api\/user\/login`.replace(\/\\\/+\/gi, \"\/\");\n    const user = source.getLoginInfoMap();\n    const loginParams = {\n        method: \"POST\",\n        headers: {\"Content-Type\": \"application\/json\", \"x-requested-with\": \"XMLHttpRequest\"},\n        body: JSON.stringify({username: user.get(\"用户名\"), password: user.get(\"密码\")})\n    };\n    \n    const response = java.post(loginUrl, loginParams.body, loginParams.headers);\n    const body = response.body();\n    \n    try {\n        const result = JSON.parse(body);\n        if (result.code === 200 && result.msg === \"Login successful\") {\n            const token = result.data.token;\n            return source.putLoginHeader(JSON.stringify({Authorization: `Bearer ${token}`, Cookie: `authToken=${token}`}));\n        } else {\n            throw Error(result.msg || \"登录失败\");\n        }\n    } catch (e) {\n        java.log(\"登录失败: \" + e.message);\n        throw Error(\"登录失败\");\n    }\n}",
    "respondTime": 180000,
    "ruleBookInfo": {
        "author": "$..author||$.data.author",
        "coverUrl": "$.data.cover||$..cover",
        "intro": "$..intro||$.data.intro",
        "kind": "$.data.tags||$..tags",
        "name": "$.data.title||$..title",
        "tocUrl": "\/api\/comic\/chapter?comicId={$..id}&page=1&pageSize=20"
    },
    "ruleContent": {
        "content": "@js:\nvar imgs = JSON.parse(src).data.images;\nimgs.map($=>`<img src=\"${$.url}\">`).join(\"\\n\")",
        "imageStyle": "FULL",
        "nextContentUrl": "@js:\nvar pageUrls = [];\ntry {\n  var rawData = result || \"{}\";\n  if (typeof rawData !== \"string\") rawData = JSON.stringify(rawData);\n  var Data = JSON.parse(rawData).data;\n  var pageSize = Data.pagination?.page_size;\n  var total = Data.pagination?.total;\n  var totalPages = Math.ceil(total \/ pageSize);\n\n  for (var i = 2; i <= totalPages; i++) {\n    pageUrls.push(baseUrl.replace(\/page=\\d+\/, `page=${i}`));\n  }\n} catch (e) {\n  java.log(\"解析错误: \" + e.message);\n  pageUrls = [];\n}\npageUrls;"
    },
    "ruleExplore": {
        "author": "$.author",
        "bookList": "$.data.list[*]",
        "bookUrl": "\/api{{$.url}}",
        "coverUrl": "$.pic",
        "intro": "$.intro",
        "kind": "$.tags",
        "name": "$.title"
    },
    "ruleSearch": {
        "author": "$.author",
        "bookList": "$.data.list[*]",
        "bookUrl": "\/api\/comic\/{{$.id}}",
        "coverUrl": "$.cover",
        "intro": "$.description",
        "kind": "$.tags",
        "name": "$.title"
    },
    "ruleToc": {
        "chapterList": "$.data[*]",
        "chapterName": "$.title",
        "chapterUrl": "\/api\/comic\/image\/{{$.id}}?page=1&page_size=60",
        "isVip": "$.isVip",
        "nextTocUrl": "@js:\nvar pageUrls = [];\n try {\n   var rawData = result || \"{}\";\n   if (typeof rawData !== \"string\") rawData = JSON.stringify(rawData);\n   var result = JSON.parse(rawData);\n   var total = result.pagination?.total;\n   var pageSize = result.pagination?.size;\n   var totalPages = Math.ceil(total \/ pageSize);\n   for (var i = 2; i <= totalPages; i++) {\n     pageUrls.push(baseUrl.replace(\/page=\\d+\/,`page=${i}`));\n   }\n } catch (e) {\n   java.log(\"解析错误: \" + e.message);\n   pageUrls = [];\n }\n pageUrls;"
    },
    "searchUrl": "\/api\/search?keyword={{key}}&type=mh&page={{page}}&pageSize=20",
    "weight": 0
}
广告