尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

告别手动一首首添加:三分钟完成歌单迁移,跨平台音乐转移如此简单

告别手动一首首添加:三分钟完成歌单迁移,跨平台音乐转移如此简单 告别手动一首首添加三分钟完成歌单迁移跨平台音乐转移如此简单【免费下载链接】GoMusic迁移网易云/汽水/QQ音乐歌单至 Apple/Youtube/Spotify Music项目地址: https://gitcode.com/gh_mirrors/go/GoMusic你有没有过这样的时刻某个音乐 App 的曲库再也留不住你但那个攒了三年的歌单却像一根无形的绳子把你拴在原地。500 首歌从网易云搬到新的平台如果手动一首首搜索大概要花掉一整个下午中途还可能因为版权缺失而崩溃。这正是歌单迁移工具 GoMusic 要解决的问题——这款基于 Golang Gin 后端、Vue ElementUI 前端的开源项目让你只需粘贴一个链接就能把网易云、QQ 音乐的歌单原样搬到 Apple Music、YouTube Music 或 Spotify全程不超过三分钟。深夜两点我和 500 首歌说了再见先讲一个真实到有点扎心的场景。凌晨两点你终于下定决心换掉用了七年的网易云。原因可能很简单无损音质、家人都在用、或者某个独家的播客。你打开新平台兴冲冲搜索第一首歌——找到了加入歌单。第二首也找到了。到了第 47 首某首被下架的华语老歌让你彻底破防。你开始意识到这不止是复制粘贴的问题而是一首首确认的体力活。于是你打开浏览器试图搜索歌单迁移的免费方案。搜索结果里要么是收费的会员制服务要么是操作复杂到需要看半小时教程的脚本。你默默关掉了网页决定再等等。等等其实不必等。GoMusic 的思路很简单它不做搬运工而是做翻译官。它只负责把源平台的歌单读取出来转成一行行歌曲名 - 歌手的标准文本剩下真正的迁移动作交给 TunemyMusic、Spotlistr 这类成熟的第三方工具完成。两段式设计各司其职反而让整个链路异常干净。点击获取歌单后服务端发生了什么也许你会好奇一个链接丢进去怎么就变成了整整齐齐的歌单文本整个过程可以拆成三步对应着项目里三个职责分明的目录。第一步识别平台。你在页面输入链接后handler/music.go中的路由处理器会先用正则判断链接属于哪个平台——163cn或.163.开头的走网易云通道含.qq.的走 QQ 音乐通道。这个判断逻辑写在handler/router.go绑定的/songlist接口里一行switch搞定分流。第二步解析歌单。网易云和 QQ 音乐的解析分别封装在logic/neteasy.go和logic/qqmusic.go中。拿网易云举例NetEasyDiscover函数先请求歌单详情接口拿到全部歌曲 ID再按 500 首一批分批请求歌曲详情最后拼出标准化的歌名 - 歌手格式。这里用到了golang.org/x/sync/errgroup做并发请求几百首歌的详情几次网络往返就能拿全。第三步输出文本。解析结果会组装成歌曲列表每行一首格式统一。这个格式对第三方工具是友好协议——TunemyMusic 和 Spotlistr 都支持任意文本作为歌单来源粘贴即用。值得一提的细节是misc/utils/music.go里的StandardSongName函数还会对歌名做标准化把中文括号替换成英文括号并补上空格去掉【某某版本】这类杂讯。别小看这一步——第三方的匹配算法对格式很敏感往往一两个字符的差异就决定了一首歌是匹配成功还是查找不到。一次完整迁移只要四个动作下面是完整流程每一步都配合操作要点照做即可。① 复制歌单链接。在网易云或 QQ 音乐 App 里打开想迁移的歌单点分享选择复制链接。短链、长链都行甚至直接粘贴带中文的分享文案也可以解析器会自动从文本中提取有效 URL。② 粘贴并获取歌单。打开 GoMusic 页面把链接贴进输入框点击获取歌单。几秒钟后下方文本框会列出完整的歌单内容顶部显示歌曲总数。如果某个链接解析失败通常是因为歌单是私有的改成公开后重试即可。③ 复制结果。点击复制结果按钮歌单文本就进了剪贴板。此时建议先粗略扫一眼内容确认歌曲数量和你预期一致。④ 交给第三方工具收尾。打开 TunemyMusic 或 Spotlistr选择来源为任意文本粘贴再把目的地选为 Apple Music、YouTube Music 或 Spotify确认迁移。这一步里平台会自动匹配歌曲并给出成功/失败统计。迁移完成后你会看到类似上图的结果116 首歌80 首成功28 首因版权或地区限制丢失。这个数字很诚实——版权壁垒客观存在任何工具都无法绕过但至少它把你从500 首逐一验证变成了只看这 28 首哪里不对。藏在源码里的三个小心思如果把 GoMusic 当作普通脚本看你会错过它最有意思的部分。有三处细节值得单独聊聊。其一QQ 音乐的签名逆向。QQ 音乐的接口不是随便就能调的它需要携带特定签名参数。misc/utils/qqmusic_sign.go里的Encrypt函数用 MD5 哈希配合自定义的字符映射表生成以zzb开头的签名。更聪明的是QQMusicDiscover会依次尝试-1、android、iphone、h5等多个平台标识——因为不同歌曲在不同平台端的可见性不同这个逐个试错的策略大幅提高了歌曲的命中率。这种对平台接口的深入理解正是项目稳定运行的底气。其二三级缓存体系。反复请求同一个歌单是很常见的场景比如你换了好几次目标平台。GoMusic 为此设计了 Redis 缓存 MySQL 持久化的组合请求先查 Redis未命中再查数据库最后才真正请求源平台。代码注释里写着失败不退出即便缓存挂了也只会多花一次网络请求不会让整个功能瘫痪。这个设计在repo/db/mysql.go和缓存模块中都有体现同时对每次查询结果回写让热歌单越查越快。其三分块并发控制节奏。解析大歌单时请求按 500 首分块块与块之间用 errgroup 并发执行。既不会一次打爆接口又能把耗时压缩到秒级。对这种不追求极致速度但求稳的节奏控制开发者显然是有过思考的。自己部署一台数据全在自己手里公共站点用着方便但如果你对数据敏感或者想折腾点新玩法本地部署也只需要三条命令git clone https://gitcode.com/gh_mirrors/go/GoMusic cd GoMusic go build ./GoMusic服务默认跑在 8081 端口前提是本地装好了 Golang 环境。如果你还想体验完整的缓存功能可以按repo/db/mysql.go里的配置准备一个 MySQL 实例。部署在自己手里之后你就解锁了一些进阶玩法分批迁移大歌单超过 200 首的歌单建议拆成几批处理既稳妥又便于对照丢失曲目。挑时段操作非高峰时段比如工作日上午接口响应更稳定迁移成功率也更高。迁移后务必抽样试听数量对得上不等于内容对得上随机试听几首确认版本和音质符合预期。定期关注版本更新音乐平台的接口和加密策略会不定期调整及时跟进项目更新是长期可用的前提。开源项目的生命力在于下一个作者是你GoMusic 目前聚焦在国内平台 → 国际平台这个方向但它的结构决定了扩展空间很大解析逻辑和迁移逻辑彻底分离意味着未来完全可以加上更多源平台甚至实现国内平台之间的互转。代码量不大结构清晰handler/、logic/、misc/各司其职——这几乎是刻意给后来者留的作业区域。你可以贡献新的平台解析器可以优化签名算法可以改进缓存策略甚至只是提一个使用体验上的反馈。开源项目的魅力就在于此它不只是一份可以免费使用的工具更是一份公开的、可以被任何人续写的说明书。回到开头那个深夜你终于不必再和那 500 首歌一一道别。把链接贴进去三分钟它们会在新世界里重新整齐列队。音乐是流动的歌单也理应随你而动——而 GoMusic 要做的就是帮你把这扇门打开得再轻一点。【免费下载链接】GoMusic迁移网易云/汽水/QQ音乐歌单至 Apple/Youtube/Spotify Music项目地址: https://gitcode.com/gh_mirrors/go/GoMusic创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表