V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
foam
V2EX  ›  分享创造

我音乐自由了。不送码,给大家开源

  foam ·
foamzou · 323 天前 · 16519 次点击
这是一个创建于 323 天前的主题,其中的信息可能已经有所发展或是发生改变。

大家好,继之前写了 b 站音频下载脚本后,这次的自动化更进一步,支持直接上传到音乐云盘(目前仅支持网易云)。该项目也支持一键“解锁”歌单中无法播放的歌曲(适合不喜欢用 proxy 方式解锁的同学)。

如果对你有帮助,欢迎 Star 呀: https://github.com/foamzou/melody/

Melody

项目介绍

大家好,我叫 Melody ,是你的音乐精灵,旨在帮助你更好地管理音乐。目前的主要能力是帮助你将喜欢的歌曲或者音频上传到音乐平台的云盘。

为了避免不必要的纠纷和账号安全问题,本项目不会以任何形式提供在线 demo 服务,也请大家不要使用公共服务。本地部署很简单。

Feature

  • 支持在各大音乐和视频网站检索歌曲。目前支持 咪咕、网易云、QQ 音乐、酷狗、bilibili 等站点。详情可以在我的 media-get 项目中查看
  • 用链接搜索歌曲
  • 一键“解锁”无法播放的歌曲(实验性功能,目前仅支持网易云)

安装和启动

依赖

确保以下两个依赖是安装好的

  1. node >= v14.19 (官网下载)
  2. FFmpeg (windows 安装介绍)

下载源码及初始化服务

其中 init.js 会下载核心组件,初始化 node 依赖,尽可能不需要你关心安装细节

git clone https://github.com/foamzou/melody.git
cd melody
node init.js

配置你的账号

cp backend/.profile/accounts.sample.json backend/.profile/accounts.json

然后编辑 backend/.profile/accounts.json

  1. 该 JSON 中的 key 是 Melody Key,是你在网页访问该服务的唯一凭证
  2. 网易云账号信息: accountpassword 可以后续在网页修改
  3. 该 JSON 是个数组,支持配置多个账号

启动服务

建议使用 pm2 将本服务常驻后台

node backend/src/index.js

最后,在浏览器访问 http://127.0.0.1:5566 就可以使用啦~

功能介绍

关键词搜索歌曲

如果试听后是你想要的,点击上传按钮会将该歌曲上传到你的网易云音乐云盘

链接搜索

有时候我们在 b 站 听到好听的歌,也可以上传到云盘

一键解锁歌单

点击 解锁全部(实验性功能) 后,服务会自动匹配每首歌,并把歌曲上传到云盘,最后做个 match ,以保证你还能看到歌词、评论

手动搜索匹配

当某首歌自动解锁失败后,还可以手动点击搜索按钮,找到符合的歌曲后,手动点击上传按钮

Roadmap

计划在后面支持以下功能

  • 页面适配移动端
  • 云盘歌曲 match 手动纠错
  • 浏览器油猴脚本
  • 支持播放列表
  • 支持播放云盘的歌曲
  • 支持 docker 部署
  • 支持 youtube-dl,you-dl 等工具作为输入源
  • 支持 酷狗、qq 音乐等音乐平台的云盘作为输出
  • 偏好设置
  • 版本更新提示

致谢

100 条回复    2022-08-07 22:30:57 +08:00
mlhadoop
    1
mlhadoop  
   323 天前
执行力💯
foam
    2
foam  
OP
   323 天前 via Android
@mlhadoop 谢谢打破零回复😂
Either
    3
Either  
   323 天前 via iPhone
昨晚在手动上传,今天就看到解决方案。🐴👀
archbishop
    4
archbishop  
   323 天前 via Android
好人一生平安🙏🙏🙏
yibie
    5
yibie  
   323 天前   ❤️ 1
已经发送感谢
foam
    6
foam  
OP
   323 天前
@Either #3 哈哈 赶紧试用下
foam
    7
foam  
OP
   323 天前
