API文档

/api/tags

获取标签列表,支持分页、搜索、别名查询等功能。

请求方式GET /api/tags
请求参数
参数类型必填说明
idint标签ID,精确查找单个标签
aliasstring标签别名,精确查找单个标签
hotint获取热门标签,指定数量
randomint获取随机标签,指定数量
novel_titlestring根据小说标题获取相关标签
fieldsstring指定返回字段,逗号分隔,如 id,name,alias
返回字段
字段类型说明
idint标签ID
namestring标签名称
aliasstring标签别名
abbrstring拼音首字母缩写
descriptionstring标签描述
novel_countint关联小说数量
is_publicint是否公开(1=公开,0=非公开)
标签列表返回结构
[
  {
    "id": 1,
    "name": "科幻",
    "alias": "sci-fi",
    "abbr": "kh",
    "description": "科学幻想类小说",
    "novel_count": 45
  },
  {
    "id": 2,
    "name": "玄幻",
    "alias": "xuanhuan",
    "abbr": "xh",
    "description": "玄幻修仙类小说",
    "novel_count": 32
  }
]
单个标签返回结构(通过id或alias查询)
{
  "id": 1,
  "name": "科幻",
  "alias": "sci-fi",
  "abbr": "kh",
  "description": "科学幻想类小说",
  "novel_count": 45,
  "is_public": 1
}
示例
  • 获取所有标签:
    GET /api/tags
  • 通过ID查找标签:
    GET /api/tags?id=1
  • 通过别名查找标签:
    GET /api/tags?alias=sci-fi
  • 获取热门标签:
    GET /api/tags?hot=10
  • 获取随机标签:
    GET /api/tags?random=5
  • 根据小说获取标签:
    GET /api/tags?novel_title=三体
  • 只返回指定字段:
    GET /api/tags?fields=id,name,alias
注意事项
  • 默认只返回公开标签(is_public=1)。
  • 使用 idalias 参数时,返回单个标签对象而非数组。
  • 未登录用户查询非公开标签时会返回404。
  • novel_count 字段会自动计算每个标签关联的小说数量。
  • 使用 fields 参数可以只返回需要的字段,减少数据传输量。

/api/author

获取作家列表,支持分页、筛选和搜索功能。

请求方式GET /api/author
请求参数
参数类型必填说明
idint作者ID,精确查找单个作者
pen_namestring作者笔名,精确查找单个作者
randomint获取随机作者,指定数量(默认6)
deadstring筛选条件:1=已去世,0=在世,不传=全部
pageint页码,默认1
page_sizeint每页数量,默认24
sizeint每页数量(兼容参数,等同于page_size)
fieldsstring指定返回字段,逗号分隔,如 id,pen_name,avatar
查询模式:
单个查询:使用 idpen_name 参数,返回单个作者对象
列表查询:支持分页、筛选、随机等,返回作者数组和分页信息
字段过滤:使用 fields 参数可只返回需要的字段
返回字段
字段类型说明
idint作者ID
pen_namestring笔名
aliasstring别名/马甲
real_namestring本名
nationalitystring国籍
genderstring性别
ethnicitystring民族
ageint年龄
provincestring省份
identitystring身份/职业
signed_websitestring签约网站
achievementsstring主要成就
biostring个人简介
avatarobject头像对象,含 String(头像URL)和 Valid(是否有效)
is_deadbool是否已去世
is_publicbool是否公开
created_atstring创建时间(ISO8601)
updated_atstring更新时间(ISO8601)
列表查询返回示例
{
  "authors": [
    {
      "id": 1,
      "pen_name": "刘慈欣",
      "alias": "大刘",
      "real_name": "刘慈欣",
      "nationality": "中国",
      "gender": "男",
      "ethnicity": "汉族",
      "age": 60,
      "province": "山西",
      "identity": "作家、工程师",
      "signed_website": "起点中文网",
      "achievements": "雨果奖获得者",
      "bio": "中国科幻作家,代表作《三体》系列。",
      "avatar": {"String": "/avatar/liucixin.jpg", "Valid": true},
      "is_dead": false,
      "is_public": true,
      "created_at": "2023-01-01T00:00:00Z",
      "updated_at": "2024-06-07T12:00:00Z"
    }
  ],
  "total_authors": 156,
  "total_pages": 7,
  "page": 1,
  "page_size": 24
}
单个查询返回示例
{
  "authors": [
    {
      "id": 1,
      "pen_name": "刘慈欣",
      "alias": "大刘",
      "real_name": "刘慈欣",
      "nationality": "中国",
      "gender": "男",
      "ethnicity": "汉族",
      "age": 60,
      "province": "山西",
      "identity": "作家、工程师",
      "signed_website": "起点中文网",
      "achievements": "雨果奖获得者",
      "bio": "中国科幻作家,代表作《三体》系列。",
      "avatar": {"String": "/avatar/liucixin.jpg", "Valid": true},
      "is_dead": false,
      "is_public": true,
      "created_at": "2023-01-01T00:00:00Z",
      "updated_at": "2024-06-07T12:00:00Z"
    }
  ],
  "total_authors": 1,
  "total_pages": 1,
  "page": 1,
  "page_size": 1
}
字段过滤返回示例
{
  "authors": [
    {
      "id": 1,
      "pen_name": "刘慈欣",
      "avatar": "/avatar/liucixin.jpg"
    }
  ],
  "total_authors": 156,
  "total_pages": 156,
  "page": 1,
  "page_size": 1
}
请求示例
  • 获取所有作者(分页):
    GET /api/author?page=1&page_size=20
  • 通过ID查找作者:
    GET /api/author?id=1
  • 通过笔名查找作者:
    GET /api/author?pen_name=刘慈欣
  • 获取已去世作者:
    GET /api/author?dead=1&page=1&page_size=10
  • 获取在世作者:
    GET /api/author?dead=0&page=1&page_size=10
  • 获取随机作者:
    GET /api/author?random=6
  • 只返回指定字段:
    GET /api/author?fields=id,pen_name,avatar
