猕蛙

https://www.manwaku.com

SH869 (2786)09/13 16:46

🎨🔞猕蛙

修复规则

❗免责声明:  

本工具/代码/内容仅供学习交流使用,严禁用于任何非法用途。使用者应严格遵守所在国家或地区的法律法规,任何因滥用或违规使用导致的后果均与开发者/提供者无关,责任自负❗

二维码导入
{
    "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": 18,
    "enabled": true,
    "enabledCookieJar": true,
    "enabledExplore": true,
    "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 sort = [\n    [\"更新\", 0],\n    [\"新作\", 1], \n    [\"热门\", 3],\n    [\"畅销\", 2],\n    [\"收藏\", 4]\n];\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.45\n        }\n    });\n};\n \n\n\/\/ 生成分类\nsort.forEach(so => {\n    result.push({\n        title: so[0],\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[1]);\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": "1757753206298",
    "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 url = baseUrl.replace(\/\\\/+$\/, '').replace(\/[^\\w.:\/-]\/g, '');\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 body = JSON.stringify({\n        username: randomUsername, \n        password: randomPassword, \n        email: randomEmail,\n        nickname: randomNickname\n    });\n    \n    java.log(\"尝试注册: \" + body);\n    const response = java.post(\n    \t`${url}\/api\/user\/register`,\n    \t body, \n    {\"Content-Type\": \"application\/json\", \"x-requested-with\": \"XMLHttpRequest\"});\n    \n    const result = JSON.parse(response.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    }\n    \n    throw Error(result.msg || \"注册失败\");\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\t    const url = baseUrl.replace(\/\\\/+$\/, '').replace(\/[^\\w.:\/-]\/g, '');\n    const user = source.getLoginInfoMap();\n    \n    const response = java.post(\n    \t`${url}\/api\/user\/login`, \n        JSON.stringify({username: user.get(\"用户名\"), password: user.get(\"密码\")}),\n        {\"Content-Type\": \"application\/json\", \"x-requested-with\": \"XMLHttpRequest\"}\n    );\n    \n    const result = JSON.parse(response.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    }\n    \n    throw Error(result.msg || \"登录失败\");\n}",
    "respondTime": 4846,
    "ruleBookInfo": {
        "author": "$.data.author",
        "coverUrl": "$.data.cover",
        "intro": "$.data.intro",
        "kind": "$.data.tags",
        "name": "$.data.title",
        "tocUrl": "\/api\/comic\/chapter?comicId={$.data.id}&page=1&pageSize=20"
    },
    "ruleContent": {
        "content": "@js:\nvar src\nimg=JSON.parse(src);\nims=img.data.images;\nims.map($=>`<img src=\"${$.url}\">`).join(\"\\n\")",
        "imageStyle": "FULL",
        "nextContentUrl": "@js:\nvar ra;\nif (typeof result==='string') {\n    ra=result;\n} else {\n    ra=JSON.stringify(result || {});\n}\nvar rta=JSON.parse(ra);\npe=rta.data?.pagination?.page_size;\ntl=rta.data?.pagination?.total;\ntes=Math.ceil(tl\/pe);\nvar pls=[];\nif (tes>1) {\n    for (var i=2; i<=tes; i++) {\n        pls.push(baseUrl.replace(\/page=\\d+\/, `page=${i}`));\n    }\n}\npls;"
    },
    "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}}",
        "checkKeyWord": "[Pixiv] Nyako (87118066) part.3 (AI)",
        "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 ra;\nif (typeof result==='string') {\n    ra=result;\n} else {\n    ra=JSON.stringify(result || {});\n}\nvar rta=JSON.parse(ra);\ntl=rta.pagination?.total;\npe=rta.pagination?.size;\ntes=Math.ceil(tl\/pe);\nvar pls=[];\nif (tes>1) {\n    for (var i=2; i<=tes; i++) {\n        pls.push(baseUrl.replace(\/page=\\d+\/, `page=${i}`));\n    }\n}\npls;"
    },
    "searchUrl": "\/api\/search?keyword={{encodeURIComponent(key)}}&type=mh&page={{page}}&pageSize=20",
    "weight": 0
}
广告