@archbishop #4
@yibie #5
谢谢支持
zytomorrow
    8
zytomorrow  
   323 天前
棒!!!等一个 docker 镜像
tediorelee
    9
tediorelee  
   323 天前
坐等支持 Youtube ,很多 mix 我都在国内 app 上找不到
leaves98
    10
leaves98  
   323 天前
厉害了 老哥
waler
    11
waler  
   322 天前
非常感谢!!!
A01514035
    12
A01514035  
   322 天前
mark , 等一个 docker 镜像
foam
    13
foam  
OP
   322 天前   ❤️ 1
@tediorelee #9 指的是 YouTube Music 吗?还是 YouTube Video 转音频? 后者已经支持了。
akumans
    14
akumans  
   322 天前 via iPhone
非常不错~
ilyyfan
    15
ilyyfan  
   322 天前
牛逼,感谢老哥
xuxinglin8888
    16
xuxinglin8888  
   322 天前 via Android
只会双击 apk🙈🙈你这个不懂
tuutoo
    17
tuutoo  
   322 天前
希望 docker 版的可以优先做, 这样能降低不少门槛, 前两个依赖可能就难倒好多人.

环境可能不一样, 我 CentOS 上部署成功了, 但是报 Key 不对, 可能我部署的过程有问题.
本地试了一下, 先费了老大劲在 macOS 上装 ffmpeg, 服务跑起来了,Key 没问题, 到绑定帐号这一步, 登陆时候又报错了.

ℹ uid(XXXXXXXX)'s cookie not found from .profile
ℹ uid(XXXXXXXX) login...

ERROR requestWyyApi failed: {
status: 502,
body: {
code: 502,
msg: Error: unable to verify the first certificate
at TLSSocket.onConnectSecure (node:_tls_wrap:1530:34)
at TLSSocket.emit (node:events:390:28)
at TLSSocket._finishInit (node:_tls_wrap:944:8)
at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:725:12) {
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
config: [Object],
request: [Writable],
response: undefined,
isAxiosError: true,
toJSON: [Function: toJSON]
}
},
cookie: []
}
cassyfar
    18
cassyfar  
   322 天前
电话怎么填国际电话区号?
cassyfar
    19
cassyfar  
   322 天前
一运行直接把终端关闭了。。。错误信息看不到
ColorfulBoar
    20
ColorfulBoar  
   322 天前
@cassyfar 目测这个版本就没做……你手工搜索一下把所有包含 account 和 password 的地方塞个 countrycode 进去就能凑合着用了(虽然对我来说好像只有来自 bilibili 的能下下来,然后上传一定失败,约等于不可用,如果你不在国内我猜也是这个结果
foam
    21
foam  
OP
   322 天前 via Android
@tuutoo 是的,docker 得先支持了。
你的是证书问题,是不是开了 UnblockNeteaseMusic 服务劫持了网易云请求?或者本地证书有问题。
foam
    22
foam  
OP
   322 天前 via Android
@tuutoo
可以先试试。
控制台执行,windows 下应该是 set NODE_TLS_REJECT_UNAUTHORIZED=0,Linux 和 mac 是 export NODE_TLS_REJECT_UNAUTHORIZED=0

ref https://github.com/Binaryify/NeteaseCloudMusicApi/issues/1070
foam
    23
foam  
OP
   322 天前 via Android
@cassyfar
@ColorfulBoar
晚点看看海外怎么优化下
cassyfar
    24
cassyfar  
   322 天前
@foam
@ColorfulBoar

塞了个 coutrycode 可以登录了。体验不错!(就是好像只有逗音能听)
qbhy
    25
qbhy  
   322 天前
suyuyu
    26
suyuyu  
   322 天前
以前写了个类似的东西写到一半烂尾了,,,
foam
    27
foam  
OP
   322 天前 via Android
@cassyfar 那你们一般在国外怎么使用国内音乐平台的,开代理吗?😄
foam
    28
foam  
OP
   322 天前 via Android
@suyuyu 坚持不易啊
niknik
    29
niknik  
   322 天前
mark 等 docker
mywaiting
    30
mywaiting  
   322 天前
一直等这样一个开源作品,终于~~~

多谢!!!
4196
    31
4196  
   322 天前
其他歌单都可以访问,唯独 [我喜欢的音乐] 这个歌单请求返回结果是空,控制台报错

[
省略......,
{
id: 1826753,
fee: 8,
payed: 0,
realPayed: 0,
st: 0,
pl: 128000,
dl: 0,
sp: 7,
cp: 1,
subp: 1,
cs: false,
maxbr: 999000,
fl: 128000,
pc: null,
toast: false,
flag: 0,
paidBigBang: false,
preSell: false,
playMaxbr: 999000,
downloadMaxbr: 999000,
maxBrLevel: 'lossless',
playMaxBrLevel: 'lossless',
downloadMaxBrLevel: 'lossless',
plLevel: 'standard',
dlLevel: 'none',
flLevel: 'standard',
rscl: null,
freeTrialPrivilege: [Object],
chargeInfoList: [Array]
},
... 900 more items
],
sharedPrivilege: null,
resEntrance: null
} {"msg":"参数错误","code":400}{"msg":"参数错误","code":400}


