name: media-search description: 搜索电影种子/磁力链接、搜索下载音乐专辑、管理 qBittorrent 下载任务。触发词:找资源、下载、磁力、种子、torrent、magnet、影视、音乐下载、qBt、搜电影、下电影、搜歌、下歌
资源搜索 Skill
触发条件
当用户请求以下任意内容时使用此 Skill:
- 搜索电影种子 / magnet / torrent 链接
- 搜索磁力资源
- 搜索、下载音乐专辑
- 添加/管理 qBittorrent 下载任务
- 提到"找资源"、"下载"、"磁力"、"种子"、"torrent"、"magnet"、"影视"、"音乐下载"、"qBt"、"搜电影"、"下电影"、"搜歌"、"下歌"
文件清单
| 文件 | 功能 | 依赖 |
|---|---|---|
scripts/search-movie.sh |
YTS 电影搜索,输出 torrent + magnet | curl, jq |
scripts/search-magnet.sh |
cilisousuo.co 磁力搜索 | curl, python3 |
scripts/search-music.sh |
JOOX 专辑搜索,输出 TSV | curl, jq |
scripts/download-music.sh |
JOOX 专辑下载(音频 + 歌词) | curl, jq, perl |
scripts/qbt.sh |
qBittorrent Web API 操作 | curl, jq |
赋予可执行权限:
chmod +x scripts/*.sh
工作流
根据用户意图,选择对应流程执行。如果意图不明确,优先询问用户要搜索什么类型的资源(电影/音乐/磁力),再进入对应流程。
流程 A:电影搜索
Step 1: 解析用户意图,提取搜索关键词
- 如果用户指定了质量偏好,加 --quality 参数
- 如果用户指定了数量,加 --limit 参数
Step 2: 执行搜索
./scripts/search-movie.sh search "关键词" --limit 5
Step 3: 按以下格式展示结果给用户:
📽️ [编号] 标题 (年份) ⭐ 评分
质量: xxx | 大小: xxx | Seeds: xxx
ID: xxx | IMDb: xxx
Step 4: 🔍 确认 — 询问用户选择哪条结果(编号),或调整搜索条件
Step 5: 用户选择后,用 details 命令获取完整信息:
./scripts/search-movie.sh details --movie-id {ID}
展示该条目的所有可用质量版本及对应 magnet 链接
Step 6: 🔍 确认 — 询问是否添加到 qBittorrent
- 是 → 执行 流程D(qBt 投递),传入 magnet 链接
- 否 → 结束
流程 B:音乐搜索与下载
Step 1: 解析用户意图,提取艺术家/专辑关键词
Step 2: 执行搜索
./scripts/search-music.sh "关键词" 10
Step 3: 输出为 TSV 格式(ID\t专辑名\t艺术家\t年份\t曲目数),按以下格式展示:
🎵 [编号] 专辑名 — 艺术家 (年份) [N首]
Step 4: 🔍 确认 — 询问用户选择哪张专辑(编号)
Step 5: 用户选择后,用对应 ID 执行下载
./scripts/download-music.sh {album_id}
如用户指定了自定义目录:
./scripts/download-music.sh {album_id} ~/自定义路径
Step 6: 实时展示下载状态:
- DONE_AUDIO → ✅ 曲名 下载完成
- SKIP_EXISTS → ⏭️ 曲名 已存在,跳过
- FAIL_AUDIO/FAIL_NO_URL → ❌ 曲名 下载失败
Step 7: 告知下载目录:{JOOX_ROOT_DIR}/{艺术家}/{专辑名}/
流程 C:磁力搜索
Step 1: 解析用户意图,提取搜索关键词
Step 2: 执行搜索
./scripts/search-magnet.sh "关键词" 5
Step 3: 按以下格式展示结果:
🧲 [编号] 标题 (大小)
Step 4: 🔍 确认 — 询问用户选择哪条结果(编号)
Step 5: 用户选择后,展示对应的磁力链接
Step 6: 🔍 确认 — 询问是否添加到 qBittorrent
- 是 → 执行 流程D(qBt 投递)
- 否 → 结束
流程 D:qBittorrent 投递
前置条件:已获取 magnet 链接或 torrent URL
Step 1: 根据资源类型建议分类:
- 电影 → --category movies --save-path /downloads/movies
- 音乐 → --category music --save-path /downloads/music
- 其他 → 询问用户
Step 2: 🔍 确认 — 展示投递参数(路径、分类),用户确认后执行
Step 3: 执行添加
./scripts/qbt.sh add "magnet:..." --save-path PATH --category NAME
Step 4: 验证添加结果
./scripts/qbt.sh list --filter downloading --limit 5
Step 5: 报告结果
- ✅ 成功 → 展示任务名、大小、状态
- ❌ 失败 → 检查连接(./scripts/qbt.sh status),报告具体错误
快速用法
# 电影搜索
./scripts/search-movie.sh search "the matrix" --quality 1080p --limit 5
./scripts/search-movie.sh list --genre action --minimum-rating 7 --sort-by rating
./scripts/search-movie.sh details --imdb-id tt0133093
./scripts/search-movie.sh suggestions --movie-id 3525
# 磁力搜索
./scripts/search-magnet.sh "MIDV-022" 5
./scripts/search-magnet.sh "关键词" 10
# 音乐搜索
./scripts/search-music.sh "周杰伦" 10
# 音乐下载
./scripts/download-music.sh 12345
./scripts/download-music.sh 12345 ~/Music/joox
# 搜索并直接下载第一个结果
./scripts/search-music.sh "周杰伦" 1 2>/dev/null | head -1 | awk -F'\t' '{print $3}' | xargs ./scripts/download-music.sh
# qBittorrent
./scripts/qbt.sh add "magnet:?xt=urn:btih:..."
./scripts/qbt.sh list --filter downloading
./scripts/qbt.sh status
./scripts/qbt.sh delete abc123def456 --with-files
组合用法(搜索 → 直接投递 qBt)
# 电影搜索 → 添加第一个 magnet 到 qBt
./scripts/search-movie.sh search "the matrix" --limit 1 \
| grep 'Magnet:' | awk '{print $2}' \
| xargs ./scripts/qbt.sh add --category movies --save-path /downloads/movies
# 磁力搜索 → 添加第一条到 qBt
./scripts/search-magnet.sh "关键词" 3 \
| grep '磁力:' | head -1 | awk '{print $2}' \
| xargs ./scripts/qbt.sh add
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
YTS_API_BASE_URL |
https://movies-api.accel.li/api/v2 |
YTS API 地址 |
MAGNET_BASE_URL |
https://cilisousuo.co |
磁力搜索站地址 |
JOOX_COOKIE |
内置默认值 | JOOX 登录 Cookie(需定期更新) |
JOOX_XFF |
36.73.34.109 |
X-Forwarded-For 头 |
JOOX_COUNTRY |
hk |
JOOX 地区代码 |
JOOX_LANG |
zh_TW |
JOOX 语言 |
JOOX_ROOT_DIR |
/tmp/joox-downloads |
音乐下载根目录 |
QB_HOST |
http://localhost |
qBittorrent 地址 |
QB_PORT |
8080 |
qBittorrent Web UI 端口 |
QB_USER |
admin |
qBittorrent 用户名 |
QB_PASS |
adminadmin |
qBittorrent 密码 |
建议写入 ~/.bashrc 或 ~/.zshrc:
export JOOX_COOKIE="wmid=xxx; session_key=yyy; ..."
export JOOX_ROOT_DIR="$HOME/Music/joox"
export QB_HOST="http://localhost"
export QB_PORT="8080"
export QB_USER="admin"
export QB_PASS="your_password"
search-movie.sh 参数详情
命令:
search "电影名" 搜索电影
list 按条件列出电影
details 查看单部电影详情
suggestions 查看相关推荐
选项:
--limit N 返回数量 (1-50,list 默认 10)
--page N 页码
--quality VALUE 480p / 720p / 1080p / 1080p.x265 / 2164p / 3D
--minimum-rating N 最低 IMDb 评分 (0-9)
--genre VALUE action / comedy / drama / horror / sci-fi ...
--sort-by VALUE title / year / rating / peers / seeds / download_count
--order-by asc|desc 排序方向
--movie-id ID YTS 电影 ID(details/suggestions 必填)
--imdb-id ID IMDb ID,如 tt0133093(details 可用)
--full 输出完整格式化 JSON
--raw 输出原始 API 响应
输出示例:
ID: 12345
Title: The Matrix (1999)
IMDb: tt0133093
Rating: 8.7
URL: https://yts.mx/movies/the-matrix-1999
Torrents:
质量: 1080p | 编码: x264 | 大小: 2.01 GB | Seeds: 1823 | Peers: 142
Torrent: https://...
Magnet: magnet:?xt=urn:btih:...
qbt.sh 参数详情
命令:
add <magnet|url|.torrent文件> 添加下载任务
list 列出任务
pause <hash|all> 暂停
resume <hash|all> 恢复
delete <hash> [--with-files] 删除任务
info <hash> 查看任务详情
status 全局状态
version qBt 版本信息
add 选项:
--save-path PATH 保存目录
--category NAME 分类
--tags TAG1,TAG2 标签
--paused 添加后暂停
--sequential 顺序下载
--skip-check 跳过哈希检查
list 选项:
--filter VALUE all / downloading / completed / paused / errored
--category NAME 按分类过滤
--sort VALUE 排序字段
--limit N 返回数量
通用选项(优先级高于环境变量):
--host HOST qBt 地址
--port PORT 端口
--user USER 用户名
--pass PASS 密码
search-magnet.sh 说明
抓取流程:
- 请求
/search?q={keyword}获取列表页 - 提取
/magnet/[id]详情页路径 - 逐一访问详情页,解析标题、大小、磁力链接
- 请求间隔 0.3s,避免被封
解析策略:grep + sed 双重备用,单条失败跳过不中断。
download-music.sh 状态输出
脚本输出 Tab 分隔的状态行,可用 awk 解析:
| 状态 | 含义 |
|---|---|
START |
开始处理曲目 |
DONE_AUDIO |
音频下载成功 |
SKIP_EXISTS |
文件已存在,跳过 |
FAIL_NO_URL |
未获取到音频 URL |
FAIL_AUDIO |
音频下载失败 |
DONE_LRC |
歌词下载成功 |
NO_LRC |
无歌词 |
DONE_ALBUM |
专辑全部完成 |
下载目录结构:
{JOOX_ROOT_DIR}/
└── {艺术家}/
└── {专辑名}/
├── 曲名.flac
├── 曲名.lrc
└── ...
音频 URL 优先级:
master_tapeUrl > hiresUrl > flacUrl > r320Url > r192Url > mp3Url > m4aUrl
注意事项与异常处理
| 场景 | 处理方式 |
|---|---|
| JOOX Cookie 失效 | 提示用户重新获取并更新 JOOX_COOKIE 环境变量 |
| YTS API 不可用 | 提示检查网络或通过 YTS_API_BASE_URL 切换镜像地址 |
| 磁力搜索站改版 | search-magnet.sh 的 grep/sed 规则可能需要更新 |
| qBt 连接失败 | 先用 ./scripts/qbt.sh status 检查,提示检查 QB_HOST/QB_PORT/凭据 |
| 搜索无结果 | 建议换关键词、调整 quality/rating 过滤条件 |
| 下载中断 | 支持断点续传(SKIP_EXISTS 跳过已有文件),直接重跑即可 |
| QB_PASS 安全 | 建议通过环境变量传入,避免明文出现在命令行历史里 |
| 依赖缺失 | 所有脚本启动时自动检测依赖,缺失时输出安装提示 |
| qBt session | 使用临时 cookie 文件,脚本退出时自动登出清理 |