QQ浏览器-完整分类-v7
https://so.html5.qq.com/?legado_source=qqbrowser_categories_v7
hcj1014 (13990)06/20 21:20
按 QQ 浏览器小说分类表重新整理发现页。
发现页扩充至 22 个分类:
男频:玄幻、都市、仙侠、奇幻、历史、军事、科幻、悬疑、游戏、武侠。
女频:现代言情、古代言情、悬疑、仙侠奇缘、玄幻言情、浪漫青春、科幻空间、游戏竞技。
其他:轻小说、现实、纯爱、短篇。
书籍分类改为显示“主分类·子分类+标签”,不再显示内部资源 ID。
修复第二页重复出现 QQ 浏览器聚合搜索结果的问题。
验证全部 22 个分类接口及分页可用。
v6 — 2026-06-20
合并两套搜索后端:
QQ 浏览器聚合搜索。
QQ 阅读正式书库搜索。
QQ 浏览器结果优先,随后追加 QQ 阅读结果。
按“书名+作者”自动去重。
{
"bookSourceComment": "QQ 浏览器小说接口书源 v7;发现页按 QQ 浏览器分类表重排为 22 类,并补齐女频扩展、纯爱与短篇。搜索合并 QQ 浏览器和 QQ 阅读并自动去重。",
"bookSourceGroup": "QQ浏览器",
"bookSourceName": "QQ浏览器-完整分类-v7",
"bookSourceType": 0,
"bookSourceUrl": "https:\/\/so.html5.qq.com\/?legado_source=qqbrowser_categories_v7",
"customOrder": 0,
"enabled": true,
"enabledCookieJar": false,
"enabledExplore": true,
"exploreUrl": "[{\"title\":\"男频·玄幻\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1501&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·都市\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1505&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·仙侠\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1504&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·奇幻\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1502&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·历史\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1506&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·军事\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1507&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·科幻\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1509&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·悬疑\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1508&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·游戏\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1510&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"男频·武侠\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1503&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"轻小说\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1512&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"现实\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1499&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·现代言情\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1524&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·古代言情\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1523&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·悬疑\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1518&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·仙侠奇缘\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1517&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·玄幻言情\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1516&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·浪漫青春\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1522&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·科幻空间\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1519&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"女频·游戏竞技\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1520&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"纯爱\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1707&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}},{\"title\":\"短篇\",\"url\":\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/rank\/list?groupid=1515&start={{(page-1)*20}}&count=20&sub=\",\"style\":{\"layout_flexGrow\":1}}]",
"header": "{\n \"User-Agent\": \"Mozilla\/5.0 (Linux; U; Android 13; zh-cn; V2183A Build\/TP1A.220624.014) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/89.0.4389.72 MQQBrowser\/13.4 Mobile Safari\/537.36 COVC\/046223\",\n \"Referer\": \"https:\/\/novel.html5.qq.com\/\",\n \"Q-GUID\": \"0ee63838b72eb075f63e93ae0bc288cb\",\n \"QIMEI36\": \"8ff310843a87a71101958f5610001e316a11\"\n}",
"lastUpdateTime": "1781961659885",
"respondTime": 1000,
"ruleBookInfo": {
"author": "$.author",
"coverUrl": "$.picurl",
"init": "$.data.bookInfo",
"intro": "$.summary",
"kind": "{{$.subject}}·{{$.subtype}}\n{{$.tag##\\|##、}}",
"lastChapter": "$.lastSerialname",
"name": "$.resourceName",
"tocUrl": "https:\/\/novel.html5.qq.com\/qbread\/api\/book\/all-chapter?bookId={{$.resourceID}}",
"wordCount": "$.contentsize"
},
"ruleContent": {
"content": "@js:\n(function () {\n var json = JSON.parse(String(result));\n var blocks = json && json.data && json.data.Content;\n if (blocks && blocks.length) {\n var text = blocks[0].Content;\n if (Array.isArray(text)) return text.join(\"\\n\");\n return text == null ? \"\" : String(text);\n }\n return \"【QQ浏览器正文接口异常】\\n章节请求:\" + String(chapter.url) + \"\\n接口响应:\" + String(result);\n})()"
},
"ruleExplore": {
"author": "$.author",
"bookList": "$.rows[*]",
"bookUrl": "https:\/\/novel.html5.qq.com\/qbread\/api\/novel\/bookInfo?resourceId={{$.resourceID}}",
"coverUrl": "$.picurl",
"intro": "$.summary",
"kind": "{{$.subject}}·{{$.subtype}}\n{{$.tag##\\|##、}}",
"lastChapter": "$.lastSerialname",
"name": "$.resourceName",
"wordCount": "$.contentsize"
},
"ruleSearch": {
"author": "$.author",
"bookList": "$.books[*]",
"bookUrl": "$.bookUrl",
"coverUrl": "$.coverUrl",
"intro": "$.intro",
"kind": "$.kind",
"lastChapter": "$.lastChapter",
"name": "$.name",
"wordCount": "$.wordCount"
},
"ruleToc": {
"chapterList": "$.rows[*]",
"chapterName": "$.serialName",
"chapterUrl": "$.serialID\n@js:\nvar matched = String(baseUrl).match(\/[?&]bookId=([^&#]+)\/);\nvar bookId = matched ? decodeURIComponent(matched[1]) : String(book.kind);\nvar data = JSON.stringify({\n ContentAnchorBatch: [{\n BookID: bookId,\n ChapterSeqNo: [String(result)]\n }],\n Scene: \"chapter\"\n});\nvar option = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application\/json; charset=UTF-8\",\n \"Referer\": \"https:\/\/novel.html5.qq.com\/\"\n },\n body: data,\n retry: 2\n};\n\"https:\/\/novel.html5.qq.com\/be-api\/content\/ads-read,\" + JSON.stringify(option)"
},
"searchUrl": "https:\/\/so.html5.qq.com\/ajax\/real\/search_result?tabId=360&q={{key}},{\"bodyJs\":\"var browser = JSON.parse(String(result));\\nvar officialUrl = \\\"https:\/\/newopensearch.reader.qq.com\/wechat?keyword=\\\" + encodeURIComponent(String(key)) + \\\"&start=\\\" + ((page - 1) * 20) + \\\"&end=\\\" + (page * 20 - 1);\\nvar officialText = java.ajax(officialUrl);\\nvar official = {};\\ntry { official = JSON.parse(String(officialText)); } catch (e) { official = {}; }\\nvar books = [];\\nvar seen = {};\\nfunction addBook(item) {\\n var mark = String(item.name || \\\"\\\").replace(\/\\\\s+\/g, \\\"\\\").toLowerCase() + \\\"|\\\" + String(item.author || \\\"\\\").replace(\/\\\\s+\/g, \\\"\\\").toLowerCase();\\n if (!item.name || seen[mark]) return;\\n seen[mark] = true;\\n books.push(item);\\n}\\nfunction officialKind(raw) {\\n var parts = String(raw || \\\"\\\").split(\\\",\\\");\\n var names = [];\\n var used = {};\\n for (var n = 0; n < parts.length; n++) {\\n var bits = parts[n].split(\\\":\\\");\\n var label = bits.length > 1 ? bits[1] : \\\"\\\";\\n if (label && label != \\\"小说\\\" && !used[label]) { used[label] = true; names.push(label); }\\n }\\n return names.join(\\\"·\\\");\\n}\\nvar states = page == 1 && browser && browser.data && browser.data.state ? browser.data.state : [];\\nfor (var i = 0; i < states.length; i++) {\\n var items = states[i].items || [];\\n for (var j = 0; j < items.length; j++) {\\n var b = items[j];\\n var resourceId = String(b.docId || \\\"\\\").replace(\/^.*_\/, \\\"\\\");\\n addBook({name:b.title, author:b.author, coverUrl:b.cover_url, intro:b.abstract, kind:String(b.tag_views || \\\"\\\").replace(\/\\\\s+\/g, \\\"·\\\"), resourceId:resourceId, lastChapter:\\\"\\\", wordCount:\\\"\\\", bookUrl:\\\"https:\/\/novel.html5.qq.com\/qbread\/api\/novel\/bookInfo?resourceId=\\\" + resourceId, searchFrom:\\\"QQ浏览器\\\"});\\n }\\n}\\nvar list = official && official.booklist ? official.booklist : [];\\nfor (var k = 0; k < list.length; k++) {\\n var o = list[k];\\n var bid = String(o.bid || \\\"0\\\");\\n var resourceId2 = String(1100000000 + parseInt(bid, 10));\\n var tail = parseInt(bid.slice(-3), 10);\\n var dir = tail < 10 ? bid.slice(-1) : (tail < 100 ? bid.slice(-2) : bid.slice(-3));\\n var cover = \\\"https:\/\/wfqqreader-1252317822.image.myqcloud.com\/cover\/\\\" + dir + \\\"\/\\\" + bid + \\\"\/b_\\\" + bid + \\\".jpg\\\";\\n addBook({name:o.title, author:o.author, coverUrl:cover, intro:o.intro, kind:officialKind(o.categoryInfoV4), resourceId:resourceId2, lastChapter:o.updateInfo, wordCount:o.totalWords, bookUrl:\\\"https:\/\/bookshelf.html5.qq.com\/qbread\/api\/novel\/intro-info?bookid=\\\" + resourceId2, searchFrom:\\\"QQ阅读\\\"});\\n}\\nJSON.stringify({books:books})\"}",
"weight": 0
}