ERROR get user all playlist failed, uid:
N032138
    32
N032138  
   322 天前
做个 docker 版食用更方便呀
Echoleung
    33
Echoleung  
   322 天前
马克,同等 docker
oluoluo
    34
oluoluo  
   322 天前
码住
sypopo
    35
sypopo  
   322 天前
同等 docker
melsp
    36
melsp  
   322 天前 via Android
感谢
lfsc
    37
lfsc  
   322 天前
大佬
tuutoo
    38
tuutoo  
   322 天前 via Android
@foam 谢谢 应该是你说这问题我回去试试。
的确是路由上布署了 UnblockNeteaseMusic ,前几天试了没效果,用不起来,忘记关了。。
以后就靠你这个项目了 哈哈 还能传到云音乐,赞
standin000
    39
standin000  
   322 天前
楼主厉害!
rfrftt
    40
rfrftt  
   322 天前   ❤️ 2
楼主厉害
贴下 dockerfile
-----------------------
FROM node:17.9.0-buster
RUN apt update && apt install -y ffmpeg git vim && ffmpeg -version
RUN git clone 'https://github.com/foamzou/melody.git' /melody && cd /melody && node init.js
EXPOSE 5566
CMD exec node /melody/backend/src/index.js
-----------------------
volume 映射配置文件 /melody/backend/.profile/accounts.json
a566
    41
a566  
   322 天前
牛逼 大大的点赞了
foam
    42
foam  
OP
   322 天前 via Android
@rfrftt 感谢老哥先贴了个 docker file 。
另外确认下,服务里会使用临时目录(node.js 的 tmp 方法,不确定获取到的目录是否可用)作为临时歌曲存储目录,可能要确认下上传功能是否正常。
foam
    43
foam  
OP
   322 天前 via Android
@4196 晚点看看
rfrftt
    44
rfrftt  
   322 天前 via iPhone
@foam 正在使用解锁全部,看了下云盘里面不停的有新增曲目🎵,功能是正常的
cassyfar
    45
cassyfar  
   322 天前
@foam 之前用过网易云,不过好多歌都听不了了。
96368a
    46
96368a  
   322 天前
太棒了,这下不用网易 qq 来回切了🤣
xmt328
    47
xmt328  
   322 天前
本地编译了一个 docker 版本先体验着,坐等作者出官方版本
xtinput
    48
xtinput  
   322 天前
不怕律师函?
Allan0423
    49
Allan0423  
   322 天前
好人一生平安
cue
    50
cue  
   322 天前 via Android
等 docker
fandr
    51
fandr  
   322 天前
JAY
tomchiler
    52
tomchiler  
   322 天前
好用好用
yangzj1992
    53
yangzj1992  
   322 天前
