8.7 KiB
| name | description | platforms | |
|---|---|---|---|
| netease-music | 放网易云音乐并控制播放:直接调接口(搜歌点播、每日推荐、我喜欢的音乐、暂停切歌、音量、歌词、喜欢),不像以前那样模拟鼠标点界面。用户说「放首歌/放每日推荐/换一首/暂停/现在在放什么」时使用。 |
|
网易云音乐(netease-music)
一句话:pi-skill netease-music daily 直接开播每日推荐;play <关键词> 想听什么说什么;控制都是毫秒级命令,状态是真值。
何时用
| 用户说的 | 跑这个 |
|---|---|
| 放每日推荐 / 放点歌 | pi-skill netease-music daily(--limit 20 少放点,--shuffle 随机) |
| 放某首歌 / 某个歌手的歌 | pi-skill netease-music play "<关键词>" |
| 放某张歌单 | pi-skill netease-music play "<歌单链接>"(或 play playlist:<id>;id 用 myplaylists 查) |
| 放我喜欢的音乐 | pi-skill netease-music liked |
| 放某位歌手的热门 | pi-skill netease-music artist "陈粒"(--limit 20 少放点;也可给歌手 id) |
| 放某张专辑 | pi-skill netease-music album "自传"(名字、id、专辑链接都行) |
| 查某歌手有哪些专辑 | pi-skill netease-music albums "周杰伦"(只列不播;搜不到正版专辑时用它拿 id) |
| 放别人做的歌单 | pi-skill netease-music playlist "夜跑"(名字直接写;playlists "夜跑" 只搜不播) |
| 放排行榜 | pi-skill netease-music chart 飙升榜(charts 列全部 63 个) |
| 放我收藏的歌单 / 专辑 / 歌手 | pi-skill netease-music myplaylists collected / myalbums / myartists |
| 放点没听过的 | pi-skill netease-music fm(私人 FM) |
| 刚才那首再放一遍 | pi-skill netease-music replay(recent 看最近播放) |
| 放播客(订阅的) | pi-skill netease-music podcasts → podcast 黑水公园 --limit 3 |
| 换队列但别丢现场 | 每次换队列会自动留「上一条」:back 切回(含位置);queue-save 名字 / queue-load 名字 自己存取的;queues 看有哪些 |
| 往队列里加一首 | pi-skill netease-music add "幻听"(不动正在放的那首) |
| 把搜索结果整列播放 / 从某首开始 | pi-skill netease-music play-ids 1000,1001,1002 --start 2(单个逗号分隔的 ID 参数;按输入顺序,序号从 1 开始) |
| 看队列 / 跳到第几首 | pi-skill netease-music queue / jump 5 |
| 删除队列第几首 / 清空 | pi-skill netease-music remove 3 / clear(当前项删除后选下一首,末尾选上一首,删空停止;保留暂停状态) |
| 单曲循环 / 整列循环 / 关闭循环 | pi-skill netease-music repeat single / repeat list / repeat off(旧 on = list;状态字段 repeat_mode) |
| 换一首 / 回上一首 | pi-skill netease-music next / prev |
| 暂停 / 继续 | pi-skill netease-music pause / resume(或 toggle) |
| 声音大点 / 小点 | pi-skill netease-music volume 45(不带数字=读当前值) |
| 现在在放什么 | pi-skill netease-music status |
| 这首歌歌词 | pi-skill netease-music lyric(--all 全文) |
| 查歌曲封面 / 下载封面 | pi-skill netease-music cover "<歌曲关键词或id>"(始终输出 JSON;加 --download PATH 下载,覆盖需 --force,最多 10 MB = 10,000,000 字节;不改变队列或登录态) |
| 这首好听,收藏 | pi-skill netease-music like(unlike 取消) |
| 私人 FM 这首不喜欢 | pi-skill netease-music dislike(也可 dislike 1000 指定歌曲 ID;提交 fm/trash,不自动切歌) |
| 查询哪些歌曲已喜欢 | pi-skill netease-music liked-ids --json({count,total,ids:[数字,...]} 全表;只读) |
| 只是查有哪些歌 | pi-skill netease-music search "<关键词>"(只列不播) |
| 取歌曲 JSON 给播放器 | node scripts/netease-api.mjs song "<关键词或id>"(歌曲字段依次为 id/name/artist/album/ms/vip/cover;没有封面时为 "";接口提供布尔 liked 时追加它) |
| 列下一页 | pi-skill netease-music myplaylists --limit 3 --offset 3(跳过前 3 条;--json 带 total,人读样式不变) |
分页:playlist / liked / album / artist / chart / search / playlists / charts / myalbums / myartists / recent / podcasts / podcast,以及 myplaylists / albums / daily,都支持 --limit N --offset N。offset 默认 0,从 0 起跳过 N 条;后端 JSON 的 count 是本页条数,total 是接口总数(没给总数时用接口返回、尚未本地截取的条数)。翻过末尾返回空列表,具体口径见 REFERENCE.md。
封面:cover 查询返回 {id,name,artist,cover},下载返回 {id,cover,file,bytes}(file 为绝对路径,bytes 为实际字节数)。歌曲或封面缺失时报 notfound 错误 JSON;下载路径的父目录须已存在。字段来源与大小检查见 REFERENCE.md §2.2。
批量与队列:play-ids <id,id,...> [--start N] 接收一个无空格、逗号分隔的正整数 ID 参数,保留顺序和重复项;默认从输入列表第 1 首开始。--start 指输入列表的 1 基序号;指定歌曲无播放地址或任一歌曲详情缺失时报错并保留旧队列,其他无地址项跳过并计入 skipped。它关闭随机,不支持 --shuffle。remove N 按 queue 显示的顺序删除(含随机队列);clear 停止、清掉本地队列和地址保活,保留配置及快照。
喜欢状态:列表、搜索和详情的歌曲对象仅在接口提供布尔值时追加 liked: true|false;liked 歌曲列表全部为 true。缺字段表示未知,可用只读 liked-ids --json(或 node scripts/netease-api.mjs liked-ids)取得完整 ID 数组后按 ID 补齐;不自动为每首歌增加请求。dislike [id] 是私人 FM 的不喜欢,与 unlike 分开;只提交 API,播放位置和队列保持原样。
循环状态:repeat off|list|single 同时设置 mpv 的两个循环属性;on 和无参数继续表示 list。status 的 repeat_mode 报 off/list/single,原 repeat 布尔字段仍表示是否整列循环。
首次使用:pi-skill netease-music check(自检依赖与登录态)。没登录就登一次,两条路都行:
login --sms <手机号> 收验证码,再 login --sms <手机号> --sms-code <验证码>(主力,实测最稳);
或 login 出二维码用手机网易云 App 扫(30 秒)。cookie 只存本机。
与音箱配合:电脑的声音去哪台设备由系统输出决定,要让家里的 EDIFIER 音箱出声就先 pi-skill edifier-speaker bt(它会切音箱档位 + 把系统输出接过去)。
失败 → 动作
| 现象 | 动作 |
|---|---|
error=auth(未登录) |
login --sms <手机号> 两步短信登录;或 login 扫码;或 setup --cookie 'MUSIC_U=…' 粘浏览器里的 cookie |
error=notfound(搜不到/歌单不存在) |
换个关键词;歌单 id 用 myplaylists 查 |
error=notfound ... 没有一首能播 |
这首/这张全要 VIP 或没版权:换一个(周杰伦正版目录基本都这样) |
| 歌手/专辑搜到的是翻唱 | 用 albums <歌手> 拿正版专辑 id,再 album <id>(网易搜索索引会缺正版) |
error=deps missing=mpv |
brew install mpv(播放器);qrencode 只在扫码登录时要 |
error=external ... url=null |
那首要 VIP 或没版权,队列会自己跳过并在 skipped= 里报数量 |
error=timeout(扫码超时) |
重新 login(二维码 2 分钟过期) |
| 队列有歌但没声音 | 系统输出没指向音箱:pi-skill edifier-speaker bt;或 volume 太小 |
| 播放卡在旧队列 | stop 清空队列再来 |
error=notfound 没有上一条可切回 |
还没换过队列;queues 看有哪些快照 |
| 换队列后想找回刚才那条 | back(回到上一条,含放到哪儿);更早的看 queues,或 queue-load <名字> |
add 之后没马上听到 |
队列开着随机,新歌在队尾按随机顺序插进来;想顺序放先 shuffle off |
| 播客某一期放不出来 | 那期要付费或已下架;换几期:podcast <播客> --limit 5 |
边界
- 只做「播放与控制」,不碰客户端界面;官方客户端开着不受影响,两边互不干扰(各放各的)。
- 音质默认无损(
quality,改成exhigh可省流量)。 - 歌单每页默认最多取 500 首,每日推荐 40 首(
--limit可调);用--offset接着取下一页,500 不是歌单总量上限。歌手热门默认 50 首、专辑默认 200 首;后端用total报分页前数量。 - 能不能播由版权/VIP 决定:拉不到地址的会被跳过(
skipped=报数量),整张都拿不到就error=notfound。