网络小说搜索与下载(项目已废弃,接口不再维护)

通过关键词搜索网络小说,并在聊天框中获取小说详情、封面与下载链接。
作者: 蜥蜴


⚠️ 项目状态

本项目已废弃,所对接的第三方接口不再维护,插件可能无法正常返回搜索结果与下载链接。

本文保留作为使用记录与实现参考。如需在现有机器人中使用,请自行评估接口可用性。


背景

网络小说的检索通常需要在专门的阅读类网站或 App 中完成,搜索、翻页、查看简介、下载文件等步骤分散,操作较为繁琐。若希望在日常聊天中直接获取,需要通过机器人调用第三方小说接口。

koishi-plugin-novel-lizard 将搜索、选择与下载整合为一组聊天指令,可在群聊或私聊中完成完整的搜索流程。


工具定位

koishi-plugin-novel-lizard 是一款基于 Koishi 框架的小说搜索插件,主要能力如下:

能力 说明
关键词搜索 通过关键词检索网络小说
序号选择 从搜索结果中选择目标小说
详情展示 展示标题、作者、分类与简介
封面推送 返回小说封面图
文件下载 以文件形式发送小说文本
超时取消 搜索会话超时后自动取消

当前版本为 1.0.1,依赖 Koishi ^4.18.0。


安装

前置条件

  • 已搭建并可正常运行的 Koishi 项目(koishi-app)

方式一:通过插件市场安装(推荐)

  1. 启动 Koishi 项目,打开控制台(默认地址 http://localhost:5140)。
  2. 进入左侧「插件市场」。
  3. 在搜索框中输入 novel-lizard。
  4. 找到插件后点击「添加」,Koishi 会自动完成依赖安装与配置写入。

方式二:通过 npm 安装

在 Koishi 项目根目录执行:

1
npm install koishi-plugin-novel-lizard

随后在 koishi.yml 中手动添加配置:

1
2
3
plugins:
novel-lizard:
apiUrl: https://www.hhlqilongzhu.cn/api/novel_new.php

方式三:通过 yarn / pnpm 安装

若项目使用 yarn 或 pnpm,可执行:

1
2
3
4
5
# yarn
yarn add koishi-plugin-novel-lizard

# pnpm
pnpm add koishi-plugin-novel-lizard

验证安装

在任意已接入机器人的聊天窗口输入:

1
小说 斗破苍穹

若能返回搜索结果列表,则说明安装成功。


配置

配置项

参数 类型 默认值 说明
apiUrl string https://www.hhlqilongzhu.cn/api/novel_new.php 第三方接口地址,默认值请勿更改

配置示例

1
2
3
plugins:
novel-lizard:
apiUrl: https://www.hhlqilongzhu.cn/api/novel_new.php

接口地址由 apiUrl 统一提供,搜索与详情请求均基于该地址拼接参数。默认值请勿更改。


使用流程

指令为 小说 <关键词>,别名 网文。

指令列表

指令 说明 示例
小说 <关键词> 搜索网络小说 小说 斗破苍穹
小说 未提供关键词时的提示 小说

流程一:搜索并查看小说

步骤 1:发送搜索指令

1
小说 斗破苍穹

若无关键词,插件将返回提示「请提供关键词,例如:小说 总裁」。

步骤 2:从搜索结果中选择

插件返回带序号的搜索结果:

1
2
3
4
5
1. 斗破苍穹
2. 斗破苍穹之……
3. ……

请输入序号以查看详情(输入"0"取消操作)。

在 15 秒内回复对应序号,或输入 0 取消搜索。

步骤 3:查看小说详情

选择编号后,插件依次返回:

  • 标题、作者、分类与简介
  • 小说封面图
  • 小说文件

详情文本格式如下:

1
2
3
4
标题:斗破苍穹
作者:天蚕土豆
分类:玄幻
简介:……

步骤 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
2
3
4
const timeout = setTimeout(() => {
delete userContext[session.userId];
session.send('操作超时,本次搜索已取消。').catch(() => { });
}, 15 * 1000);

序号输入处理

序号输入通过 ctx.middleware 拦截处理。若用户存在会话状态,则解析其输入:

  • 0:清除缓存并取消
  • 合法序号:进入详情流程
  • 其他输入:提示需输入有效序号

封面与文件下发

封面图与文件均以 Buffer 形式发送:

1
2
3
4
5
const coverResponse = await ctx.http.get(detail.img);
await session.send(h.image(coverResponse));

const fileResponse = await ctx.http.get(detail.download, { responseType: 'arraybuffer' });
await session.send(h.file(Buffer.from(fileResponse), 'text/plain', { title: `${detail.title}.txt` }));

文件以 text/plain 形式发送,文件名为 <标题>.txt。


注意事项

1. 项目已废弃

所依赖的第三方接口已不再维护,插件可能无法正常返回搜索结果与下载链接。本文档仅作为使用记录保留。

2. 接口稳定性

默认接口为第三方服务,可能出现限流或返回异常。如遇请求失败,建议稍后重试,不建议自行修改 apiUrl。

3. 会话超时

搜索会话的有效期为 15 秒。若超时前未选择序号,需重新搜索。

4. 平台选择

请合理使用,避免因滥用导致接口限制或封禁。


常见问题

Q1:安装后输入指令无响应?

依次检查以下项:

  • 插件是否已在控制台启用
  • 机器人是否已成功连接至目标平台
  • 指令是否完整输入(小说 与关键词之间以空格分隔)

Q2:搜索时提示「未找到相关小说」?

可能的原因包括:

  • 关键词与实际标题不符,可尝试更换关键词
  • 第三方接口暂时不可用
  • 该书未收录于接口数据源中

Q3:请求失败如何处理?

提示「请求失败」说明插件在调用接口过程中发生异常。所依赖的第三方接口已不再维护,出现请求失败属预期情况。若接口临时恢复,插件仍可正常使用。

Q4:文件下载失败?

说明封面或文件地址不可达,或接口未返回有效下载地址。可稍后重试;若无下载内容,插件会返回「无下载内容」。

Q5:序号输入后无反应?

请确认序号在有效范围内(1 至搜索结果条数之间),或在 15 秒内完成输入。超时后会话状态会清除,需重新搜索。

Q6:可以在多个设备之间共享搜索状态吗?

搜索状态按 userId 存储于内存中,机器人重启后会清空。同一账号在不同会话中共享同一状态,不同账号之间互不影响。


获取工具