快速写源

data:;base64,MTIzNDU2Nzg5,{"type":"null"}

分享者: rga (8486)发布时间: 01/18 14:25

需要通过登录或设置源变量获取搜索地址,
设置后请刷新

/*
11.26by河鹅和
12.2 添加ua切换,添加复制按钮
12.3 添加订阅更新按钮,可通过登录点击检查更新按钮来更新本订阅源
添加多个更新地址,以防网络问题无法更新
12.8 小优化,并添加一个给搜索地址切换webview的按钮
12.11 添加两个搜索常用请求头按钮,小修复
12.13 优化样式
2025.01.15 添加生成书源,自动获取发现(可能不完整)
*/
二维码导入
{
    "articleStyle": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "injectJs": "\/\/快速写源by河鹅和_v25.0116.1127\nfunction $(selector) { return document.querySelector(selector); }\nfunction $$(selector) { return document.querySelectorAll(selector); }\nconst ua=$(\"#ua\").innerText.replace(\/当前(默认)?ua为:\\s\/i,\"\")\nconst [url,comment]=$(\"h3\").innerText.split(\/\\s\/)\nfunction copyText(s,n) {\n    var text = $(s)[n].replace(\/当前(默认)?UA为:\\s\/i,\"\")\n    var input = document.createElement(\"textarea\");\n    input.value = text;\n    document.body.appendChild(input);\n    input.select();\n    document.execCommand(\"copy\");\n    document.body.removeChild(input);\n    $(\"#success\").style.display = \"block\";\n    setTimeout(function(){\n                $(\"#success\").style.display = \"none\";\n          },500)\n}\nfunction setOption(e,key,value){\n    let surl = $(\"#searchUrl\")\n\tv=surl.value.split(\/,([\\w\\W]+)?\/,2)\n\tlet options= v[1]||\"{}\"\n\toptions=JSON.parse(options)\n    keys=key.split(\".\")\n    let tempObj=options\n    for (let i=0;i<keys.length-1;i++){\n        const currentKey = keys[i]\n        if (!tempObj[currentKey]){\n            tempObj[currentKey]={}\n        }\n        tempObj=tempObj[currentKey]\n    }\n    if (keys[keys.length-1] in tempObj){\n        e.innerHTML=e.innerHTML.replace(\"删除\",\"添加\")\n        for (let i=keys.length-1;i>=0;i--){\n            delete(tempObj[keys[i]])\n            if (!Object.keys(tempObj).length) {\n                tempObj=options\n                for (let j=0;j<i-1;j++){\n                    tempObj=tempObj[keys[j]]\n                }\n            }else{\n                break\n            }\n        }\n    }else{\n        e.innerHTML=e.innerHTML.replace(\"添加\",\"删除\")\n        tempObj[keys[keys.length-1]]=value\n    }\n    if (Object.keys(options).length) {\n\t\tv[1]=JSON.stringify(options,null,\"  \")\n\t\tsurl.value=v.join(\",\")\n\t\t}else{surl.value=v[0]}\n\t\tgetSource()\n}\nfunction getSource(show){\n\tif(show){\n\t\t$(\"#searchUrl\").rows=10\n\t\t$(\"#sourceWrap\").style.display=\"\"\n\t\t}\n\tsourcekey=atob(\"Ym9va1NvdXJjZVVybA==\")\n\tsource={\"bookSourceComment\":\"\/\/快速写源by河鹅和_v25.0116.1127\\n\/\/\"+comment,\"bookSourceName\":document.title,\"bookSourceType\":0,[sourcekey]:referer,\"customOrder\":0,\"enabled\":true,\"enabledCookieJar\":true,\"enabledExplore\":true,\"exploreUrl\":JSON.stringify(explore,null,2),\"header\":JSON.stringify({'User-Agent':ua},null,2),\"lastUpdateTime\":Date.now(),\"respondTime\":180000,\"ruleBookInfo\":{\"author\":\"[property=\\\"og:novel:author\\\"]@content\",\"coverUrl\":\"[property=\\\"og:image\\\"]@content\",\"intro\":\"[property=\\\"og:description\\\"]@content\",\"kind\":\"[property~=category|status|update_time]@content\",\"lastChapter\":\"[property~=las?test_chapter_name]@content\",\"name\":\"[property=\\\"og:novel:book_name\\\"]@content\",\"tocUrl\":\"text.目录@href\"},\"ruleContent\":{},\"ruleExplore\":{},\"ruleSearch\":{},\"ruleToc\":{},\"searchUrl\":$(\"#searchUrl\").value,\"weight\":0}\n\t$(\"#source\").value=JSON.stringify(source,null,2)\n\t}",
    "jsLib": "function getUrl(url){\n\tmUrl=Packages.java.net.URL(url)\n\treturn `${mUrl.protocol}:\/\/${mUrl.host}${mUrl.port>0?`:${mUrl.port}`:\"\"}`\n\t}\nfunction setOption(name,value){\n\tconst { java, source, cookie } = this\n\tv=String(source.getVariable())\n\tif (value!=undefined&&v!=\"\"){\n\t\tv=v.split(\/,([\\w\\W]+)?\/,2)\n\t\tlet options= v[1]||\"{}\"\n\t\toptions=JSON.parse(options)\n\t\toptions[name]=value\n\t\tv[1]=JSON.stringify(options)\n\t\tsource.setVariable(v.join(\",\"))\n\t\tjava.toast(\"\\n成功修改当前网址为\\n\"+source.getVariable())\n\t\t}\n\t}",
    "loadWithBaseUrl": true,
    "loginUi": "[\n    {\n        \"name\": \"请输入网址\",\n        \"type\": \"text\"\n    },\n    {\n        \"name\": \"  使用webview获取  \",\n        \"type\": \"button\",\n        \"action\": \"setOption(\\\"webView\\\",true)\"\n    },\n    {\n        \"name\": \"        保存确认        \",\n        \"type\": \"button\",\n        \"action\": \"source.setVariable(result.请输入网址);if (source.getVariable()==''){java.toast('成功清空源变量')}else{java.toast('\\\\n成功设置网站为\\\\n'+source.getVariable()+'\\\\n请刷新')}\"\n    },\n    {\n        \"name\": \"     设置为输入ua     \",\n        \"type\": \"button\",\n        \"action\": \"if (result.ua!=\\\"\\\"){setOption(\\\"headers\\\",{\\\"User-Agent\\\": result.ua})}\"\n    },\n    {\n        \"name\": \" 查看当前设定网址 \",\n        \"type\": \"button\",\n        \"action\": \"java.toast('\\\\n当前网址为'+source.getVariable())\"\n    },\n    {\n        \"name\": \"ua\",\n        \"type\": \"text\"\n    },\n    {\n        \"name\": \"设置为安卓8ua\",\n        \"type\": \"button\",\n        \"action\": \"setOption(\\\"headers\\\",{\\\"User-Agent\\\": \\\"Mozilla\/5.0 (Linux; Android 8.0.0; MI 5s Plus Build\/OPR1.170623.032; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/71.0.3578.99 Mobile Safari\/537.36\\\"})\"\n    },\n    {\n        \"name\": \"设置为电脑ua\",\n        \"type\": \"button\",\n        \"action\": \"setOption(\\\"headers\\\",{\\\"User-Agent\\\": \\\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/128.0.0.0 Safari\/537.36\\\"})\"\n    },\n    {\n        \"name\": \"更新0(推荐)\",\n        \"type\": \"button\",\n        \"action\": \"update(0)\"\n    },\n    {\n        \"name\": \"更新1(github.com)\",\n        \"type\": \"button\",\n        \"action\": \"update(1)\"\n    },\n    {\n        \"name\": \"更新2(github.io)\",\n        \"type\": \"button\",\n        \"action\": \"update(2)\"\n    },\n    {\n        \"name\": \"更新3(更新慢)\",\n        \"type\": \"button\",\n        \"action\": \"update(3)\"\n    },\n    {\n        \"name\": \"更新4(github加速)\",\n        \"type\": \"button\",\n        \"action\": \"update(4)\"\n    }\n]",
    "loginUrl": "function login(){\n\tinfo=JSON.parse(source.getLoginInfo())\n\tsource.setVariable(info.请输入网址||\"\")\n        if (source.getVariable()==''){\n        \tjava.toast('成功清空源变量')\n        \tPackages.java.lang.Thread.sleep(800)\n        }\n        else{\n        java.toast('\\n成功设置网站为\\n'+source.getVariable()+'\\n请刷新')\n        Packages.java.lang.Thread.sleep(800)\n        }\n\t}\nupdateUrls=[\n\"https:\/\/5tsv-github-io.pages.dev\",\n\"https:\/\/raw.githubusercontent.com\/5tsv\/5tsv.github.io\/refs\/heads\/main\",\n\"https:\/\/5tsv.github.io\",\n\"https:\/\/cdn.jsdelivr.net\/gh\/5tsv\/5tsv.github.io@master\",\n\"https:\/\/github.moeyy.xyz\/https:\/\/raw.githubusercontent.com\/5tsv\/5tsv.github.io\/refs\/heads\/main\"]\nfunction update(i){\n\ttemplate=`<iframe src=\"legado:\/\/import\/rssSource?src=${updateUrls[i]}\/dist\/quickGetSearchUrl.json\" hidden><\/iframe>`\n\tdataUrl=`data:text\/html;base64,${java.base64Encode(template)}`\n\tjava.toast(`\\n正在从${updateUrls[i]}\/dist\/quickGetSearchUrl.json获取更新`)\n\tjava.startBrowser(dataUrl,'')\n\t}",
    "ruleArticles": "<js>\nurl = source.getVariable()\nif (url==\"\"){java.toast(\"\\n可通过登录或设置源变量获取搜索地址\")}\nresultList=[]\nwebSrc=java.ajax(url)\nd = org.jsoup.Jsoup.parse(webSrc)\ntitle=d.select(\"title\").text()\njava.log(d)\nexplore=[]\nd.select(`a[href~=sort|list|rank|tag|shuku|fenlei|Soft|allvisit|paihang|quanben|gudian|lishi|dushi|wangyou|kehuan|yanqing|wuxia|xuanhuan|chuanyue|zhentan|kongbu|top|category|mulu]:not(a:matches(\\\\d+|下一页|登录|注册|More\\+))`).forEach(a=>{\n\turl=String(a.attr(\"href\")).replace(\/1(\\.html)?(\\\/)?$\/,`{{page}}$1$2`)\n\tif(!explore.find(e=>e.url==url)){\n\t\texplore.push({title:a.text(),url:url})\n\t\t}\n\t})\n\ncharset=webSrc.match(\/charset=\"?([^\"]+)\"\/)?String(webSrc.match(\/charset=\"?([^\"]+)\"\/)[1]).toUpperCase():\"\"\n\/\/charset = d.select(\"meta[charset]\").attr(\"charset\").toUpperCase()\nforms = d.select(\"form\")\nforms.forEach(form => {\n\t   java.log(form)\n    let action = form.attr(\"action\")\n    let method = form.attr(\"method\").toUpperCase()\n    formInner = org.jsoup.Jsoup.parse(form.html())\n    let names = formInner.select(\"[name]\")\n    let body = []\n    let searchUrl = []\n    let options = {}\n    names.forEach(n => {\n        let name = n.attr(\"name\")\n        let value = n.attr(\"value\") == \"\" ? `${\/(search)?key\/i.test(name) ? \"{{key}}\" : \"\"}` : n.attr(\"value\")\n        if (names.length == 1 || \/(输入|可搜)\/.test(value)||name.match(\/^(q|wd)$\/)||\/(search)?key(word)?\/i.test(name)) {\n            value = \"{{key}}\"\n        }\n        if (value == \"\" && n.select(\"option\").length > 0) {\n            value = n.select(\"option\")[0].attr(\"value\")\n        }\n        body.push(`${name}=${value}`)\n    })\n    body = body.join(\"&\")\n    java.log(body)\n    if (method == \"GET\"||method==\"\") {\n        searchUrl.push(`${action}?${body}`)\n    } else if (method == \"POST\") {\n        searchUrl.push(action)\n        options.body = body\n        options.method = method\n    }\n    if (!\/UTF-?8\/.test(charset) && charset != \"\") {\n        options.charset = charset\n    }\n    if (Object.keys(options).length) {\n        searchUrl.push(JSON.stringify(options, null, \"  \"))\n    }\n    result = searchUrl.join(\",\")\n    resultList.push({\"index\":String(source.getVariable()).replace(\/,.*\/,\"\")+\"\\n搜索地址\"+resultList.length,\"url\":result,title:title,explore:JSON.stringify(explore)})\n    java.log(result)\n})\n\/\/java.log(JSON.stringify(resultList))\nif (resultList.length==0){\n\tresultList.push({\"index\":String(source.getVariable()).replace(\/,.*\/,\"\")+\"\\n未找到搜索地址\",\"url\":\"\",title:title,explore:JSON.stringify(explore)})\n\tif(\/webview\/i.test(source.getVariable())){java.toast(\"未找到搜索地址\")}else if(source.getVariable()!=\"\"){java.toast(\"\\n请尝试切换为webview获取或切换UA\")}}\nresult=JSON.stringify(resultList)\n<\/js>\n$[*]",
    "ruleDescription": "<html>\n<head>\n<title>{{$.title}}<\/title>\n<script>\nreferer=\"{{getUrl(String(source.getVariable()).split(\/,([\\s\\S]+)?\/,2)[0])}}\"\nexplore={{$.explore}}\n<\/script>\n<\/head>\n<body>\n<p id=\"success\">复制成功!<\/p>\n<h3>{{$.index}}<\/h3>\n<h6 id=\"ua\">{{String(source.getVariable()).match(\/User-Agent\/)?\"当前UA为:<br\/>\"+JSON.parse(String(source.getVariable()).split(\/,([\\s\\S]+)?\/,2)[1]).headers['User-Agent']:\"当前默认UA为:<br\/>\"+(java.hexDecodeToString(java.ajax('data:;base64,\\{\\{java.base64Encode(java.getUserAgent())\\}\\},\\{\\\"type\\\":\\\"text\\\"\\}')))}}<\/h6>\n<button onclick=copyText(\"#ua\",\"innerText\")>点击复制UA<\/button>\n<button onclick=copyText(\"#searchUrl\",\"value\")>点击复制搜索地址<\/button>\n<button onclick=getSource(true)>生成书源<\/button>\n<br\/><br\/>\n<button onclick='setOption(this,\"headers.User-Agent\",$(\"#ua\").innerText.replace(\/当前(默认)?ua为:\\s\/i,\"\"))'>点击添加UA<\/button>\n<button onclick=setOption(this,\"webView\",true)>点击添加webView<\/button>\n<button onclick=setOption(this,\"headers.Referer\",referer)>添加Referer<\/button>\n<textarea id=\"searchUrl\" rows=30 >{{$.url}}<\/textarea>\n<br\/>\n<div id=\"sourceWrap\" style=\"display:none\">\n<button onclick=copyText(\"#source\",\"value\")>点击复制书源<\/button>\n<textarea id=\"source\" rows=50 ><\/textarea>\n<\/div>\n<\/body>\n<\/html>",
    "ruleImage": "{{'data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktYXJyb3ctcmlnaHQtY2lyY2xlLWZpbGwiIHZpZXdCb3g9IjAgMCAxNiAxNiI+CiAgPHBhdGggZD0iTTggMGE4IDggMCAxIDEgMCAxNkE4IDggMCAwIDEgOCAwTTQuNSA3LjVhLjUuNSAwIDAgMCAwIDFoNS43OTNsLTIuMTQ3IDIuMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhsMy0zYS41LjUgMCAwIDAgMC0uNzA4bC0zLTNhLjUuNSAwIDEgMC0uNzA4LjcwOEwxMC4yOTMgNy41eiIvPgo8L3N2Zz4='}}",
    "ruleLink": "$.index",
    "rulePubDate": "$.url",
    "ruleTitle": "$.index",
    "singleUrl": false,
    "sourceComment": "\/*\n11.26by河鹅和\n12.2 添加ua切换,添加复制按钮\n12.3 添加订阅更新按钮,可通过登录点击检查更新按钮来更新本订阅源\n添加多个更新地址,以防网络问题无法更新\n12.8 小优化,并添加一个给搜索地址切换webview的按钮\n12.11 添加两个搜索常用请求头按钮,小修复\n12.13 优化样式\n2025.01.15 添加生成书源,自动获取发现(可能不完整)\n*\/",
    "sourceIcon": "data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMzIiIHgyPSIzMiIgeTE9IjkuMDgzIiB5Mj0iNTQuNjc2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3ByZWFkTWV0aG9kPSJyZWZsZWN0Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMxYTZkZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjODIyZmYiLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik01MCw1NUgxNGMtMi43NTcsMC01LTIuMjQzLTUtNVYxNGMwLTIuNzU3LDIuMjQzLTUsNS01aDM2YzIuNzU3LDAsNSwyLjI0Myw1LDV2MzYgQzU1LDUyLjc1Nyw1Mi43NTcsNTUsNTAsNTV6IE0xNCwxMWMtMS42NTQsMC0zLDEuMzQ2LTMsM3YzNmMwLDEuNjU0LDEuMzQ2LDMsMywzaDM2YzEuNjU0LDAsMy0xLjM0NiwzLTNWMTRjMC0xLjY1NC0xLjM0Ni0zLTMtM0gxNCB6Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzMuNSIgeDI9IjMzLjUiIHkxPSIxMC40MzgiIHkyPSI1NS43NTIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzcHJlYWRNZXRob2Q9InJlZmxlY3QiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzFhNmRmZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2M4MjJmZiIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTQ3LDQ1LjU0NWwtOC4zODctOC4zODhDNDAuMTAzLDM1LjM0NCw0MSwzMy4wMjUsNDEsMzAuNUM0MSwyNC43MSwzNi4yOSwyMCwzMC41LDIwIFMyMCwyNC43MSwyMCwzMC41UzI0LjcxLDQxLDMwLjUsNDFjMi41MjUsMCw0Ljg0NS0wLjg5Nyw2LjY1OC0yLjM4OEw0NS41NDUsNDdMNDcsNDUuNTQ1eiBNMzAuNSwzOWMtNC42ODcsMC04LjUtMy44MTMtOC41LTguNSBzMy44MTMtOC41LDguNS04LjVzOC41LDMuODEzLDguNSw4LjVTMzUuMTg3LDM5LDMwLjUsMzl6Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMzAuNSIgeDI9IjMwLjUiIHkxPSIyNCIgeTI9IjM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3ByZWFkTWV0aG9kPSJyZWZsZWN0Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2ZGM3ZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlNmFiZmYiLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGZpbGw9InVybCgjYykiIGQ9Ik0zMC41IDI0QTYuNSA2LjUgMCAxIDAgMzAuNSAzN0E2LjUgNi41IDAgMSAwIDMwLjUgMjRaIi8+PC9zdmc+",
    "sourceName": "快速写源",
    "sourceUrl": "data:;base64,MTIzNDU2Nzg5,{\"type\":\"null\"}",
    "style": "button{\n\tmargin:5px;\n\toutline:none;\n\theight:30px;\n\tbox-shadow:2px 1px #CFD8DC;\n\tbackground:#fff;\n\tborder:1px solid green;\n\tborder-radius:6px;\n\t}\t\nbutton:active{\n\tbackground:#C8E6C9\n\t}\n#success{\n\ttext-align:center;\n\tborder:1px solid green;\n\tposition:fixed;\n\tleft:35%;\n\twidth:25%;\n\tbackground:#fff;\n\tborder-radius:5px;\n\tdisplay:none;\n\ttop:2px;\n\tbox-shadow:2px 1px 3px #CFD8DC;\n\t}\ntextarea{\n\tbackground-color:GhostWhite;\n\tborder:1px solid black;\n\twidth:100%\n\t}"
}
广告