netease-music/README.md
2026-10-02 14:26:27 +08:00

81 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# netease-music
网易云音乐遥控器:一句话对上云里的内容(每日推荐 / 歌单 / 榜单 / 收藏 / FM / 最近 / 播客)并放出来;播放侧管好本机队列现场(快照 / back / 追加)
以 Pi package(技能形态)发布;同一个源还有 CLI 出口 `netease-music-cli`。技能本体在 `skills/netease-music/`。
- 平台:macOS
- 许可:GPL-3.0-or-later(全文见 [LICENSE](LICENSE))
## 安装
```sh
pi install git:gitea.vhkd.top/pi-hub/netease-music.git@v0.1.6
```
装完 `pi-skill list` 能看到 `netease-music`,`pi-skill netease-music check` 会告诉还缺什么。
## 先准备什么
- `node`(运行环境),接口客户端与 mpv 控制都是 node 脚本,零 npm 依赖
- `python3`(运行环境)
- `mpv`(命令),安装:brew install mpv;真正的播放器(常驻 + unix socket 控制)
- `qrencode`(命令),安装:brew install qrencode;只在扫码登录时用
## 常用命令
| 命令 | 说明 |
|---|---|
| `daily` | 每日推荐分页入队播放(--limit N / --offset N / --shuffle;JSON 带 total) |
| `play` | 播一首或一整张:关键词→最匹配一首;歌单 id/链接→整张(--shuffle) |
| `play-ids` | play-ids <id,id,...> [--start N]:按输入顺序整列替换,1 基起点默认 1;保留重复项,选中歌不可播则保留旧队列;关闭随机 |
| `search` | 只搜不播:列出 id/歌名/歌手/时长/是否要 VIP(--limit N / --offset N;JSON 带 total) |
| `cover` | cover <歌曲关键词|id> [--download PATH] [--force]:只读查询封面,JSON 为 id/name/artist/cover;下载为 id/cover/file/bytes,最多 10 MB(10000000 字节),覆盖需 --force;所有原语歌曲对象含字符串 cover(缺失为空) |
| `artist` | 歌手热门分页入队播放(名字或 id;--limit N / --offset N;JSON 带 total) |
| `album` | 专辑按顺序分页入队播放(名字、id 或专辑链接;--limit N / --offset N;JSON 带 total) |
| `albums` | 只列不播:歌手的专辑(含老专辑;--limit N / --offset N;JSON 带 total) |
| `liked` | 分页播放「我喜欢的音乐」(--limit N / --offset N;JSON 带 total) |
| `liked-ids` | 只读喜欢 ID 全表;--json 为 {count,total,ids:[数字,...]};歌曲 JSON 透传可用的布尔 liked,缺字段时用全表按 id 判定 |
| `myplaylists` | 我的歌单(自建 + 收藏);--limit N / --offset N 分页,collected/own 筛本页;JSON 带 total |
| `pause` | 暂停 |
| `resume` | 继续播放 |
| `toggle` | 暂停/继续切换 |
| `next` | 下一首 |
| `prev` | 上一首 |
| `stop` | 停止并清空队列 |
| `clear` | 停止并清空 mpv 和本地队列,收掉保活;配置和快照保留,可重复调用 |
| `volume` | 读或设音量(0-130) |
| `seek` | 跳进度(相对秒数,如 +30) |
| `queue` | 看队列(mpv 真值):每首歌名、时长,标出正在放的那首 |
| `jump` | 跳到队列第 N 首(从 1 开始),并回读状态确认 |
| `remove` | remove <index>:按 queue 显示的 1 基序号删除;当前项选下一首,末尾选上一首,删空停止;同步本地文件 |
| `status` | 当前曲目/进度/音量/队列位置(mpv 真值);repeat_mode 为 off/list/single |
| `lyric` | 当前歌曲歌词(默认只显示当前句与下一句,--all 全文) |
| `like` | 把当前这首歌加入「我喜欢的音乐」 |
| `unlike` | 把当前这首歌移出「我喜欢的音乐」 |
| `shuffle` | 队列随机开/关 |
| `repeat` | repeat off|list|single:关闭/整列/单曲循环;on 和无参数 = list;状态追加 repeat_mode,保留旧 repeat 布尔含义 |
| `login` | 登录(--sms 手机号+验证码两步为主力;不带参数出二维码扫码),cookie 存本机 config |
| `setup` | 写配置(--cookie/--quality);不带参数打印登录办法 |
| `check` | 只读自检:依赖、登录态、mpv 可用性、默认音质 |
| `playlist` | 放一张歌单:名字/id/链接都行(--limit N / --offset N;JSON 带 total) |
| `playlists` | 搜歌单(只列不播):id / 名字 / 曲目数 / 作者 / 是否已收藏;--limit N / --offset N,JSON 带 total |
| `charts` | 列排行榜(只列不播):飙升榜 / 新歌榜 / …;--limit N / --offset N,JSON 带 total |
| `chart` | 放某个榜单:名字或 id(--limit N / --offset N;JSON 带 total) |
| `myalbums` | 我收藏的专辑(只列不播;--limit N / --offset N;JSON 带 total;id 可喂 album) |
| `myartists` | 我收藏的歌手(只列不播;--limit N / --offset N;JSON 带 total;id 可喂 artist) |
| `fm` | 私人 FM:没听过的歌,整列入队开播(--limit N) |
| `dislike` | dislike [歌曲id]:私人 FM 不喜欢(fm/trash);省略 id 用当前歌曲,只上报,不自动切歌或改队列 |
| `recent` | 最近播放(只列不播,一周内,含播放次数;--limit N / --offset N;JSON 带 total) |
| `replay` | 再放一次最近第 N 首(默认 1 = 最近那首) |
| `podcasts` | 我的播客订阅(只列不播;--recommend 看推荐的;--limit N / --offset N;JSON 带 total) |
| `podcast` | 放某播客的节目(--limit N 默认 3;--offset N;名字或 id;JSON 带 total) |
| `episode` | 放某一期节目(节目 id 从 podcast 输出里抄) |
| `queues` | 看本地队列快照(每次换队列会自动留一条「上一条」) |
| `queue-save` | 把当前队列存成命名快照(只存歌曲列表,地址回放时重取) |
| `queue-load` | 载入某个命名快照(含当时位置与随机状态) |
| `back` | 切回上一条队列(含位置);再 back 一次切回来 |
| `add` | 把一首加到当前队列尾部,不动正在放的那首 |
用法与对外契约见技能内的 `SKILL.md` 与 `REFERENCE.md`。