注意事项
  • 使用 idpen_name 参数时,返回单个作者的包装格式。
  • avatar 字段为对象格式,包含 String(URL)和 Valid(是否有效)。
  • 使用 fields 参数时,avatar 字段会简化为字符串格式。
  • dead 参数支持字符串格式:"1""0"
  • sizepage_size 参数功能相同,推荐使用 page_size

/api/novel

获取小说列表或单本详情,支持多种筛选、字段定制和分页。

请求方式GET /api/novel
请求参数
参数类型必填说明
idint小说ID,返回单本详情,和分页参数互斥
titlestring小说标题,返回单本详情,和分页参数互斥
user_idint用户ID,返回该用户最近阅读小说(配合 fields=note 返回读书笔记)
pageint页码,默认1
sizeint每页数量,默认20,最大100
fieldsstring只返回指定字段,逗号分隔,如 fields=title,cover
excludestring排除指定字段,逗号分隔,如 exclude=summary
authorstring作家笔名筛选
author_idint作家ID筛选
tagstring标签别名筛选
keywordstring关键字模糊搜索
randomint/bool1为随机返回N本小说(配合size)
guestint以该作品ID为基础,优先推荐与其标签有重叠的小说
guest_titlestring以该作品标题为基础,优先推荐与其标签有重叠的小说
sortstring排行榜/排序类型,支持:
  • read 按已读人数排行
  • rating 按评分排行(只返回有评分的作品)
  • word_count 按字数排行
  • first_order 按首订排行
  • average_sub 按均订排行(只返回有均订数据的作品)
  • max_sub 按高订排行(只返回有高订数据的作品)
  • achievements 按盟主排行
  • date 按发布日期/完结日期排序(配合 date_type
orderstring排序方式,asc(升序)或 desc(降序),默认 desc
date_typestring"发布" 或 "完结",配合 sort=dateyear_month 使用
year_monthstring年月筛选,如 202405,配合 date_type 使用
year_liststring"发布" 或 "完结",返回有数据的年份数组
badge_idint徽章ID,筛选拥有该徽章的所有作品,支持分页和字段过滤
如传入 idtitle 参数,则返回该小说的完整详情对象(含 badges、tags、pen_name、author_alias、author_realname、complete_date、first_order、achievements 等),不分页。
返回字段
字段类型说明
idint小说ID
titlestring书名
aliasstring别名(多个用"|"分隔)
author_idint作者ID
pen_namestring作者笔名
genrestring题材类型
word_countint字数
statusstring状态(连载中/已完结)
publish_datestring发布日期
complete_datestring完结日期
summarystring简介
first_orderint首订数据
average_subint均订数据
max_subint高订数据
achievementsint盟主数量
original_sitestring首发站点
read_linkstring在线试读链接
avg_ratingfloat平均评分
rating_countint评分人数
is_publicbool是否公开
coverobject封面对象,含 String(封面URL)和 Valid(是否有效)
created_atstring创建时间(ISO8601)
updated_atstring更新时间(ISO8601)
tagsarray标签数组(详情查询时返回)
badgesarray徽章数组(详情查询时返回)
notestring用户笔记(需指定user_id和fields=note)
列表查询返回示例
{
  "page": 1,
  "size": 20,
  "total": 1234,
  "novels": [
    {
      "id": 1,
      "title": "三体",
      "alias": "Three-Body",
      "author_id": 10,
      "pen_name": "刘慈欣",
      "genre": "科幻",
      "word_count": 300000,
      "status": "已完结",
      "publish_date": "2008-01-01T00:00:00Z",
      "complete_date": "2010-01-01T00:00:00Z",
      "summary": "地球往事三部曲之一。",
      "first_order": 1000,
      "average_sub": 800,
      "max_sub": 1200,
      "achievements": 50,
      "original_site": "起点中文网",
      "read_link": "https://www.qidian.com/book/1",
      "avg_rating": 9.5,
      "rating_count": 10000,
      "is_public": true,
      "cover": {"String": "/covers/1.jpg", "Valid": true},
      "created_at": "2008-01-01T00:00:00Z",
      "updated_at": "2010-01-01T00:00:00Z"
    }
  ]
}
请求示例
  • 获取小说列表:
    GET /api/novel?page=1&size=20
  • 通过ID查找小说:
    GET /api/novel?id=1
  • 通过标题查找小说:
    GET /api/novel?title=三体
  • 按作者筛选:
    GET /api/novel?author=刘慈欣
  • 按标签筛选:
    GET /api/novel?tag=sci-fi
  • 关键词搜索:
    GET /api/novel?keyword=科幻
  • 随机小说:
    GET /api/novel?random=1&size=10
  • 按评分排行:
    GET /api/novel?sort=rating&order=desc
  • 按字数排行:
    GET /api/novel?sort=word_count&order=desc
  • 按发布日期排序:
    GET /api/novel?sort=date&date_type=发布&order=desc
  • 年月筛选:
    GET /api/novel?year_month=202405&date_type=发布
  • 获取年份列表:
    GET /api/novel?year_list=发布
  • 按徽章筛选:
    GET /api/novel?badge_id=1
  • 只返回指定字段:
    GET /api/novel?fields=id,title,pen_name
  • 排除指定字段:
    GET /api/novel?exclude=summary
  • 获取用户笔记:
    GET /api/novel?user_id=123&fields=note
注意事项
  • 使用 idtitle 参数时,返回单个小说的完整详情,包含标签和徽章信息。
  • 未登录用户只能查看公开小说(is_public=true)。
  • sort 参数支持多种排序方式,配合 order 控制升降序。
  • year_month 格式为 YYYYMM,如 202405 表示2024年5月。
  • guestguest_title 用于推荐相似小说。
  • 使用 fieldsexclude 可以精确控制返回的字段。
  • user_id 配合 fields=note 可以获取用户的读书笔记。

/api/info

获取网站基本信息,包括统计数据和首页标题信息。

请求方式GET /api/info
请求参数

无需参数

返回字段
字段类型说明
novel_countint小说总数
author_countint作家总数
home_main_titlestring首页主标题
home_sub_titlestring首页副标题
返回示例
GET /api/info

返回:
{
  "novel_count": 1234,
  "author_count": 567,
  "home_main_title": "网文数据库",
  "home_sub_title": "在Zuo,连接志同道合的读者"
}
说明
  • 此接口无需认证,可公开访问。
  • 统计数据实时从数据库获取,确保准确性。
  • 标题信息来自系统设置,如果设置不存在则返回默认值。
  • 适用于首页展示、统计面板等场景。

/api/coin

获取金币交易记录、金币排行榜。需登录。

请求方式GET /api/coin
请求参数
参数类型必填说明
pageint页码,默认1
page_sizeint每页数量,默认20,最大100
allint1为查询所有用户的金币记录(需有权限),否则只查当前用户
topint1为返回金币排行榜(分页),否则返回金币记录
返回字段
字段类型说明
recordsarray金币交易记录数组(非排行榜模式)
rankingsarray金币排行榜数组(排行榜模式)
totalint总记录数
pageint当前页码
total_pagesint总页数
金币记录对象字段
字段类型说明
idint记录ID
user_idint用户ID
usernamestring用户名
amountint变动金额(正为收入,负为支出)
typestring变动类型(如signin、game_reward等)
descriptionstring描述
related_idobject关联ID(如游戏/导出等)
created_atstring创建时间(ISO8601)
排行榜对象字段
字段类型说明
user_idint用户ID
usernamestring用户名
avatar_pathstring头像URL(如为空请用 /api/avatar?size=28&seed=用户名 兜底)
coin_balanceint金币余额
rankint排名
请求示例
GET /api/coin?page=1&page_size=20
GET /api/coin?all=1&page=1&page_size=20
GET /api/coin?top=1&page=1&page_size=9
返回示例(排行榜)
{
  "page": 1,
  "total": 454,
  "total_pages": 51,
  "rankings": [
    {"user_id":1,"username":"dianso","avatar_path":"/data/user/1/avatar.svg","coin_balance":27672,"rank":1},
    {"user_id":416,"username":"白夜染心","avatar_path":"/data/user/416/avatar_1748186248394.png","coin_balance":5772,"rank":2},
    {"user_id":202,"username":"呵呵","avatar_path":"","coin_balance":1704,"rank":4}
  ]
}
说明
  • 排行榜模式(top=1)和金币记录模式返回结构不同。
  • 排行榜头像如为空,前端可用 /api/avatar?size=28&seed=用户名 兜底。
  • 金币记录 amount 为正表示收入,为负表示支出。
  • type 字段详见前端 type->中文映射。

/api/badges

获取徽章信息。支持获取所有徽章列表或按名称查询单个徽章。

请求方式GET /api/badges
请求参数
参数类型必填说明
namestring徽章名称,用于查询单个徽章(支持精确匹配和模糊匹配)
返回字段

获取所有徽章时返回数组,按名称查询时返回单个对象

字段类型说明
idint徽章ID
namestring徽章名称
colorstring徽章颜色(HEX)
text_colorstring徽章文字颜色(HEX)
descriptionstring徽章描述
logostring徽章图片URL
countint获得该徽章的作品数量
示例

获取所有徽章:

GET /api/badges

返回:
[
  {
    "id": 1,
    "name": "精品作品",
    "color": "#FFD700",
    "text_color": "#000000",
    "description": "获得精品作品称号的小说",
    "logo": "/static/img/badges/gold.png",
    "count": 12
  },
  {
    "id": 2,
    "name": "月票冠军",
    "color": "#00BFFF",
    "text_color": "#ffffff",
    "description": "月票排行第一的作品",
    "logo": "/static/img/badges/champion.png",
    "count": 5
  }
]

按名称查询单个徽章:

GET /api/badges?name=精品作品

返回:
{
  "id": 1,
  "name": "精品作品",
  "color": "#FFD700",
  "text_color": "#000000",
  "description": "获得精品作品称号的小说",
  "logo": "/static/img/badges/gold.png",
  "count": 12
}
注意事项
  • 按名称查询时,先进行精确匹配,如果没有找到则进行模糊匹配
  • 如果徽章不存在,返回404状态码和错误信息
  • 所有徽章按获得该徽章的作品数量降序排列
  • 需要API Token认证

/api/booklist

书单相关API,支持书单的增删改查、书单内小说的管理等操作。

主要路由
  • GET /api/booklist 获取公开书单列表
  • GET /api/booklist/{id} 获取单个书单详情及其小说
  • POST /api/booklist 新建书单(需登录)
  • PUT /api/booklist 编辑书单(需登录)
  • DELETE /api/booklist 删除书单(需登录)
  • POST /api/booklist/{id}/novel 向书单添加小说
  • PUT /api/booklist/{id}/novel/{novel_id} 修改书单中小说评语
  • DELETE /api/booklist/{id}/novel/{novel_id} 移除书单中的小说
GET /api/booklist

获取书单列表,支持三种场景:

  • 全站公开书单: GET /api/booklist?page=1&page_size=10
  • 当前用户所有书单: GET /api/booklist?user_id=me&page=1&page_size=10(需登录)
  • 指定用户的所有公开书单: GET /api/booklist?user_id={id}&page=1&page_size=10
参数类型必填说明
user_idint/me不传为全站公开,me为自己,数字为指定用户
pageint页码,默认1
page_sizeint每页数量,默认10
返回字段
字段类型说明
listarray书单数组
totalint总数
pageint当前页码
page_sizeint每页数量
示例
GET /api/booklist?user_id=me&page=1&page_size=5

返回:
{
  "list": [
    {
      "id": 1,
      "user_id": 2,
      "title": "我的科幻书单",
      "description": "收录喜欢的科幻小说",
      "is_public": true,
      "created_at": "2024-06-01T12:00:00Z",
      "updated_at": "2024-06-10T12:00:00Z",
      "username": "张三"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 5
}
注意事项
  • 所有涉及创建、编辑、删除操作均需登录。
  • 只有书单拥有者可编辑/删除书单及其小说。
  • 添加小说时如已存在会报错。
  • 移除小说需为书单拥有者。

/api/user

获取用户列表,支持分页、角色筛选、模糊搜索,返回总数和各角色数量。适用于前端用户列表、管理后台等场景。

请求方式GET /api/user
请求参数
参数类型必填说明
pageint页码,默认1
page_sizeint每页数量,默认20,最大100
roleint用户角色(1=用户,2=贡献者,0=管理员,9=小黑屋)
keywordstring用户名模糊搜索
返回字段
字段类型说明
usersarray用户简要信息数组
totalint总用户数(符合筛选条件)
pageint当前页码
page_sizeint每页数量
role_countsobject各角色用户数量,如{"":123, "1":100, "2":10, "0":5, "9":8}
用户对象结构
字段类型说明
idint用户ID
usernamestring用户名
roleint用户角色(0:管理员 1:普通用户 2:贡献者 9:黑名单)
avatarstring头像URL
created_atstring注册时间(YYYY-MM-DD)
coin_balanceint金币余额
emailstring邮箱地址
show_emailint是否公开邮箱(0:不公开 1:公开)
websitestring个人网站
show_websiteint是否公开网站(0:不公开 1:公开)
genderstring性别
biostring个人简介
following_countint关注数
followers_countint粉丝数
last_active_timestring最后活跃时间
register_daysint注册天数
blacklist_recordobject黑名单记录(仅当用户被封禁时返回)
返回示例
{
  "users": [
    {"id": 1, "username": "admin", "role": 0, "avatar": "/api/avatar?name=admin", "created_at": "2023-01-01"},
    {"id": 2, "username": "user1", "role": 1, "avatar": "/api/avatar?name=user1", "created_at": "2023-01-02"}
  ],
  "total": 123,
  "page": 1,
  "page_size": 20,
  "role_counts": {"": 123, "1": 100, "2": 10, "0": 5, "9": 8}
}
说明
  • role_counts 对象的 key 说明:""为全部,"1"为普通用户,"2"为贡献者,"0"为管理员,"9"为小黑屋用户。
  • avatar 字段如果为空,建议用 /api/avatar?name=用户名 生成默认头像。
  • 支持分页、角色筛选和模糊搜索,可用于前端用户列表、管理后台等多种场景。
用法补充
  • 分页获取用户列表: GET /api/user?page=1&page_size=20
  • 按角色和关键词搜索: GET /api/user?role=1&keyword=张三
  • 获取单用户详情: GET /api/user?id=123

/api/user/role

切换当前登录用户的身份(普通用户/贡献者)。需登录。

请求方式GET /api/user/role?role=1|2
请求参数
参数类型必填说明
roleint目标身份,1=普通用户,2=贡献者
返回
操作成功后会重定向回来源页面,无JSON返回。
说明
  • 仅普通用户和贡献者可互相切换。
  • 需登录。
  • 切换后自动重定向回来源页面。
示例
GET /api/user/role?role=2

# 切换为贡献者

GET /api/user/role?role=1

# 切换为普通用户

用户交互 API

用户之间的关注、打赏、查看粉丝/关注列表等交互功能。

POST /api/user/follow

关注指定用户

请求参数
参数名类型必填说明
user_idint要关注的用户ID
响应格式
字段类型说明
successboolean操作是否成功
messagestring成功消息
errorstring错误信息(失败时)
POST /api/user/unfollow

取消关注指定用户

请求参数
参数名类型必填说明
user_idint要取消关注的用户ID
响应格式
字段类型说明
successboolean操作是否成功
messagestring成功消息
errorstring错误信息(失败时)
GET /api/user/follow-status

检查当前用户是否关注了指定用户

请求参数
参数名类型必填说明
target_idint目标用户ID
响应格式
字段类型说明
is_followingboolean是否已关注
errorstring错误信息(失败时)
POST /api/user/tip

向指定用户打赏金币

请求参数
参数名类型必填说明
user_idint被打赏用户ID
amountint打赏金额(1-10000)
messagestring打赏留言
响应格式
字段类型说明
successboolean操作是否成功
messagestring成功消息
amountint实际打赏金额
errorstring错误信息(失败时)
GET /api/user/followers

获取指定用户的粉丝列表(支持分页)

请求参数
参数名类型必填说明
user_idint目标用户ID
pageint页码,默认1
limitint每页数量,默认20,最大50
响应格式
字段类型说明
usersarray用户列表
totalint总数量
pageint当前页码
limitint每页数量
total_pagesint总页数
has_moreboolean是否有更多数据
GET /api/user/following

获取指定用户的关注列表(支持分页)

请求参数
参数名类型必填说明
user_idint目标用户ID
pageint页码,默认1
limitint每页数量,默认20,最大50
响应格式
字段类型说明
usersarray用户列表
totalint总数量
pageint当前页码
limitint每页数量
total_pagesint总页数
has_moreboolean是否有更多数据
注意事项:
  • 所有用户交互API都需要API Token认证
  • 不能对自己执行关注或打赏操作
  • 打赏金额范围为1-10000金币
  • 粉丝/关注列表中的用户包含关注状态信息

/api/signin

用户每日签到接口,支持获取签到信息和执行签到操作。

请求方式GET /api/signin POST /api/signin
GET 请求参数
参数类型必填说明
user_idint查询指定用户的签到信息(所有人可查)
POST 请求参数
无需参数,直接POST即可完成签到,需登录。
返回字段
字段类型说明
successbool操作是否成功
messagestring提示信息
statsobject签到统计信息(GET)
dailyobject每日签到统计(GET)
rankingsarray签到排行榜(GET)
total_usersint总用户数(GET)
has_signed_todaybool今日是否已签到(GET)
level_daysarray等级天数配置(GET)
announcementstring签到公告(GET)
today_signersarray今日已签到用户(GET)
rewardint签到获得的金币(POST)
total_daysint累计签到天数(POST)
levelint当前等级(POST)
示例
GET /api/signin

返回:
{
  "success": true,
  "stats": { "TotalSignins": 12, "Level": 2, ... },
  "daily": { "TodaySignins": 5, ... },
  "rankings": [ ... ],
  "total_users": 123,
  "has_signed_today": true,
  "level_days": [0,10,30,...],
  "announcement": "每日签到送金币!",
  "today_signers": [ { "user_id": 1, "username": "张三" } ]
}

POST /api/signin

返回:
{
  "success": true,
  "message": "签到成功,获得金币!",
  "reward": 8,
  "total_days": 12,
  "level": 2
}

/api/history

获取历史上的今天发布或完结的小说,支持分页和类型筛选。

请求方式GET /api/history
请求参数
参数类型必填说明
typestring类型,published(默认,今日发布)或 finished(今日完结)
monthint月份,默认当前月
dayint日期,默认当天
pageint页码,默认1
page_sizeint每页数量,默认20
返回字段
字段类型说明
idint小说ID
titlestring书名
aliasstring别名
author_idint作者ID
pen_namestring作者笔名
genrestring类型
word_countint字数
statusstring状态(连载/完结)
publish_datestring发布日期
complete_datestring完结日期
summarystring简介
first_orderint首订
average_subint均订
max_subint高订
achievementsint盟主数
original_sitestring首发站点
read_linkstring试读链接
avg_ratingfloat平均评分
rating_countint评分人数
is_publicbool是否公开
coverstring封面
created_atstring创建时间
updated_atstring更新时间
示例
GET /api/history?type=published&page=1&page_size=2

返回:
{
  "total": 100,
  "novels": [
    {
      "id": 1,
      "title": "三体",
      "alias": "",
      "author_id": 10,
      "pen_name": "刘慈欣",
      "genre": "科幻",
      "word_count": 300000,
      "status": "完结",
      "publish_date": "2008-01-01",
      "complete_date": "2010-01-01",
      "summary": "地球往事三部曲之一。",
      "first_order": 1000,
      "average_sub": 800,
      "max_sub": 1200,
      "achievements": 50,
      "original_site": "起点中文网",
      "read_link": "https://www.qidian.com/book/1",
      "avg_rating": 9.5,
      "rating_count": 10000,
      "is_public": true,
      "cover": "/covers/1.jpg",
      "created_at": "2008-01-01T00:00:00Z",
      "updated_at": "2010-01-01T00:00:00Z"
    }
  ]
}

/api/avatar

生成动物风格头像,支持多种参数和动物类型。

请求方式GET /api/avatar
请求参数
参数类型必填说明
sizeint头像尺寸,默认200,范围50-500
seedint/string随机种子,相同种子生成相同头像
stylestring头像风格,animal=动物头像(默认)
animalstring指定动物类型,支持:
cat 猫、dog 狗、rabbit 兔子、bear 熊、fox 狐狸、tiger 老虎、lion 狮子、monkey 猴子、pig 猪、panda 熊猫、frog 青蛙、chick 小鸡、duck 鸭子、cow 奶牛、sheep 羊、squirrel 松鼠、koala 考拉、hippo 河马、giraffe 长颈鹿、penguin 企鹅、horse 马、deer 鹿、elephant 大象、wolf 狼、mouse 老鼠、owl 猫头鹰、camel 骆驼、crocodile 鳄鱼、zebra 斑马、goat 山羊、hedgehog 刺猬、raccoon 浣熊、whale 鲸鱼、dolphin 海豚、shark 鲨鱼、eagle 鹰、parrot 鹦鹉、turtle 乌龟、snake 蛇、bat 蝙蝠
效果演示
熊头像

bear
奶牛头像
奶牛
cow
猫头像

cat
熊猫头像
熊猫
panda
示例请求
GET /api/avatar?size=200&seed=1&style=animal&animal=bear
说明
  • 返回SVG格式的头像图片,可直接在img标签中使用。
  • 相同的seed参数会生成相同的头像,适合为用户生成固定头像。
  • 支持40+种动物类型,风格可爱简洁。

/api/hot

获取热门内容,包括热门小说、热门作家、热门标签等。

请求方式GET /api/hot
请求参数
参数类型必填说明
typestring热门类型:novels(小说,默认)、authors(作家)、tags(标签)
limitint返回数量,默认10,最大50
periodstring时间周期:day(日)、week(周,默认)、month(月)、all(全部)
返回字段
字段类型说明
typestring热门类型
periodstring时间周期
dataarray热门数据数组
updated_atstring数据更新时间
热门小说数据结构
字段类型说明
idint小说ID
titlestring书名
pen_namestring作者笔名
coverobject封面对象
avg_ratingfloat平均评分
read_countint阅读人数
hot_scorefloat热度分数
热门作家数据结构
字段类型说明
idint作家ID
pen_namestring笔名
avatarobject头像对象
novel_countint作品数量
total_readsint总阅读人数
hot_scorefloat热度分数
示例
GET /api/hot?type=novels&limit=5&period=week

返回:
{
  "type": "novels",
  "period": "week",
  "updated_at": "2024-06-07T12:00:00Z",
  "data": [
    {
      "id": 1,
      "title": "三体",
      "pen_name": "刘慈欣",
      "cover": {"String": "/cover/3body.jpg", "Valid": true},
      "avg_rating": 9.2,
      "read_count": 1234,
      "hot_score": 95.8
    },
    {
      "id": 2,
      "title": "流浪地球",
      "pen_name": "刘慈欣",
      "cover": {"String": "/cover/wandering.jpg", "Valid": true},
      "avg_rating": 8.9,
      "read_count": 987,
      "hot_score": 89.3
    }
  ]
}
说明
  • 热度分数综合考虑阅读人数、评分、评论数、收藏数等多个维度。
  • 数据每小时更新一次,确保热门内容的时效性。
  • 不同时间周期的热门内容可能有所不同。

/api/stats

获取网站统计数据,包括作品数量、作家数量、用户数量等。

请求方式GET /api/stats
请求参数
参数类型必填说明
typestring统计类型:overview(概览,默认)、growth(增长趋势)、distribution(分布统计)
periodstring时间周期:day(日)、week(周)、month(月,默认)、year(年)
概览统计返回字段
字段类型说明
total_novelsint小说总数
total_authorsint作家总数
total_usersint用户总数
total_tagsint标签总数
total_readsint总阅读人次
total_ratingsint总评分数
avg_ratingfloat平均评分
total_wordsint总字数
updated_atstring统计更新时间
增长趋势返回字段
字段类型说明
periodstring时间周期
dataarray时间序列数据
growth_rateobject增长率统计
分布统计返回字段
字段类型说明
genre_distributionarray题材分布
status_distributionarray状态分布
word_count_distributionarray字数分布
rating_distributionarray评分分布
示例
GET /api/stats?type=overview

返回:
{
  "total_novels": 1234,
  "total_authors": 567,
  "total_users": 8901,
  "total_tags": 89,
  "total_reads": 45678,
  "total_ratings": 12345,
  "avg_rating": 8.2,
  "total_words": 123456789,
  "updated_at": "2024-06-07T12:00:00Z"
}

GET /api/stats?type=distribution

返回:
{
  "genre_distribution": [
    {"name": "科幻", "count": 234, "percentage": 18.9},
    {"name": "玄幻", "count": 189, "percentage": 15.3},
    {"name": "都市", "count": 156, "percentage": 12.6}
  ],
  "status_distribution": [
    {"name": "已完结", "count": 789, "percentage": 63.9},
    {"name": "连载中", "count": 345, "percentage": 27.9},
    {"name": "暂停", "count": 100, "percentage": 8.1}
  ],
  "word_count_distribution": [
    {"range": "0-10万", "count": 456, "percentage": 36.9},
    {"range": "10-50万", "count": 567, "percentage": 45.9},
    {"range": "50万+", "count": 211, "percentage": 17.1}
  ]
}
说明
  • 统计数据每天凌晨自动更新,确保数据准确性。
  • 增长趋势数据可用于绘制图表,展示网站发展情况。
  • 分布统计有助于了解内容结构和用户偏好。

/api/export

数据导出接口,支持导出小说、作家、标签等数据为多种格式。需登录且消耗金币。

请求方式POST /api/export
请求参数
参数类型必填说明
typestring导出类型:novels(小说)、authors(作家)、tags(标签)、booklist(书单)
formatstring导出格式:jsoncsvexcel
filtersobject筛选条件,JSON对象
fieldsarray指定导出字段,不传则导出所有字段
limitint导出数量限制,默认1000,最大10000
筛选条件示例
{
  "genre": "科幻",           // 题材筛选
  "status": "已完结",        // 状态筛选
  "word_count_min": 100000,  // 最小字数
  "word_count_max": 500000,  // 最大字数
  "rating_min": 8.0,         // 最小评分
  "author_id": 123,          // 指定作家
  "tag_ids": [1, 2, 3],      // 指定标签ID
  "publish_year": 2023       // 发布年份
}
返回字段
字段类型说明
successbool导出是否成功
messagestring提示信息
download_urlstring下载链接(成功时)
file_sizeint文件大小(字节)
record_countint导出记录数
costint消耗金币数
expires_atstring下载链接过期时间
费用说明
导出类型基础费用每1000条记录格式加成
小说10金币+5金币Excel: +50%
作家5金币+2金币Excel: +50%
标签2金币+1金币Excel: +50%
书单3金币+1金币Excel: +50%
示例
POST /api/export
Content-Type: application/json

{
  "type": "novels",
  "format": "json",
  "filters": {
    "genre": "科幻",
    "status": "已完结",
    "rating_min": 8.0
  },
  "fields": ["id", "title", "pen_name", "word_count", "avg_rating"],
  "limit": 500
}

返回:
{
  "success": true,
  "message": "导出成功",
  "download_url": "/downloads/export_novels_20240607_123456.json",
  "file_size": 1048576,
  "record_count": 234,
  "cost": 15,
  "expires_at": "2024-06-08T12:00:00Z"
}
说明
  • 导出功能需要登录,且会消耗金币。
  • 下载链接有效期为24小时,过期后需重新导出。
  • Excel格式导出会有额外的格式加成费用。
  • 导出数量越多,费用越高,建议合理使用筛选条件。
  • 导出的文件会包含完整的字段信息和数据。

/api/system

获取服务器系统信息,包括操作系统版本、Go版本、内存占用等运行状态信息。需要API Token。

请求方式GET /api/system?token=YOUR_TOKEN
请求参数
参数类型必填说明
tokenstringAPI访问令牌
返回字段
字段类型说明
osstring操作系统类型(如 linux、windows、darwin)
archstring系统架构(如 amd64、arm64)
go_versionstringGo语言版本
num_cpuintCPU核心数
num_goroutineint当前协程数量
memory_usageobject内存使用详情
uptimestring服务运行时间
timestampint当前时间戳
内存使用详情字段
字段类型说明
allocint当前分配的内存(字节)
total_allocint累计分配的内存(字节)
sysint从操作系统获取的总内存(字节)
返回示例
GET /api/system?token=YOUR_TOKEN

返回:
{
  "os": "windows",
  "arch": "amd64",
  "go_version": "go1.24.5",
  "num_cpu": 4,
  "num_goroutine": 21,
  "memory_usage": {
    "alloc": 4208912,
    "total_alloc": 11636248,
    "sys": 16928768
  },
  "uptime": "45秒",
  "timestamp": 1753859851
}
说明
  • 此接口需要有效的API Token才能访问。
  • 内存数值以字节为单位,可以除以1024²转换为MB。
  • 运行时间从服务启动开始计算。
  • 协程数量反映当前服务的并发处理能力。
  • alloc: 当前程序实际使用的内存
  • total_alloc: 程序启动以来累计分配的内存总量
  • sys: 程序从操作系统申请的总内存

其它接口

其他实用的API接口,包括头像生成、小说验证等。

头像生成
请求方式GET /api/avatar

生成随机SVG头像,支持自定义大小和种子。

参数类型必填说明
sizeint头像大小(像素),默认64,范围16-512
seedint随机种子,相同种子生成相同头像
小说验证
请求方式POST /api/validate/novel

批量验证小说标题是否存在于数据库中。

参数类型必填说明
titlesarray要验证的小说标题数组
示例
GET /api/avatar?size=128&seed=12345

返回:SVG格式的头像图片

POST /api/validate/novel
Content-Type: application/json

{
  "titles": ["三体", "流浪地球", "不存在的小说"]
}

返回:
{
  "results": [
    {
      "title": "三体",
      "exists": true,
      "id": 1,
      "penName": "刘慈欣",
      "authorId": 10
    },
    {
      "title": "流浪地球",
      "exists": true,
      "id": 2,
      "penName": "刘慈欣",
      "authorId": 10
    },
    {
      "title": "不存在的小说",
      "exists": false
    }
  ]
}
说明
  • 头像生成使用SVG格式,支持任意大小缩放而不失真。
  • 相同的种子值会生成相同的头像,适合为用户生成一致的默认头像。
  • 小说验证接口支持批量验证,提高效率。
  • 验证结果包含小说的基本信息,方便后续处理。