# 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 [--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 :按 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`。