晋江文学 精确搜索
https://m.jjwxc.net/assort
分享者: guaner001125 (317)发布时间: 2024/11/03
该用户很懒,什么介绍也没有写!
{ "articleStyle": 0, "customOrder": 28, "enableJs": true, "enabled": true, "enabledCookieJar": true, "header": "{\n\t\"referer\":\"http:\/\/android.jjwxc.net\/?v=357\",\n\t\"versionCode\":\"357\",\n\t\"versiontype\":\"reading\",\n \"User-Agent\": \"Dalvik\/2.1.0\"\n}", "injectJs": "function gbkToUtf8(gbkEncodedString) {\n \/\/ 去除 % 符号\n let hexString = gbkEncodedString.replace(\/%\/g, '');\n\n \/\/ 将十六进制字符串转换为字节数组\n let byteArray = new Uint8Array(hexString.match(\/[\\da-f]{2}\/gi).map(function (h) {\n return parseInt(h, 16);\n }));\n\n \/\/ 使用 TextDecoder 以 GBK 解码为字符串\n let decoder = new TextDecoder('gbk');\n let decodedString = decoder.decode(byteArray);\n\n \/\/ 使用 TextEncoder 编码为 UTF-8\n let encoder = new TextEncoder();\n return encoder.encode(decodedString).reduce((str, byte) => str + '%' + byte.toString(16).padStart(2, '0'), '');\n}\n\nif(\/fw\/.test(window.location.href)&&!\/getSearchForKeyWords\/.test(window.location.href)){\n\t\n\tlet url = window.location.href;\n\turl = url.replace(\/([a-z]{2,})\\d+=(\\d+)\/g,'$1=$2').replace(\/word\/,'Word');\nlet queryString = url.split('?')[1];\nlet params = queryString.split('&');\nlet uniqueParams = {};\nfor (let param of params) {\n let [key, value] = param.split('=');\n \n if(key==\"searchkeyWords\" && value!=\"\"){\n \tvalue = gbkToUtf8(value)\n \t}\n \tif(\/type\/.test(key)){\n \t\tkey = key.replace(\/type\/,'Type')\n \t\t}\n if (!uniqueParams[key]) {\n uniqueParams[key] = value;\n } else {\n uniqueParams[key] += `,${value}`;\n }\n}\n\nlet newQueryString = Object.entries(uniqueParams).map(([key, value]) => `${key}=${value}`).join('&');\nlet newUrl = `https:\/\/app.jjwxc.org\/search\/getSearchForKeyWords?${newQueryString}&limit=20&offset=0`;\nwindow.location.href = newUrl\n\n\t}\n\t\n\tif(\/getSearchForKeyWords\/.test(window.location.href)){\n\t\tvar sourceCode = document.documentElement.innerHTML;\nsourceCode = sourceCode.match(\/>(\\{[\\s\\S]+\\})<\/)[1];\njsonData = JSON.parse(sourceCode);\ndocument.documentElement.innerHTML = `<div><button id=\"backToTop\">返回顶部<\/button><button id=\"Next\" class=\"next\">下一页<\/button><\/div><div class=\"pages\">\n<span>共${jsonData.total_page}页<\/span> 跳转至<input class=\"page\" style=\"width: 50px;\"><\/input>页 <button class=\"go\">go<\/button> <button class=\"prev\">上一页<\/button> 当前第<span id=\"currentPage\">1<\/span>页\n<\/div><br>\n<div class=\"center\" style=\"text-align: center;\">按 <select name=\"sortType\" id=\"orderstr\">\n <option value=\"2\">积分<\/option>\n <option value=\"1\">最近更新<\/option>\n <option value=\"3\">最新发表<\/option>\n <option value=\"5\">字数<\/option>\n <option value=\"4\">收藏数<\/option>\n <option value=\"10\">完结高分<\/option>\n <\/select> 排序<span style=\"margin: 0 10px;\"> | <\/span>\n 只显示 <select name=\"isfinish\" id=\"isfinish\">\n <option value=\"0\">无限制<\/option>\n <option value=\"1\">连载<\/option>\n <option value=\"2\">完结<\/option>\n <\/select>\n <\/div><br>`;\n \nvar sortTypeSelect = document.getElementById(\"orderstr\");\n var isFinishSelect = document.getElementById(\"isfinish\");\n \nsortTypeSelect.onchange = function () {\n location.href = location.href.replace(\/&sortType=\\d+\/g, '') + '&sortType=' + this.value;\n };\n \n isFinishSelect.onchange = function () {\n location.href = location.href.replace(\/&isfinish=\\d+\/g, '') + '&isfinish=' + this.value;\n };\n \n \/\/ 获取当前 URL 中的参数\n var urlParams = new URLSearchParams(window.location.search);\n\n \/\/ 根据 sortType 参数的值设置相应的选项\n var sortTypeValue = urlParams.get('sortType');\n if (sortTypeValue) {\n for (var i = 0; i < sortTypeSelect.options.length; i++) {\n if (sortTypeSelect.options[i].value === sortTypeValue) {\n sortTypeSelect.selectedIndex = i;\n break;\n }\n }\n }\n\n \/\/ 根据 isFinish 参数的值设置相应的选项\n var isFinishValue = urlParams.get('isfinish');\n if (isFinishValue) {\n for (var j = 0; j < isFinishSelect.options.length; j++) {\n if (isFinishSelect.options[j].value === isFinishValue) {\n isFinishSelect.selectedIndex = j;\n break;\n }\n }\n }\n \n \/\/返回顶部 \ndocument.getElementById('backToTop').addEventListener('click', function () {\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n });\n\n\/\/创建书籍列表\nfunction createBookElements(data) {\n var bookContainer = document.createElement('div');\n bookContainer.classList.add('book-container');\n\n data.items.forEach(item => {\n var bookDiv = document.createElement('div');\n bookDiv.classList.add('book');\n\n var bookDesDiv = document.createElement('div');\n bookDesDiv.classList.add('bookdes');\n\n var picDiv = document.createElement('div');\n picDiv.classList.add('pic');\n\n var img = document.createElement('img');\n img.src = item.cover;\n img.setAttribute('referrerpolicy', 'no-referrer');\n picDiv.appendChild(img);\n\n var detailsDiv = document.createElement('div');\n detailsDiv.classList.add('details');\n\n var bookNameP = document.createElement('p');\n bookNameP.classList.add('bookname');\n\n var nameSpan = document.createElement('span');\n nameSpan.classList.add('name');\n let novelid = \"https:\/\/m.jjwxc.net\/book2\/\"+item.novelid;\n var link = document.createElement('a');\n link.href = novelid;\n link.textContent = item.novelname;\n nameSpan.appendChild(link);\n\n bookNameP.appendChild(nameSpan);\n bookNameP.innerHTML += '<br>';\n\n var authorSpan = document.createElement('span');\n authorSpan.classList.add('author');\n authorSpan.textContent = '——' + item.authorname;\n bookNameP.appendChild(authorSpan);\n\n var tagP = document.createElement('p');\n tagP.classList.add('tag');\n\n var novelStepName = item.novelstep === '2'? '<span style=\"color:red\">已完结<\/span>' : '<span style=\"color:blue\">连载中<\/span>';\n tagP.innerHTML = \"⭐️ \"+item.novelSizeformat + '字•' + novelStepName + '<br><br>📖 ' + item.novelintroshort +'<br><br>🔖 '+ item.novelClass+'<br><br>🏷 ' +'<span style=\"color:green\">'+ item.tags+'<\/span>';\n\n detailsDiv.appendChild(bookNameP);\n detailsDiv.appendChild(tagP);\n\n bookDesDiv.appendChild(picDiv);\n bookDesDiv.appendChild(detailsDiv);\n\n bookDiv.appendChild(bookDesDiv);\n bookContainer.appendChild(bookDiv);\n });\n\n document.body.appendChild(bookContainer);\n }\n\n createBookElements(jsonData);\n var bookElements = document.getElementsByClassName('book');\n\n for (var i = 0; i < bookElements.length - 1; i++) {\n var hr = document.createElement('hr');\n bookElements[i].parentNode.insertBefore(hr, bookElements[i].nextSibling);\n }\n \n \/\/ 创建一个 <style> 元素\nvar style = document.createElement('style');\n\n\/\/ 设置修改后的样式文本内容\nstyle.innerHTML = `\na:link {color:#415E44;}\na:visited{color:#8EB28B}\nbutton,select,input{\n\t\tbackground:#E9F5F3;\n\t\tcolor:green;\n\t\tfont-weight: bold;\n\t\tborder-radius: 15px;\n\t\tborder:0px solid #000;\n\t\tpadding: 5px 10px;\n\t\tbox-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n\t\t}\n#backToTop,#Next {\n position: fixed;\n text-align: center;\n text-decoration: none;\n display: inline-block;\n font-size: 16px;\n z-index:99\n }\n #backToTop{\n \tbottom: 20px;\n right: 20px;\n \t}\n \t#Next{\n \t\tbottom: 60px;\n right: 20px;\n \t\t}\n.bookdes{\n\tdisplay: flex;\n\tflex-direction:row;\n\tmargin:5px;\n\twidth:100%;\n\tposition: relative;\n\t}\n.book{\n\twidth:100%;\n\tdisplay: flex;\n\tflex-direction:column;\n\talign-items:flex-start;\n\tmargin-bottom:8px;\n\t\n\t}\n.pic{\n\twidth:25vw;\n\tmargin-right:20px;\n\tmargin-top:10px\n\t}\n.pic img{\n\tboder:1px solid #C4C4C4;\n\tborder-radius:5px;\n box-shadow: 1px 2px 2px black;\n\twidth:97%;\n\theight:auto;\n\t}\n.details{\n\twidth:72vw;\n\tmargin-left:20px;\n\t}\n\n.name{\n\tfont-size:20px;\n\tcolor:#000;\n\t}\n.author{\n\t\n\tfont-size:15px;\n\tdisplay:inline-block;\n\tposition:absolute;\n\tright:8px;\n\t}\n\t\n.tag{\n\t\n\tfont-size:12px;\n\tmargin-top:-10px;\n\t}\n`;\n\n\/\/ 将 <style> 元素添加到文档的 <head> 部分\ndocument.head.appendChild(style);\n\n\/\/ 获取页面元素\n var pageInput = document.querySelector('.page');\n var goButton = document.querySelector('.go');\n var prevButton = document.querySelector('.prev');\n var nextButton = document.querySelector('.next');\n var currentPageSpan = document.getElementById('currentPage');\n \n \/\/ 定义跳转函数\n function jumpToPage() {\n \/\/ 获取当前 URL\n let currentUrl = new URL(window.location.href);\n\n \/\/ 获取输入的页码\n let page = parseInt(pageInput.value);\n \n \/\/ 计算 offset 值\n let offset = (page - 1) * 20;\n\n \/\/ 更新 URL 中的 offset 参数\n currentUrl.searchParams.set('offset', offset);\n\n \/\/ 跳转至新的 URL\n window.location.href = currentUrl.toString();\n updateCurrentPage(page);\n }\n\n \/\/ 上一页按钮点击事件\n prevButton.addEventListener('click', function () {\n \/\/ 获取当前 URL\n let currentUrl = new URL(window.location.href);\n\n \/\/ 获取当前的 offset 值\n let currentOffset = parseInt(currentUrl.searchParams.get('offset'));\n\n \/\/ 计算新的 offset 值(减少 20)\n let newOffset = Math.max(0, currentOffset - 20);\n\n \/\/ 更新 URL 中的 offset 参数\n currentUrl.searchParams.set('offset', newOffset);\n\n \/\/ 跳转至新的 URL\n window.location.href = currentUrl.toString();\n updateCurrentPage(getCurrentPage(newOffset));\n });\n\n \/\/ 下一页按钮点击事件\n nextButton.addEventListener('click', function () {\n \/\/ 获取当前 URL\n let currentUrl = new URL(window.location.href);\n \n \/\/ 获取当前的 offset 值\n let currentOffset = parseInt(currentUrl.searchParams.get('offset'));\n\n \/\/ 计算新的 offset 值(增加 20)\n let newOffset = currentOffset + 20;\n\n \/\/ 更新 URL 中的 offset 参数\n currentUrl.searchParams.set('offset', newOffset);\n\n \/\/ 跳转至新的 URL\n window.location.href = currentUrl.toString();\n updateCurrentPage(getCurrentPage(newOffset));\n });\n\n \/\/ go 按钮点击事件\n goButton.addEventListener('click', jumpToPage);\n \/\/ 根据 offset 值计算当前页码\n function getCurrentPage(offset) {\n return Math.floor(offset \/ 20) + 1;\n }\n\n \/\/ 更新当前页码的显示\n function updateCurrentPage(page) {\n currentPageSpan.textContent = page;\n }\n\n \/\/ 初始时获取当前 offset 值并计算并显示当前页码\n let currentUrl = new URL(window.location.href);\n let currentOffset = parseInt(currentUrl.searchParams.get('offset'));\n updateCurrentPage(getCurrentPage(currentOffset));\n\t\t}\n\t\n\t\n\t\n\/\/ 是书籍详情页时\nif( \/m\\.jjwxc\\.net\\\/book2\\\/\\d+\/.test(window.location.href)){\ndocument.getElementById(\"app\").remove();\n\n\/\/ 获取书籍链接\n\t\tbookid = String(window.location.href).replace(\/^.*\\\/\/,'');\n\t\tbooksrc = \"http:\/\/app-cdn.jjwxc.net\/androidapi\/novelbasicinfo?novelId=\"+bookid;\n\t\t\nbooksrc = `legado:\/\/import\/addToBookshelf?src=${encodeURIComponent(booksrc)},{\"origin\":\"https:\/\/m.jjwxc.net\/channel\/\"}`;\n\t\n\t\t\/\/获取书籍名称\ntitle = document.querySelector(\".big.o\").innerText.replace(\/首页>\/,'');\n\n\/\/获取作者名称\nauthor = document.querySelector(\".authorname-content a\").innerText;\n\n\/\/跳转作者url[可省略]\ndocument.querySelector(\".authorname-content a\").href;\n\n\/\/create(搜索的内容,\"bookName or bookAuthor\",距离顶部距离,[跳转其他url])\n\ncreate(title,\"addBookshelf\",14,booksrc);\ncreate(title,\"bookName\",18)\ncreate(author,\"bookAuthor\",22)\n\n\n function create(name,type,top,url){\n \t type = type+\"=\"+name;\n \t url = url!=undefined?url+\"#\"+type:\"\";\n \t \n let \ttypebutton;\n if(\/bookName\/.test(type)){\n \t typebutton=\"搜索书名\"\n \t}else if(\/bookAuthor\/.test(type)){\n \t\t typebutton=\"搜索作者\"\n \t}else{\n \t\t\t typebutton=\"加入书架\"\n \t}\n \n \tlet Url = location.search!=\"\"?location.search.replace(\/&*book[AN].*?=.*\/,'')+\"&\"+type:window.location.pathname+\"?\"+type;\n \turl = url!=\"\"?url:Url;\n \t\n \tA = document.createElement(\"a\");\n\t\t A.href =url.replace(\/#addBookshelf.*\/,'')\n\t\t \n\t\tA.innerHTML = `<button style=\"outline:none; position:fixed; top:${top}%; right:7%; z-index:999; border-radius:5px; color:#166188;background:#fff;padding:4px;border:1px solid #000\"><b>${typebutton}<\/b><\/button>`;\n\t\t\n \tdocument.body.appendChild(A);\n \t}\t\n\t}", "lastUpdateTime": 0, "loadWithBaseUrl": true, "ruleArticles": "", "shouldOverrideUrlLoading": "if(\/[\\?#&]book[AN]\/.test(url)){\n\ttitle = url.match(\/[\\?#&]book[AN].+?=(.*)\/)[1];\n\tURLDecoder = Packages.java.net.URLDecoder;\n\tgb2312Str = URLDecoder.decode(title,\"gbk\");\n utf8Str = URLDecoder.decode(title,\"utf-8\");\n\t result = gb2312Str.length() >= utf8Str.length();\n\t title = result?decodeURI(title):gb2312Str;\n\t java.searchBook(title)\n\t}", "singleUrl": true, "sourceComment": "", "sourceIcon": "https:\/\/m-static.jjwxc.net\/images\/wap\/logo.png", "sourceName": "晋江文学\n精确搜索", "sourceUrl": "https:\/\/m.jjwxc.net\/assort", "style": "" }