缘起
23 年上半年待业找工作发现很多都需要有 uniapp 开发经验,平时的时候喜欢听歌。结合 nondanee 大佬的 nondanee/UnblockNeteaseMusic 和后来的 UnblockNeteaseMusic/server 玩了几年,在这里感谢大佬们的付出。由于在移动端配置复杂,时不时就短路了,一不小心升级软件后,哦豁,还得降回来......
于是就打算用 uniapp 来练手搞事,结合大佬们的 Binaryify/NeteaseCloudMusicApi 和 UnblockNeteaseMusic/server 开始搞事,在 23 年 7 月开始,到 12 月差不多上了一个版本,期间因个人和工作原因耽搁了很久
前几天把 Mac 上的网易云音乐卸载了,从此过上了性福生活
介绍
魔杰音乐是一个支持多端(H5、小程序、Android、iOS)音乐播放器。使用了最新的 uni-app、Vue3、Vite、TypeScript、UnoCSS 等主流技术。
- 项目地址:mojiefong/uniapp-mojie-music 欢迎大家 Star!!!
- H5 预览:魔杰音乐(暂时没有域名,想要的域名被占用了,今年 6 月到期后看看会不会弃坑,等着接盘,嘿嘿)
目前已支持 H5 和微信小程序,Android 和 iOS 还没进行测试
目前已实现功能:
- 手机号登录、验证码登录
- 每日推荐歌曲、推荐歌单
- 歌单详情
- 所有排行榜
- 获取个人歌单、收藏歌单
- 独立播放器、mini 播放器
- 歌词滚动
- 收藏/取消搜藏歌曲
- 搜索音乐/热门搜索/历史搜索
- 切换音源
现在虽然已经上线,但是还有很多细节需要优化以及一些功能还没开发完,比如:
- 收藏/取消搜藏歌单
- 新建/删除歌单
- 搜索歌手、歌单
- 虚拟滚动列表
- 暗色主题
- mini 播放器唱片旋转和独立播放器唱片旋转优化等
- 音源切换优化等
- ...
有兴趣的朋友欢迎一起完善和交流,欢迎 PR,我的微信:18132526
核心魔法功能
修改 NeteaseCloudMusicApi 项目下的 song_url_v1.js 文件,不要直接粘贴,注意版本,如果升级了需要对比一下,谨慎操作
用 npm 或者 yarn 安装 @unblockneteasemusic/server 模块
// 歌曲链接 - v1
// 此版本不再采用 br 作为音质区分的标准
// 而是采用 standard, exhigh, lossless, hires, jyeffect(高清环绕声), sky(沉浸环绕声), jymaster(超清母带) 进行音质判断
const crypto = require('crypto')
const match = require('@unblockneteasemusic/server')
module.exports = async (query, request) => {
query.cookie.os = 'android'
query.cookie.appver = '8.10.05'
const data = {
ids: '[' + query.id + ']',
level: query.level,
encodeType: 'flac',
}
if (data.level == 'sky') {
data.immerseType = 'c51'
}
const res = await request(
'POST',
`https://interface.music.163.com/eapi/song/enhance/player/url/v1`,
data,
{
crypto: 'eapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
url: '/api/song/enhance/player/url/v1',
},
)
const result = res.body.data
const song = result[0]
// 把url地址为空的、VIP可听/所在专辑需单独付费,就添加魔法
// https://github.com/Binaryify/NeteaseCloudMusicApi/issues/899#issuecomment-680002883
if (!song.url || [1, 4].includes(song.fee)) {
const source = query.source || 'kuwo'
const { url } = await match(query.id, [source]) // 这里只设置一个源,避免多个产生随机选择问题
song.url = url
}
return res
}
Docker 部署
使用 docker-compose 进行编排
version: "3"
services:
# 部署H5
uniapp-mojie-music:
image: mojiee/uniapp-mojie-music:latest
container_name: uniapp-mojie-music
restart: always
environment:
# 后台API地址、注意不要加协议,只要ip+端口号或者域名
- API_BASE_URL=127.0.0.1:3000
ports:
- 9527:80
depends_on:
- netease-cloud-music-api
# 部署后台服务
netease-cloud-music-api:
image: mojiee/netease-cloud-music-api:latest
container_name: netease-cloud-music-api
restart: always
ports:
- 3000:3000