标签 fqnovel 下的文章

1.打开docker desktop,打开 PowerShell 或 命令提示符(cmd),输入:

cd D:
cd D:\docker_project
mkdir fqnovel
cd fqnovel

2.部署fqnovel容器:

VPS版本:

docker run -d --name fqnovel --restart unless-stopped -p 9999:9999 ghcr.io/sffxzzp/fqnovel:latest

Windows版本,下面是docker-compose.yml内容:

services:

  fqnovel:
    image: ghcr.io/sffxzzp/fqnovel:latest
    container_name: fqnovel
    restart: unless-stopped
    ports:
      - "127.0.0.1:9999:9999"
    volumes:
      - ./data:/app/data
docker compose up -d

3.输入如图网址,测试是否搭建成功: 2026-02-09T10:02:53.png 也可以打开reqable,输入如图body,使用post方式测试是否搭建成功:2026-02-09T09:59:20.png

4.搭建成功后,创建如下json文件,打开书源(legado,阅读3.0),在书源管理中导入,注意替换具体的ip:

[
    {
        "bookSourceComment": "FQNovel-unidbg书源",
        "bookSourceGroup": "FQNovel",
        "bookSourceName": "FQNovel-unidbg",
        "bookSourceType": 0,
        "bookSourceUrl": "http://替换为搭建的IP:9999",
        "customOrder": 2,
        "enabled": true,
        "enabledCookieJar": true,
        "enabledExplore": true,
        "exploreUrl": "搜索::http://替换为搭建的IP:9999/api/fqsearch/books?query={{key}}&offset={{(page-1)*20}}&count=20",
        "header": "Content-Type: application/json\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
        "lastUpdateTime": 1754302417608,
        "respondTime": 180000,
        "ruleBookInfo": {
            "author": "$.data.author",
            "coverUrl": "$.data.coverUrl",
            "intro": "$.data.description",
            "kind": "$.data.category",
            "lastChapter": "$.data.lastChapterTitle",
            "name": "$.data.bookName",
            "tocUrl": "http://替换为搭建的IP:9999/api/fqsearch/directory/{{$.data.bookId}}\n<js>\njava.put(\"book_id\", java.getString(\"$.data.bookId\"))\nresult\n</js>",
            "wordCount": "$.data.wordNumber"
        },
        "ruleContent": {
            "content": "$.data.txtContent",
            "title": "$.data.title"
        },
        "ruleExplore": {
            "author": "$.author",
            "bookList": "$.data.books[*]",
            "bookUrl": "http://替换为搭建的IP:9999/api/fqnovel/book/{{$.bookId}}",
            "coverUrl": "$.coverUrl",
            "intro": "$.description",
            "kind": "$.category",
            "lastChapter": "$.lastChapterTitle",
            "name": "$.bookName",
            "wordCount": "$.wordCount"
        },
        "ruleSearch": {
            "author": "$.author",
            "bookList": "$.data.books[*]",
            "bookUrl": "http://替换为搭建的IP:9999/api/fqnovel/book/{{$.bookId}}",
            "coverUrl": "$.coverUrl",
            "intro": "$.description",
            "kind": "$.category",
            "lastChapter": "$.lastChapterTitle",
            "name": "$.bookName\n<js>\n// 第一页时保存searchId\nif (java.get('current_page') == null || java.get('current_page') == '1') {\n    var searchId = java.getString('$..searchId');\n    if (searchId) {\n        java.put('search_id', searchId);\n    }\n}\nresult\n</js>",
            "wordCount": "$.wordCount"
        },
        "ruleToc": {
            "chapterList": "$.data.item_data_list[*]",
            "chapterName": "$.title",
            "chapterUrl": "@js:\nsource.bookSourceUrl + `/api/fqnovel/chapter/${java.get(\"book_id\")}/${java.getString(\"$.item_id\")}`"
        },
        "searchUrl": "http://替换为搭建的IP:9999/api/fqsearch/books?query={{key}}&offset={{(page-1)*20}}&count=20&tabType=3@js:\nvar currentPage = java.get('current_page') || '1';\njava.put('current_page', (parseInt(currentPage) + 1).toString());\nvar searchId = java.get('search_id');\nif (searchId && currentPage != '1') {\n    result + '&searchId=' + encodeURIComponent(searchId);\n} else {\n    result;\n}",
        "weight": 0
    }
]