感谢大佬,本地部署了下,试了下不少歌上传时还是失败。= =
yangzj1992
    54
yangzj1992  
   322 天前
@yangzj1992 #53 #53 补一下 case: 『 A/Z 』 前几首都是
soseek
    55
soseek  
   322 天前 via iPhone
我记得好像网易云音乐的网盘有些歌曲上传会被替换或者限制不是 VIP 无法播放?
nishuoshenme
    56
nishuoshenme  
   322 天前
再次检查 media-get 是否安装成功
media-get 安装失败。请手动从 https://github.com/foamzou/media-get/releases 下载最新版本到 C:\Users\xxx\melody\backend\bin\media-get.exe
nishuoshenme
    57
nishuoshenme  
   322 天前
可是本地目录是已经下载好了的😓
nishuoshenme
    58
nishuoshenme  
   322 天前
有大佬遇到这种情况吗
liyvhg
    59
liyvhg  
   321 天前
@rfrftt #40 感谢楼主分享!参考楼主的 docker file ,我也来贴一个,比楼主的臃肿一些

FROM debian:latest
RUN apt update && apt install -y ffmpeg git vim curl && ffmpeg -version
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt update && apt install -y nodejs
RUN git clone 'https://github.com/foamzou/melody.git' /melody && cd /melody && node init.js
EXPOSE 5566
ENV LANG en_US.utf8
ENV SHELL /bin/bash
CMD exec node /melody/backend/src/index.js

-----------------------
volume 映射配置文件 /melody/backend/.profile/accounts.json
如果没有映射上述文件会直接取法启动。
xjh2949744520
    60
xjh2949744520  
   321 天前 via iPhone
希望能支持上传到自己的云盘,webdav 那种🥺
yazoox
    61
yazoox  
   321 天前 via Android
真的厉害👍
foam
    62
foam  
OP
   321 天前
@yangzj1992 #54 A/Z 的修复了,麻烦更新下代码,删除 backend/bin/media 之后重新 node init.js 一下。
原因是一个低级代码错误,没有成功移除文件名中的 / 。
不过这样的话,文件名就变 AZ 了。先这样吧
foam
    63
foam  
OP
   321 天前
@nishuoshenme #56 应该是偶现 bug ,一些情况下会有延迟。不用删除 media-get 文件,再次执行 node init.js 应该就可以的。
foam
    64
foam  
OP
   321 天前
@xjh2949744520 #60 可以到 issue 提下 request
caomingjun
    65
caomingjun  
   321 天前 via Android
很好的项目!出 docker 就部署到服务器上!
未来会支持网易云音乐云盘以外的其他存储方式吗,比如 onedrive/webdav/对象存储 /本地存储?
谢谢!
mscsky
    66
mscsky  
   321 天前
真刑,前段时间网易还批 qq
lw3088
    67
lw3088  
   321 天前
先 star 了
devilte
    68
devilte  
   321 天前
献上 star
ltkun
    69
ltkun  
   321 天前 via Android
exe ?
nishuoshenme
    70
nishuoshenme  
   321 天前
@foam 应该是我本地的问题,昨晚一直没成功,换虚拟机重新搞了一下,然后就可以了,再次感谢大佬哈哈
outcastveron
    71
outcastveron  
   321 天前
高级,star 先,等 docker 开玩:))
foam
    72
foam  
OP
   321 天前 via Android
@caomingjun
@outcastveron
docker 可以先用楼上的版本哈。
caomingjun
    73
caomingjun  
   321 天前   ❤️ 1
关于其他存储方式,回复 #60 #64 #65:
我今天看了一下代码,似乎作者在编写时没有考虑到这个需求,改起来可能比较麻烦。我目前的思路是,指定一个目录作为本地备份目录,前端中设置按钮让用户手动同步该目录和网易云音乐云盘(也可以考虑加上定时任务)。Docker 下该目录可以挂载到主机上,至于云存储和该目录的同步,可以交给 rclone 等其他程序负责,不用重复造轮子。

