晋江文学 精确搜索

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": ""
}
广告