网络小说搜索与下载(项目已废弃,接口不再维护)
通过关键词搜索网络小说,并在聊天框中获取小说详情、封面与下载链接。
作者: 蜥蜴
⚠️ 项目状态
本项目已废弃,所对接的第三方接口不再维护,插件可能无法正常返回搜索结果与下载链接。
本文保留作为使用记录与实现参考。如需在现有机器人中使用,请自行评估接口可用性。
背景
网络小说的检索通常需要在专门的阅读类网站或 App 中完成,搜索、翻页、查看简介、下载文件等步骤分散,操作较为繁琐。若希望在日常聊天中直接获取,需要通过机器人调用第三方小说接口。
koishi-plugin-novel-lizard 将搜索、选择与下载整合为一组聊天指令,可在群聊或私聊中完成完整的搜索流程。
工具定位
koishi-plugin-novel-lizard 是一款基于 Koishi 框架的小说搜索插件,主要能力如下:
| 能力 | 说明 |
|---|---|
| 关键词搜索 | 通过关键词检索网络小说 |
| 序号选择 | 从搜索结果中选择目标小说 |
| 详情展示 | 展示标题、作者、分类与简介 |
| 封面推送 | 返回小说封面图 |
| 文件下载 | 以文件形式发送小说文本 |
| 超时取消 | 搜索会话超时后自动取消 |
当前版本为 1.0.1,依赖 Koishi ^4.18.0。
安装
前置条件
- 已搭建并可正常运行的 Koishi 项目(
koishi-app)
方式一:通过插件市场安装(推荐)
- 启动 Koishi 项目,打开控制台(默认地址
http://localhost:5140)。 - 进入左侧「插件市场」。
- 在搜索框中输入
novel-lizard。 - 找到插件后点击「添加」,Koishi 会自动完成依赖安装与配置写入。
方式二:通过 npm 安装
在 Koishi 项目根目录执行:
1 | npm install koishi-plugin-novel-lizard |
随后在 koishi.yml 中手动添加配置:
1 | plugins: |
方式三:通过 yarn / pnpm 安装
若项目使用 yarn 或 pnpm,可执行:
1 | # yarn |
验证安装
在任意已接入机器人的聊天窗口输入:
1 | 小说 斗破苍穹 |
若能返回搜索结果列表,则说明安装成功。
配置
配置项
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
apiUrl |
string | https://www.hhlqilongzhu.cn/api/novel_new.php |
第三方接口地址,默认值请勿更改 |
配置示例
1 | plugins: |
接口地址由 apiUrl 统一提供,搜索与详情请求均基于该地址拼接参数。默认值请勿更改。
使用流程
指令为 小说 <关键词>,别名 网文。
指令列表
| 指令 | 说明 | 示例 |
|---|---|---|
小说 <关键词> |
搜索网络小说 | 小说 斗破苍穹 |
小说 |
未提供关键词时的提示 | 小说 |
流程一:搜索并查看小说
步骤 1:发送搜索指令
1 | 小说 斗破苍穹 |
若无关键词,插件将返回提示「请提供关键词,例如:小说 总裁」。
步骤 2:从搜索结果中选择
插件返回带序号的搜索结果:
1 | 1. 斗破苍穹 |
在 15 秒内回复对应序号,或输入 0 取消搜索。
步骤 3:查看小说详情
选择编号后,插件依次返回:
- 标题、作者、分类与简介
- 小说封面图
- 小说文件
详情文本格式如下:
1 | 标题:斗破苍穹 |
步骤 4:接收封面与文件
- 若接口返回封面地址,插件下载封面图并以图片形式发送
- 若接口返回下载地址,插件下载文件并以
<标题>.txt发送 - 若无下载内容,插件返回「无下载内容」
步骤 5:取消或超时
- 输入
0:主动取消,清除会话状态 - 超过 15 秒未操作:会话状态自动清除,并提示「操作超时,本次搜索已取消。」
使用场景
场景一:群聊内快速检索
群聊中提及某本小说时,可直接通过 小说 <关键词> 检索并分享详情与下载链接。
场景二:私聊使用
若不便在群聊中操作,可在私聊中使用相同指令。会话状态按 userId 存储,不同用户之间互不影响。
技术实现
技术栈
| 技术 | 用途 |
|---|---|
| Koishi | 机器人框架 |
| TypeScript | 开发语言 |
| 第三方小说接口 | 搜索、详情与下载数据来源 |
接口调用
插件通过 apiUrl 拼接参数获取数据,共涉及两次调用:
| 参数 | 用途 | 返回内容 |
|---|---|---|
?name=<关键词>&type=json |
关键词搜索 | 小说列表(n 序号与 name 标题) |
?name=<关键词>&n=<序号>&type=json |
获取小说详情 | 标题、作者、分类、简介、封面、下载地址 |
核心设计
会话状态管理
搜索结果与关键词缓存在内存对象中,以 userId 为键:
1 | const userContext: Record<string, { keyword: string; list: any[]; timeout?: NodeJS.Timeout }> = {}; |
超时取消
搜索后启动一个 15 秒的定时器,超时后清除缓存并提示:
1 | const timeout = setTimeout(() => { |
序号输入处理
序号输入通过 ctx.middleware 拦截处理。若用户存在会话状态,则解析其输入:
0:清除缓存并取消- 合法序号:进入详情流程
- 其他输入:提示需输入有效序号
封面与文件下发
封面图与文件均以 Buffer 形式发送:
1 | const coverResponse = await ctx.http.get(detail.img); |
文件以 text/plain 形式发送,文件名为 <标题>.txt。
注意事项
1. 项目已废弃
所依赖的第三方接口已不再维护,插件可能无法正常返回搜索结果与下载链接。本文档仅作为使用记录保留。
2. 接口稳定性
默认接口为第三方服务,可能出现限流或返回异常。如遇请求失败,建议稍后重试,不建议自行修改 apiUrl。
3. 会话超时
搜索会话的有效期为 15 秒。若超时前未选择序号,需重新搜索。
4. 平台选择
请合理使用,避免因滥用导致接口限制或封禁。
常见问题
Q1:安装后输入指令无响应?
依次检查以下项:
- 插件是否已在控制台启用
- 机器人是否已成功连接至目标平台
- 指令是否完整输入(
小说与关键词之间以空格分隔)
Q2:搜索时提示「未找到相关小说」?
可能的原因包括:
- 关键词与实际标题不符,可尝试更换关键词
- 第三方接口暂时不可用
- 该书未收录于接口数据源中
Q3:请求失败如何处理?
提示「请求失败」说明插件在调用接口过程中发生异常。所依赖的第三方接口已不再维护,出现请求失败属预期情况。若接口临时恢复,插件仍可正常使用。
Q4:文件下载失败?
说明封面或文件地址不可达,或接口未返回有效下载地址。可稍后重试;若无下载内容,插件会返回「无下载内容」。
Q5:序号输入后无反应?
请确认序号在有效范围内(1 至搜索结果条数之间),或在 15 秒内完成输入。超时后会话状态会清除,需重新搜索。
Q6:可以在多个设备之间共享搜索状态吗?
搜索状态按 userId 存储于内存中,机器人重启后会清空。同一账号在不同会话中共享同一状态,不同账号之间互不影响。
获取工具
- npm 包:
koishi-plugin-novel-lizard - GitHub 仓库:lizard0126/novel-lizard
- 反馈建议:GitHub Issues
- 支持作者:请我喝可乐