另外提出两个建议:
1. 前端可以显示一下任务状态,我看 JobManager 有相关函数,但是前端没有这个功能。
2. 希望能显示网易云音乐云盘上的当前曲目
caomingjun
    74
caomingjun  
   321 天前
还有一个建议,可以把输入 melody key 的框改成密码框,这样浏览器就能自动保存密码了
alfawei
    75
alfawei  
   321 天前 via iPhone
厉害👍 可以支持手机版 app ?
foam
    76
foam  
OP
   321 天前
@caomingjun #73 #74
谢谢建议。项目有考虑多个输入源和多个输出源,只是先把 MVP 跑起来。
任务状态会考虑下合适的设计,后端我很多东西写好了,前端在慢慢折腾中,哈哈。
foam
    77
foam  
OP
   321 天前
@alfawei #75 暂不考虑哈。不过会适配移动端 web
foam
    78
foam  
OP
   321 天前 via Android
@foam 目前前端其实也有任务状态,不过是轮询弹消息框的形式。确实不够友好,算是有个展示的地方。
killeder
    79
killeder  
   320 天前
安卓 APP v2er(版本 2.0.2.202)一打开这个帖子就闪退
DrEAmSs59
    80
DrEAmSs59  
   320 天前
大佬
zooo
    81
zooo  
   320 天前
蹲一个 docker 版
foam
    82
foam  
OP
   318 天前
@4196 #31 应该是数量超过了 1k 。已经修复。可以更新代码后,npm run update && npm run app 以更新和运行服务
foam
    83
foam  
OP
   318 天前   ❤️ 2
cue
    84
cue  
   318 天前
@foam #83 弱问 melody key 是什么……
foam
    85
foam  
OP
   318 天前
@cue #84 算是用户 ID/ 密钥。
tuutoo
    86
tuutoo  
   317 天前
@foam 刚在 CentOS 上部署成功了. 搜索的歌曲可以播放, 但我网易云音乐里歌单里的歌点击没法直接播放. 至少已经可以简单的用起来了 多谢.
tuutoo
    87
tuutoo  
   317 天前
有了 docker 版的 部署起来太方便了.
foam
    88
foam  
OP
   316 天前 via Android
@tuutoo 好的。主要是用于同步到云盘哈,不打算聚焦播放器。
leonzh
    89
leonzh  
   315 天前
蹲一个 docker 版的
leonzh
    90
leonzh  
   315 天前
@leonzh 原来已经有 docker 啦,马上装起来
4196
    91
4196  
   315 天前
@foam 是的,可以了🙇‍
keepro
    92
keepro  
   314 天前
白嫖伸手党申请美化前端页面,抄个 music.163 ,顺便适配移动端 UI
真的不错,感觉比 navidrome 更适合
手动狗头保护

我真不会改 T_T!
foam
    93
foam  
OP
   314 天前 via Android
@keepro 难道你以为我就会改吗 😂 vue 还是边写边 Google Baidu 的
foam
    94
foam  
OP
   314 天前 via Android
@keepro 适配移动端倒是在 roadmap 里
Xushet
    95
Xushet  
   314 天前 via Android
小心绿尸寒啊
keepro
    96
keepro  
   314 天前
@foam 哈哈,坐等大佬更新,大佬加油!!
foam
    97
foam  
OP
   314 天前 via Android
@Xushet 没事 都是公开资源
Chenxiaolannnnn
    98
Chenxiaolannnnn  
   302 天前
@foam #85 小白问下,部署在 koyeb 里,怎么改 melody key
foam
    99
foam  
OP
   302 天前 via Android
@Chenxiaolannnnn 我还未使用过哈,你可以研究下,有结果可以提下 PR 。感谢
DonkeyBenjamin
    100
DonkeyBenjamin  
   228 天前
已经用起来了,不错👍
关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2731 人在线   最高记录 5556   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 52ms · UTC 14:52 · PVG 22:52 · LAX 07:52 · JFK 10:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.