Skip to content

novel · 小说

ts
import { NovelDomain } from '@hfyidu/api/novel'

小说领域覆盖书架管理、分类/榜单、目录、阅读(IAP 付费解锁模式 / IAA 广告解锁模式两套阅读接口)、章节解锁、搜索、阅读记录等能力,服务前缀 novel。其中阅读页插入的广告位复用 ad 领域PlayListDto 类型,本文不重复定义,直接跳转查看。

用例总览

用例说明请求方式
NovelDomain.cases.bookshelf获取书架列表(分页)GET novel/bookshelves
NovelDomain.cases.classify获取小说分类GET novel/classify
NovelDomain.cases.classList获取分类下小说列表(分页)GET novel/class/list
NovelDomain.cases.search搜索小说(分页)GET novel/search
NovelDomain.cases.hotsearch获取热搜数据GET novel/hotSearch
NovelDomain.cases.bags获取书架书包推荐数据GET novel/bags
NovelDomain.cases.rankList获取榜单列表(分页)GET novel/list
NovelDomain.cases.adCatalogues获取 IAA 模式小说目录(分页)GET novel/ad/catalogues
NovelDomain.cases.adUnlockIAA 模式解锁章节PUT novel/ad/unlock
NovelDomain.cases.readIAP 模式阅读章节GET novel/read
NovelDomain.cases.adReadIAA 模式阅读章节GET novel/ad/read
NovelDomain.cases.catalogues获取 IAP 模式小说目录(分页)GET novel/catalogues
NovelDomain.cases.detail获取小说详情GET novel/detail
NovelDomain.cases.unlockIAP 模式解锁章节PUT novel/unlock
NovelDomain.cases.reading上报阅读时长POST novel/reading
NovelDomain.cases.delBookshelf从书架移除小说DELETE novel/bookshelf
NovelDomain.cases.addBookshelf添加小说到书架PUT novel/bookshelf
NovelDomain.cases.reads获取阅读记录(分页)GET novel/reads
NovelDomain.cases.delRead删除阅读记录DELETE novel/read
NovelDomain.cases.rankSingle获取单个榜单详情(分页)GET novel/list
NovelDomain.cases.cataloguesAll获取全量小说目录(分页)GET novel/cataloguesAll

bookshelf · 获取书架列表(分页)

