通过关键词搜索磁力链接资源
通过关键词搜索磁力链接资源,支持多站点切换与国产资源搜索。
作者: 蜥蜴
⚠️ 免责声明
本插件仅用于学习与研究目的。请勿配置于 QQ 或其他国内社交平台,由此产生的后果由使用者自行承担。
- 数据来源于第三方磁力资源站点
- 需搭配
koishi-plugin-puppeteer使用
背景
在相关社群中通过关键词检索磁力资源,传统流程通常为:
- 打开浏览器访问磁力资源站点
- 输入关键词或番号搜索
- 在搜索结果中逐条点开查看详情
- 手动复制磁力链接并转发至群聊
该流程操作繁琐,尤其在移动端不便。koishi-plugin-magnet-get-lizard 将上述步骤整合为一条聊天指令,可在群聊或私聊中直接完成查询。
工具定位
koishi-plugin-magnet-get-lizard 是一款基于 Koishi 框架的磁链搜索插件,当前版本为 0.0.2,依赖 Koishi 4.18.8 与 koishi-plugin-puppeteer。
| 能力 | 说明 |
|---|---|
| 关键词搜索 | 通过关键词检索磁力资源 |
| 模糊匹配 | 无需严格输入番号,支持模糊搜索 |
| 中文搜索 | 支持中文关键词,如「某某探花」等 |
| 多站点切换 | 内置多个资源站点,搜索失败时可切换 |
| 数量控制 | 可配置单次返回的搜索结果数量 |
| 影片信息 | 可选展示发布日期、影片信息、演员等 |
安装
前置条件
- 已搭建并可正常运行的 Koishi 项目(
koishi-app) - 已安装并启用 puppeteer 插件(插件声明
inject: ['puppeteer'],页面抓取依赖该服务) - 部署环境具备访问磁力资源站点的网络条件(必要时配置代理)
方式一:通过插件市场安装(推荐)
- 启动 Koishi 项目,打开控制台(默认地址
http://localhost:5140)。 - 进入左侧「插件市场」。
- 在搜索框中输入
magnet-get-lizard。 - 找到插件后点击「添加」,Koishi 会自动完成依赖安装与配置写入。
方式二:通过 npm 安装
在 Koishi 项目根目录执行:
1 | npm install koishi-plugin-magnet-get-lizard |
随后在 koishi.yml 中手动添加配置:
1 | plugins: |
方式三:通过 yarn / pnpm 安装
若项目使用 yarn 或 pnpm,可执行:
1 | # yarn |
安装 puppeteer
插件声明了 inject: ['puppeteer'],页面抓取依赖 puppeteer 服务。若尚未安装,可执行:
1 | npm install koishi-plugin-puppeteer |
在 koishi.yml 中相应配置:
1 | plugins: |
首次使用 puppeteer 时,Koishi 会自动下载 Chromium,请确保网络可用。
验证安装
在任意已接入机器人的聊天窗口输入:
1 | 搜片 sone111 |
若能返回磁链查询结果,则说明安装成功。
配置
配置项
| 配置项 | 类型 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|
site |
string | https://18mag.net |
见下文站点列表 | 搜索使用的资源站点,搜索失败时可切换 |
maxResults |
number | 5 | ≥ 1 | 搜索结果展示数量 |
ifMessage |
boolean | false | — | 是否展示影片信息(发布日期、影片信息、演员) |
内置站点
site 可取值如下:
| 站点 |
|---|
https://18mag.net |
https://xcili.com |
https://1cili.com |
https://cili.info |
https://cili.uk |
https://wuji.me |
若某个站点持续搜索失败,可在配置中更换其他站点后重试。
配置示例
1 | plugins: |
maxResults 控制单次搜索返回的候选条数,默认 5 条。ifMessage 开启后会一并展示发布日期、影片信息与演员,但并非每条结果都包含完整信息。
使用流程
指令列表
| 指令 | 说明 | 示例 |
|---|---|---|
搜片 <关键词> |
关键词搜索磁链资源 | 搜片 sone111 |
流程一:关键词搜索
步骤 1:发送搜索指令
在群聊或私聊中输入关键词:
1 | 搜片 sone111 |
关键词支持模糊匹配,无需严格输入番号;亦支持中文搜索,例如:
1 | 搜片 某某探花 |
步骤 2:接收搜索结果
机器人逐条返回搜索结果,每条包含标题与影片信息:
1 | 标题:SONE-111 〇〇〇 |
ifMessage: false 时仅展示标题与磁链;ifMessage: true 时额外展示发布日期、影片信息与演员。
步骤 3:无结果处理
若无匹配结果,机器人返回「没有找到相关信息,请更换关键词重试」。可尝试更换关键词或切换 site 后重试。
步骤 4:异常处理
若抓取过程中发生异常,机器人返回「获取失败,请稍后重试。」,并在控制台记录错误详情。
使用场景
场景一:群聊内快速查询
群聊中提及某个番号或资源名时,可直接通过 搜片 <关键词> 获取磁链,并分享至群内。
场景二:国产资源检索
插件支持中文关键词模糊搜索,可直接检索国产资源,例如「某某探花」等。
场景三:与 javbus-lizard 配合使用
本插件采集速度较快,但影片信息不够完整。若需要完整的影片详情,可结合 javbus-lizard 使用:先通过本插件获取磁链,再通过 javbus-lizard 查询影片详情。
技术实现
技术栈
| 技术 | 用途 |
|---|---|
| Koishi | 机器人框架 |
| TypeScript | 开发语言 |
| koishi-plugin-puppeteer | 页面抓取与数据提取 |
| 第三方磁力站点 | 数据来源 |
与站点的交互
插件通过 site 配置拼接访问资源站点,涉及两个页面:
| 页面 | 路径 | 用途 |
|---|---|---|
| 搜索页 | /search?q=<关键词> |
关键词搜索,返回结果列表 |
| 详情页 | 搜索结果中的链接 | 获取标题与磁链等详情 |
搜索页的拼接方式为:
1 | const searchUrl = `${config.site}/search?q=${encodeURIComponent(keyword)}` |
关键词通过 encodeURIComponent 编码后拼接,以适配中文与特殊字符。
核心设计
页面抓取
插件通过 puppeteer 打开页面,并以 domcontentloaded 作为等待条件:
1 | const page = await ctx.puppeteer.page() |
抓取完成后调用 page.close() 释放页面资源。
搜索结果筛选
搜索结果从 .file-list tr a 中提取。插件仅保留包含 <b> 子节点的链接,取其 href,拼接站点前缀后反转并截取:
1 | let links = await page.$$eval('.file-list tr a', (elements, max, site) => { |
reverse() 用于调整结果的先后顺序,slice(0, max) 按 maxResults 截取。
详情信息解析
逐条访问详情页,从 .magnet-title 与 .torrent-info dt 中提取信息:
1 | const title = document.querySelector('.magnet-title')?.textContent?.trim() |
dt 元素的「种子特征码」会被转换为磁链:
1 | if (key === '种子特征码') { |
ifMessage 为 false 时,会过滤掉「发布日期」「影片信息」「演员」三项;「推荐网盘」在所有情况下均被过滤。
错误处理
抓取过程包裹在 try / catch 中,异常时在控制台记录错误并返回统一文案「获取失败,请稍后重试。」。
注意事项
1. puppeteer 依赖
插件声明了 inject: ['puppeteer'],页面抓取依赖 puppeteer 服务。若未启用该插件,指令将不可用。首次使用时会自动下载 Chromium。
2. 站点可用性
内置站点均为第三方服务,可能出现:
- 站点无法访问或响应缓慢
- 页面结构变动导致解析失败
- 内容收录范围有限,部分关键词搜索不到结果
若某个站点持续失败,可在配置中更换其他站点后重试。
3. 影片信息不完整
ifMessage 开启后展示的影片信息由站点提供,并非每条结果都包含完整信息。若需要完整的影片详情,建议结合 javbus-lizard 使用。
4. 抓取速度
插件需逐条访问详情页以提取信息,maxResults 越大,耗时越长。建议按需设置,避免单次请求过多页面。
5. 平台选择
请勿将本插件配置于 QQ 或其他国内社交平台。建议部署于自建的、受控的机器人实例中。
常见问题
Q1:提示「没有找到相关信息,请更换关键词重试」?
可能原因包括:
- 关键词与实际资源不匹配
- 当前站点未收录相关资源
- 站点页面结构变动导致解析失败
可尝试更换关键词,或在配置中切换 site 后重试。
Q2:提示「获取失败,请稍后重试。」?
说明抓取过程中发生异常。可检查:
- puppeteer 是否正常运行
- 部署环境能否访问
site配置的站点 - 站点是否响应缓慢或触发限流
Q3:为什么搜索结果条数少于 maxResults?
maxResults 为上限而非固定值。实际返回条数取决于站点返回的结果数量与筛选条件。
Q4:为什么开启 ifMessage 后影片信息仍不完整?
影片信息由站点提供,并非每条结果都包含完整信息。若需要完整的影片详情,可结合 javbus-lizard 使用。
Q5:安装后指令无响应?
依次检查以下项:
- 插件是否已在控制台启用
koishi-plugin-puppeteer是否已安装并启用- 机器人是否已成功连接至目标平台
- 指令是否完整输入(
搜片与关键词之间以空格分隔)
Q6:磁链的有效性由谁决定?
磁力链接的有效性取决于种子资源本身,与插件无关。
开发计划
- 支持更多资源站点
- 增加搜索结果排序选项
- 优化抓取速度,减少页面访问次数
- 支持结果缓存
获取工具
- npm 包:
koishi-plugin-magnet-get-lizard - GitHub 仓库:lizard0126/magnet-get-lizard
- 相关插件:lizard0126/javbus-lizard
- 反馈建议:GitHub Issues
- 支持作者:请我喝可乐