这是分页列表用例,返回结构为 { list: NovelBookshelfDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。该用例覆写了 pageSize30(默认分页大小与其他分页用例不同)。

ts
const bookshelf = NovelDomain.cases.bookshelf // 只 new 一次,缓存到变量

await bookshelf.refresh({ page: 1, limit: 30 })

console.log(bookshelf.list) // NovelBookshelfDto[]
console.log(bookshelf.hasMore)

请求参数 NovelBookshelfQueryParams

字段类型必填说明
pagenumber页码
limitnumber每页条数

响应 { list: NovelBookshelfDto[] }

NovelBookshelfDto

字段类型后台原始字段说明
idIdentitystring | numberid小说 ID,必填
bookCoverstringbook_cover封面图,默认 ''
thumbstringthumbnail_cover_url缩略封面图,默认 ''
bookNamestringbook_name书名,默认 ''
wechatBookIdstringwechat_book_id微信小说 ID,默认 ''
descstringintroduce简介,默认 '暂无简介'
authorstringauthor作者,默认 '佚名'
browsenumberbrowse_num浏览量,默认 0
freeChaptersnumberfree_chapter免费章节数,默认 20
deputystringdeputy_cover_url副封面图,默认 ''
keywordsstringkeywords关键词,默认 ''
lead_namestring领读人名称,默认 ''
scorenumberscore评分,默认 80
sortnumbersort排序权重,默认 0
totalChaptersnumbertotal_chapters总章节数,默认 0
totalWordsnumbertotal_words总字数,默认 0
statusBookUpdateStatusupdate_status更新状态,默认 BookUpdateStatus.COMPLETED
book_source_typenumber小说来源类型原始数值,默认 99
bookSourceTypeBookSourceTypebook_source_type小说来源类型,默认 BookSourceType.OTHER
selectImageboolean是否处于选中状态(业务态字段),默认 false
nearNovelClassListNearChapterDtonear_chapter最近阅读章节信息,默认新建一个 NovelClassListNearChapterDto 实例
bookIdIdentitygetter,等价于 id
book_idIdentitygetter,等价于 id
wordsstringgetter,totalWords 格式化后的展示文案
updateAtnumbergetter,根据 near.updateAt 计算出的时间戳,无记录时为 0

NovelClassListNearChapterDto(嵌套 DTO,见 NovelClassListNearChapterDto 小节)

classify · 获取小说分类

ts
const { data } = await NovelDomain.cases.classify.run({
  channel: 1,
  source: 1,
  copyright_id: 0,
})

console.log(data) // NovelClassifyDto[]

请求参数 NovelClassifyQueryParams

字段类型必填说明
channelIdentitystring | number频道
sourcenumber来源
copyright_idnumber版权方 ID

响应 NovelClassifyDto[]

NovelClassifyDto(不可变,@Freeze

字段类型后台原始字段说明
idnumberid分类 ID,必填
textstringclass_name分类名称,默认 ''
cpnumbercopyright_id版权方 ID,默认 0
sortnumbersort排序权重,默认 0
channelnumberchannel频道,默认 0
copyright_idnumbercopyright_id版权方 ID(原始字段名同时保留),默认 0

classList · 获取分类下小说列表(分页)

这是分页列表用例,返回结构为 { list: NovelClassListDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。

ts
const classList = NovelDomain.cases.classList

await classList.refresh({
  channel: 1,
  update_status: 0,
  class_id: 10,
})

console.log(classList.list) // NovelClassListDto[]

请求参数 NovelClassListQueryParams

字段类型必填说明
channelnumber频道
update_statusnumber更新状态
class_idnumber分类 ID
pagenumber页码(分页用例内部自动维护,一般无需手动传)
limitnumber每页条数(分页用例内部自动维护,一般无需手动传)

响应 { list: NovelClassListDto[] }

NovelClassListDto

字段类型后台原始字段说明
idnumber | stringid小说 ID,必填
titlestringbook_name书名,默认 '暂无书名'
descstringintroduce简介,默认 '暂无简介'
coverstringbook_cover封面图,默认 ''
thumbstringthumbnail_cover_url缩略封面图,默认 ''
authorstringauthor作者,默认 '佚名'
scorenumberscore评分,默认 80
freeChaptersnumberfree_chapter免费章节数,默认 20
totalChaptersnumbertotal_chapters总章节数,默认 0
wordsnumbertotal_words总字数,默认 0
update_statusnumberupdate_status更新状态原始数值,默认 2
bookSourceTypeBookSourceTypebook_source_type小说来源类型,默认 BookSourceType.SWTJ
updateAtstringupdated_at更新时间,默认 ''
browsenumberbrowse_num浏览量,默认 0
classifyNamestringclass_name分类名称,默认 ''
classifyIdnumberclass_id分类 ID,默认 0
classifyNovelClassListClassifyDto分类详情,默认新建一个 NovelClassListClassifyDto 实例
nearNovelClassListNearChapterDto最近阅读章节信息,默认新建一个 NovelClassListNearChapterDto 实例
formatWordsstringgetter,words 格式化后的展示文案
statusstringgetter,'连载中' / '已完结'
getAuthorstringgetter,author 为空时兜底 '佚名'
getDescstringgetter,desc 为空时兜底随机文案
getClassifyNamestringgetter,classifyName 为空时兜底 '无分类'

NovelClassListClassifyDto(不可变,@Freeze

字段类型后台原始字段说明
idIdentitystring | numberid分类 ID
channelnumberchannel频道,默认 0
copyright_idnumbercopyright_id版权方 ID,默认 0
sortnumbersort排序权重,默认 0
updateAtstringupdated_at更新时间,默认 ''
textstringclass_name分类名称,默认 ''

NovelClassListNearChapterDto 最近阅读章节

不可变(@Freeze),被 NovelBookshelfDto.nearNovelClassListDto.near 共同引用。

字段类型后台原始字段说明
idIdentitystring | numberid章节 ID
book_idnumberbook_id小说 ID,默认 0
book_namestringtitle小说名称,默认 ''
numbernumbernumber章节序号,默认 0
isChargenumberis_charge是否付费章节,默认 0
titlestringtitle章节标题,默认 '无章节标题'
amountnumberunlock_coin解锁所需金币,默认 0
wordsnumberword_num字数,默认 0
updateAtstringread_time最近阅读时间,默认 ''
hasReadbooleangetter,updateAt 不为空即返回 true

search · 搜索小说(分页)

这是分页列表用例,返回结构为 { list: NovelSearchDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。

ts
const search = NovelDomain.cases.search

await search.refresh({ channel: 1, keyword: '斗破苍穹' })

console.log(search.list) // NovelSearchDto[]

请求参数 NovelSearchQueryParams

字段类型必填说明
channelnumber频道
keywordstring搜索关键词

响应 { list: NovelSearchDto[] }

NovelSearchDto(不可变,@Freeze

字段类型后台原始字段说明
idnumberid小说 ID,必填
coverstringbook_cover封面图,默认 ''
namestringbook_name书名,默认 '暂无书名'
bookSourceTypeBookSourceTypebook_source_type小说来源类型,默认 BookSourceType.FL
browsenumberbrowse_num浏览量,默认 100
channel_idnumberchannel频道,默认 1
classifystringclass_name分类名称,默认 ''
classifyIdnumber分类 ID,默认 0
free_chapternumberfree_chapter免费章节数,默认 20
describestringintroduce简介,默认 '暂无简介'
chaptersnumbertotal_chapters总章节数,默认 0
wordsnumbertotal_words总字数,默认 0
scorenumberscore评分,默认 80
update_statusnumberupdate_status更新状态原始数值,默认 1
updatedAtstringupdated_at更新时间
createdAtstringcreated_at创建时间
statusstring | undefinedgetter,BookUpdateStatus 反查得到的中文文案
channelstring | undefinedgetter,BookChannel 反查得到的中文文案

hotsearch · 获取热搜数据

ts
const { data } = await NovelDomain.cases.hotsearch.run(null)

console.log(data) // NovelHotsearchDto

请求参数 NovelHotsearchQueryParams

无请求参数,固定传 null

响应 NovelHotsearchDto

NovelHotsearchDto(不可变,@Freeze

字段类型说明
idstring必填

bags · 获取书架书包推荐数据

ts
const { data } = await NovelDomain.cases.bags.run({
  spread_id: '1001',
})

console.log(data) // NovelBagsDto

请求参数 NovelBagsQueryParams

字段类型必填说明
spread_idstring | number推广 ID

响应 NovelBagsDto

NovelBagsDto

字段类型后台原始字段说明
idIdentitystring | numberid小说 ID
bookCoverstringbook_cover封面图,默认 ''
thumbstringthumbnail_cover_url缩略封面图,默认 ''
bookNamestringbook_name书名,默认 ''
descstringintroduce简介,默认 ''
authorstringauthor作者,默认 '佚名'
freeChaptersnumberfree_chapter免费章节数,默认 20
keywordsstringkeywords关键词,默认 ''
leadNamestringlead_name领读人名称,默认 ''
updateAtstringupdated_at更新时间,默认 ''
scorenumberscore评分,默认 80
totalChaptersnumbertotal_chapters总章节数,默认 0
totalWordsnumbertotal_words总字数,默认 0
updateStatusBookUpdateStatusupdate_status更新状态,默认 BookUpdateStatus.COMPLETED
bookSourceTypeBookSourceTypebook_source_type小说来源类型,默认 BookSourceType.OTHER
starnumbergetter,500 ~ 1000 之间的随机展示数值
formatAuthorstringgetter,'{author}•著''佚名'
chaptersstringgetter,'共{totalChapters}章'
statusstringgetter,'连载中' / '已完结'
scoreNamestring | nullgetter,score >= 80 时返回 '畅销',否则 null
wordsstringgetter,totalWords 格式化后的展示文案
getDescstringgetter,desc 为空时兜底随机文案

rankList · 获取榜单列表(分页)

这是分页列表用例,返回结构为 { list: NovelRankListDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。每一项 NovelRankListDto 代表一个榜单,其内部 list 字段是该榜单下的小说数据。

ts
const rankList = NovelDomain.cases.rankList

await rankList.refresh({ channel: 1 })

console.log(rankList.list) // NovelRankListDto[]

请求参数 NovelRankListQueryParams

字段类型必填说明
channelnumber0|1|2 或其他数值)频道:0 通用,1 男频,2 女频
list_namestring榜单名称,指定后只返回该榜单
pagenumber页码(分页用例内部自动维护)
limitnumber每页条数(分页用例内部自动维护)

响应 { list: NovelRankListDto[] }

NovelRankListDto

字段类型说明
infoNovelRankListInfoDto榜单信息,默认新建一个 NovelRankListInfoDto 实例
listNovelRankListDataDto[]榜单下的小说数据,默认 []
dataNovelRankListDataDto[]getter,按 sort 字段排序后的 list
upListNovelRankListDataDto[]getter,按 score 升序排序后的 list
downListNovelRankListDataDto[]getter,按 score 降序排序后的 list
groupToThreeNovelRankListDataDto[][]getter,list 每 3 条分为一组
sliceToSixNovelRankListDataDto[]getter,list 前 6 条
sliceToFourNovelRankListDataDto[]getter,list 前 4 条
sliceToFiveNovelRankListDataDto[]getter,list 前 5 条
sliceToSevenNovelRankListDataDto[]getter,list 前 7 条

NovelRankListDataDto 榜单小说数据

NovelRankListDto.listrankSingle 共同引用。

字段类型后台原始字段说明
idnumberid小说 ID,必填,默认 0
titlestringbook_name书名,默认 '暂无书名'
wechatBookIdstringwechat_book_id微信小说 ID,默认 ''
descstringintroduce简介,默认 '暂无简介'
coverstringbook_cover封面图,默认 ''
thumbstringthumbnail_cover_url缩略封面图,默认 ''
authorstringauthor作者,默认 '佚名'
scorenumberscore评分,默认 80
freeChaptersnumberfree_chapter免费章节数,默认 20
totalChaptersnumbertotal_chapters总章节数,默认 0
wordsnumbertotal_words总字数,默认 0
update_statusnumberupdate_status更新状态原始数值,默认 2
bookSourceTypeBookSourceTypebook_source_type小说来源类型,默认 BookSourceType.SWTJ
updateAtstringupdated_at更新时间,默认 ''
browsenumberbrowse_num浏览量,默认 0
classifyNamestringclass_name分类名称,默认 ''
classifyIdnumberclass_id分类 ID,默认 0
sortnumbersort排序权重,默认 0
starnumbergetter,500 ~ 1000 之间的随机展示数值
getBrowsenumbergetter,100 ~ 10000 之间的随机展示数值
statusstringgetter,'连载中' / '已完结'
getAuthorstringgetter,author 为空时兜底 '佚名'
getDescstringgetter,desc 为空时兜底随机文案
getClassifyNamestringgetter,classifyName 为空时兜底 '无分类'

NovelRankListInfoDto 榜单信息

不可变(@Freeze),被 NovelRankListDto.infoNovelRankSingleDto.info 共同引用。

字段类型后台原始字段说明
idIdentitystring | numberid榜单 ID
titlestringtitle榜单名称,默认 '热门榜单'
channelnumberchannel频道,默认 1
codestringcode榜单代码,默认 ''
descstringdescribe榜单描述,默认 ''
numbersnumberbook_number榜单收录小说数,默认 0
sortnumbersort排序权重

adCatalogues · 获取 IAA 模式小说目录(分页)

这是分页列表用例,返回结构为 { list: NovelAdCataloguesDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。

ts
const adCatalogues = NovelDomain.cases.adCatalogues

await adCatalogues.refresh({ book_id: 1001 })

console.log(adCatalogues.list) // NovelAdCataloguesDto[]

请求参数 NovelAdCataloguesQueryParams

字段类型必填说明
book_idnumber | string小说 ID

响应 { list: NovelAdCataloguesDto[] }

NovelAdCataloguesDto

字段类型说明
idIdentitystring | number章节 ID,必填
amountnumber解锁所需金币/广告次数,默认 0
is_unlockboolean是否已解锁,默认 false
numbernumber章节序号,默认 1
titlestring章节标题,默认 ''

adUnlock · IAA 模式解锁章节

ts
const { data } = await NovelDomain.cases.adUnlock.run({
  book_id: 1001,
  chapter_id: 2001,
  spread_id: '3001',
  scene: 0,
  ad_confirmed: 1,
  is_auto: 0,
})

console.log(data) // NovelAdUnlockDto

请求参数 NovelAdUnlockBodyParams

字段类型必填说明
book_idIdentitynumber | string小说 ID
chapter_idIdentity章节 ID
spread_idIdentity推广 ID
sceneDualState0 | 1解锁场景标记
ad_confirmedDualState是否已完成广告观看确认
is_autoDualState是否自动解锁

响应 NovelAdUnlockDto

NovelAdUnlockDto

字段类型说明
idstring必填

read · IAP 模式阅读章节

用于付费(IAP)小说的章节阅读接口。当后台返回错误码 417001 / 417002(表示该章节尚未解锁)时,该用例不会抛出异常,而是用错误响应体中的 data 构造一个 NovelReadDto 正常返回,供业务方拿到章节的基础信息(如价格、字数)后引导用户解锁;其他错误码则正常抛出。

ts
const { data } = await NovelDomain.cases.read.run({
  book_id: 1001,
  chapter_id: 2001,
})

console.log(data) // NovelReadDto

请求参数 NovelReadQueryParams

字段类型必填说明
book_idnumber小说 ID
chapter_idnumber章节 ID,缺省时后台按上下文推断(如首章/续读)

响应 NovelReadDto

NovelReadDto

字段类型后台原始字段说明
idnumberid章节 ID,必填
book_idnumberbook_id小说 ID,默认 0
bookanybook小说附加信息(后台透传,未做类型化)
pidnumber | undefinedprev_id上一章 ID
nidnumber | undefinednext_id下一章 ID
book_titlestringbook_title小说名称,默认 ''
titlestringtitle章节标题,默认 ''
contentstringcontent章节正文原始文本,默认 ''
book_introducestringbook_introduce小说简介,默认 ''
book_cover_urlstringbook_cover_url小说封面图,默认 ''
total_chaptersnumbertotal_chapters总章节数,默认 0
word_numnumberword_num本章字数,默认 0
amountnumberamount解锁所需金币,默认 0
unlock_coinnumberunlock_coin解锁所需金币,默认 0
numbernumbernumber章节序号,默认 1
is_autonumberis_auto是否自动解锁,默认 0
is_unlockbooleanis_unlock是否已解锁,默认 false
isChargebooleanis_charge是否付费章节,默认 false
bookshelfStatusbooleanis_bookshelf是否已加入书架,默认 false
contentsArray<NovelViewItem>排版后的阅读区可视内容,初始为 [],由 formatMultiPages/formatSinglePage 生成
turnPageFormatedContentTurnPageContentViewProps手动翻页模式下排版后的内容,由 formatTurnPage 生成
formatMultiPages(sizes: ContentFormatSizes, option: ContentFormatOption) => void方法,按可视区尺寸将 content 分页写入 contents(多页/滚动模式)
formatSinglePage(option: ContentFormatOption) => void方法,将 content 整章排版为单页写入 contents
formatTurnPage() => void方法,将 content 排版为手动翻页格式写入 turnPageFormatedContent
paragraph() => string[]方法,将 content 按段落切分为字符串数组

排版相关方法用到的辅助类型:

类型定义说明
ContentFormatSizes{ words: number; lines: number }可视区可容纳的字数/行数
ContentFormatOption{ lineHeight: number; fontSize: number; fontName: string }排版所需的行高/字号/字体
NovelViewItem{ type: NovelViewType; content: NovelContentItem[]; title: string; number: number; amount: number; ad?: PlayListDto }阅读区一页的可视内容,typeNovelViewTypead 为文中插入的广告位,类型为 ad 领域的 PlayListDto
NovelContentItem{ type: NovelContentType; word: string; className: string; style: string; fontName: string; fontStyle: string }一页中的一个内容片段,typeNovelContentType
TurnPageContentViewProps{ type: TurnPageType; content: TurnPageContentViewItemProps[]; title: string; number: number; amount: number; words: number }手动翻页模式下一章的渲染内容,typeTurnPageType
TurnPageContentViewItemProps{ type: TurnPageContentViewItemType; content: string | null; show: boolean }手动翻页模式下一页的渲染片段,typeTurnPageContentViewItemType

adRead · IAA 模式阅读章节

用于广告解锁(IAA)小说的章节阅读接口。当后台返回错误码 417001 / 417002(章节未解锁)时,该用例会抛出一个 Error,并在其上挂载 code(错误码)与 data(用 NovelReadDto.fromJson 转换后的章节基础信息)两个附加属性,供业务方捕获后引导用户看广告解锁;其他错误则原样抛出。

ts
try {
  const { data } = await NovelDomain.cases.adRead.run({
    book_id: 1001,
    chapter_id: 2001,
    spread_id: '3001',
    scene: 0,
    force_auto_unlock: 0,
    not_record: 0,
    book_source_type: 1,
  })
  console.log(data) // NovelAdReadDto
} catch (error: any) {
  if (error.code === 417001 || error.code === 417002) {
    console.log(error.data) // NovelReadDto,章节未解锁时的基础信息
  }
}

请求参数 NovelAdReadQueryParams

字段类型必填说明
book_idIdentitystring | number小说 ID
chapter_idIdentity章节 ID
spread_idIdentity推广 ID
sceneDualState0 | 1阅读场景标记
force_auto_unlockDualState是否强制自动解锁
not_recordDualState是否跳过阅读记录
book_source_typenumber小说来源类型(数值,对应 BookSourceType

响应 NovelAdReadDto

NovelAdReadDto

字段结构、排版方法与 NovelReadDto 基本一致,差异仅在于 id/pid/nid 使用 Identitystring \| number)类型,且没有 book/book_introduce/book_cover_url/total_chapters/unlock_coin 等字段:

字段类型后台原始字段说明
idIdentitystring | numberid章节 ID,必填
book_idnumberbook_id小说 ID
pidIdentity | undefinedprev_id上一章 ID
nidIdentity | undefinednext_id下一章 ID
titlestringtitle章节标题,默认 ''
word_numnumberword_num本章字数,默认 0
amountnumberamount解锁所需金币,默认 0
numbernumbernumber章节序号,默认 1
is_autonumberis_auto是否自动解锁,默认 0
is_unlockbooleanis_unlock是否已解锁,默认 false
isChargebooleanis_charge是否付费章节,默认 false
bookshelfStatusbooleanis_bookshelf是否已加入书架,默认 false
contentsArray<NovelViewItem>排版后的阅读区可视内容,用法同 NovelReadDto
turnPageFormatedContentTurnPageContentViewProps手动翻页模式下排版后的内容,用法同 NovelReadDto
formatMultiPages / formatSinglePage / formatTurnPage / paragraphNovelReadDto排版辅助方法,用法一致

catalogues · 获取 IAP 模式小说目录(分页)

这是分页列表用例,返回结构为 { list: NovelCataloguesDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。

ts
const catalogues = NovelDomain.cases.catalogues

await catalogues.refresh({ book_id: 1001, page: 1, limit: 50 })

console.log(catalogues.list) // NovelCataloguesDto[]

请求参数 NovelCataloguesQueryParams

字段类型必填说明
book_idstring | number小说 ID
pagenumber页码
limitnumber每页条数

响应 { list: NovelCataloguesDto[] }

NovelCataloguesDto

字段类型说明
idstring | number章节 ID,必填
amountnumber解锁所需金币,默认 0
is_unlockboolean是否已解锁,默认 false
numbernumber章节序号,默认 1
titlestring章节标题,默认 ''

detail · 获取小说详情

ts
const { data } = await NovelDomain.cases.detail.run({
  book_id: 1001,
  scene: 0,
})

console.log(data) // NovelDetailDto

请求参数 NovelDetailQueryParams

字段类型必填说明
book_idstring | number小说 ID
scenenumber场景标记

响应 NovelDetailDto

NovelDetailDto

字段类型后台原始字段说明
idIdentitystring | numberid小说 ID,必填
is_auto0 | 1is_auto是否自动解锁,默认 0
bookshelfStatusbooleanis_bookshelf是否已加入书架,默认 false
book_coverstringbook_cover封面图,默认给定占位图 URL
thumbstringthumbnail_cover_url缩略封面图,默认 ''
authorstringauthor作者,默认 '佚名'
book_namestringbook_name书名,默认 '暂无书名'
descstringintroduce简介,默认 '暂无介绍'
total_chaptersnumbertotal_chapters总章节数,默认 1
total_wordsnumbertotal_words总字数,默认 0
browse_numnumberbrowse_num浏览量,默认 1
scorenumberscore评分,默认 0
update_statusnumberupdate_status更新状态原始数值,默认 0
class_namestringclass_name分类名称,默认 ''
class_idnumberclass_id分类 ID,默认 0
keywordsstringkeywords关键词,默认 ''
leadNamestringlead_name领读人名称,默认 ''
nearNovelDetailNearDtonear_chapter最近阅读章节信息,默认新建一个 NovelDetailNearDto 实例
formatAuthorstringgetter,'{author}•著''佚名'
wordsstringgetter,'{格式化后的 total_words}字'
chaptersstringgetter,'共{total_chapters}章'
statusstringgetter,'连载中' / '已完结'
scoreNamestring | nullgetter,score >= 80 时返回 '畅销',否则 null

NovelDetailNearDto 详情页最近阅读章节

不可变(@Freeze)。

字段类型后台原始字段说明
bookIdnumber小说 ID,默认 0
chapterTitlestringtitle章节标题,默认 ''
numbernumbernumber章节序号,默认 1
amountnumberunlock_coin解锁所需金币,默认 0
wordsnumberword_num字数,默认 0
chapterIdnumberid章节 ID,默认 0
isChargebooleanis_charge是否付费章节,默认 false

unlock · IAP 模式解锁章节

解锁成功后返回该章节的完整阅读内容(与 read 用例返回同一种 DTO)。

ts
const { data } = await NovelDomain.cases.unlock.run({
  book_id: 1001,
  chapter_id: 2001,
  spread_id: '3001',
  scene: 0,
  ad_confirmed: 0,
  is_auto: 0,
})

console.log(data) // NovelReadDto

请求参数 NovelUnlockBodyParams

字段类型必填说明
book_idIdentitynumber | string小说 ID
chapter_idIdentity章节 ID
spread_idIdentity推广 ID
sceneDualState0 | 1解锁场景标记
ad_confirmedDualState是否已完成广告观看确认
is_autoDualState是否自动解锁

响应 NovelReadDto

字段定义见 read 用例的 NovelReadDto

reading · 上报阅读时长

ts
await NovelDomain.cases.reading.run({ duration: 30 })

请求参数 NovelReadingBodyParams

字段类型必填说明
durationnumber本次上报的阅读时长(秒)

响应

无格式化 DTO,直接透传后台原始返回。

delBookshelf · 从书架移除小说

ts
await NovelDomain.cases.delBookshelf.run({ book_id: 1001 })

请求参数 NovelDelBookshelfBodyParams

字段类型必填说明
book_idstring | number小说 ID

响应

无格式化 DTO,直接透传后台原始返回。

addBookshelf · 添加小说到书架

该用例继承自 ModuleUseCase(而非 BaseUseCase),额外提供响应式的 statusShallowRef<ModuleUseCaseStatus | null>,取值 running/success/failure)与 error(失败时的错误信息字符串),便于在模板中直接绑定加载态,无需额外维护 loading 变量:

ts
const addBookshelf = NovelDomain.cases.addBookshelf

await addBookshelf.run({ book_id: 1001 })

console.log(addBookshelf.status.value) // 'success' | 'failure' | 'running'
console.log(addBookshelf.data) // 等价于 run() 返回的 data

请求参数 NovelAddBookshelfQueryParams

字段类型必填说明
book_idstring | number小说 ID

响应

无格式化 DTO,直接透传后台原始返回(NovelAddBookshelfDto 实体虽已定义但当前未被此用例使用)。

reads · 获取阅读记录(分页)

这是分页列表用例,返回结构为 { list: NovelReadsDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。

ts
const reads = NovelDomain.cases.reads

await reads.refresh({ page: 1, limit: 20 })

console.log(reads.list) // NovelReadsDto[]

请求参数 NovelReadsQueryParams

字段类型必填说明
pagenumber页码
limitnumber每页条数

响应 { list: NovelReadsDto[] }

NovelReadsDto

字段类型后台原始字段说明
idnumberid阅读记录 ID,必填
book_idnumberbook_id小说 ID,默认 0
appIdnumberapp_id应用 ID
bookCoverstringbook_cover封面图,默认 ''
bookTitlestringbook_title小说名称,默认 ''
created_atstringcreated_at创建时间,默认 ''
isAutonumber是否自动解锁,默认 0
wechatBookIdstringwechat_book_id微信小说 ID,默认 ''
isBookshelfbooleanis_bookshelf是否已加入书架,默认 false
read_chapter_idnumberread_chapter_id最近阅读章节 ID,默认 0
read_chapter_namestringread_chapter_name最近阅读章节标题,默认 ''
read_chapter_numbernumberread_chapter_number最近阅读章节序号,默认 0
uidnumberuid用户 ID,默认 0
updated_atstringupdated_at更新时间,默认 ''

delRead · 删除阅读记录

ts
await NovelDomain.cases.delRead.run({ read_id: 5001 })

请求参数 NovelDelReadBodyParams

字段类型必填说明
read_idstring | number阅读记录 ID

响应

无格式化 DTO,直接透传后台原始返回。

rankSingle · 获取单个榜单详情(分页)

这是分页列表用例,返回结构为 { list: NovelRankListDataDto[] }(分页遍历的是该榜单下的小说数据,与 rankList 分页遍历"多个榜单"不同),建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。请求路径与 rankList 相同(GET novel/list),但响应格式化器不同:内部先用 NovelRankSingleDto.fromJson 解析出单个榜单对象,再把其 list 字段包装为分页结果返回。

ts
const rankSingle = NovelDomain.cases.rankSingle

await rankSingle.refresh({ channel: 1, list_name: '新书榜' })

console.log(rankSingle.list) // NovelRankListDataDto[]

请求参数 NovelRankSingleQueryParams

字段类型必填说明
channelnumber频道
list_namestring榜单名称

响应 { list: NovelRankListDataDto[] }

NovelRankListDataDto 字段定义见 rankList 用例中的 NovelRankListDataDto

补充:中间态的 NovelRankSingleDto(不可变,@Freeze,仅用于内部解析,不直接作为 run() 的返回值)结构如下:

字段类型说明
infoNovelRankListInfoDto榜单信息,默认新建一个 NovelRankListInfoDto 实例
listNovelRankListDataDto[]榜单下的小说数据,默认 []

cataloguesAll · 获取全量小说目录(分页)

这是分页列表用例,返回结构为 { list: NovelCataloguesAllDto[] },建议参考快速开始 · 分页列表请求的用法只 new 一次并复用实例。与 catalogues 不同,该接口不分页拉取而是一次性返回全量目录,且响应未经过 DTO 格式化器转换,直接透传后台原始返回并按 PagedResultDto 类型断言包装。

ts
const cataloguesAll = NovelDomain.cases.cataloguesAll

await cataloguesAll.refresh({ book_id: 1001 })

console.log(cataloguesAll.list) // 后台原始返回,类型标注为 NovelCataloguesAllDto[],但运行时未做字段转换

请求参数 NovelCataloguesAllQueryParams

字段类型必填说明
book_idnumber小说 ID

响应 { list: NovelCataloguesAllDto[] }

NovelCataloguesAllDto(不可变,@Freeze;如前所述,该仓储方法实际未接入此 DTO 的转换器,仅作为类型标注)

字段类型说明
idstring必填

枚举

BookChannel 小说频道

枚举成员valuecode说明
GENERAL0general通频
MALE1male男频
FEMALE2female女频
ALL3all不区分频道

BookSourceType 小说来源类型

枚举成员valuecode说明
WTDJ1wtdj外推小说
WTGB2wtgb外推挂包
NT3nt内推
SWTJ4swtj首位推荐
BDTJ5bdtj榜单推荐
FL6fl分类
SEARCH7search搜索
XTTS8xtts系统推送
XSMF9xsmf限时免费
SHARE10share分享
OTHER99other其他

BookUpdateStatus 小说更新状态

枚举成员valuecode说明
ALL0all全部
SERIALIZED1serialized连载中
COMPLETED2completed已完结

以下四个是原生 TypeScript enum(非 BaseEnumeration,无 code/text,仅用于 NovelReadDto/NovelAdReadDto 排版辅助类型的内部标记),只列出成员名与数值:

NovelViewType 阅读区可视内容类型

枚举成员数值说明
content0正文内容
ad1广告位
locked2未解锁遮罩

NovelContentType 正文内容片段类型

枚举成员数值说明
block0段落块
title1标题
head2页首
tail3页尾
mid4中间态
txt5普通文本
footer6页脚

TurnPageType 手动翻页章节类型

枚举成员数值说明
content0正文内容
ad1隔章广告
locked2未解锁遮罩

TurnPageContentViewItemType 手动翻页内容片段类型

枚举成员数值说明
title0标题
ad1章内文中广告
txt2普通文本
end3章节结尾(固定文案"--本章结束--",可按需修改)
menu4菜单
others5其他

内部工具包 · 未开源授权,仅限公司内部授权团队使用