续 云音乐链接接口

继续上次的探索,整理了下情况。

需求是我想做一张音乐卡片,除了播放音乐外,还能做音乐可视化。由于音乐可视化的Web audio API,需要音源支持跨域。在尝试网易云音乐的时候,发现其外链不能給Web audio API使用(报跨域错误),需要访问外链,返回一个CDN地址,把这个CDN地址传给Web audio API才能正常播放。

这样一来,就需要有个地方,将网易云音乐外链转成。

首先尝试在前端,但是发现不行。因为访问外链是通过HTTP 302直接换地址的,Axios抓不到接口。改用Fetch,虽然能拿到接口,但是好像也由于跨域问题,不能

既然前端不行,就尝试在后端代理网易云外链的接口。结果分别用nginx和python fastapi尝试,都不行,但是在我本地就可以。排查原因后,发现原来是因为我的服务器不在国内,国外访问网易云外链,报错拿不到CDN地址,所以接口不用。

这样一来,我需要在国内服务器上起这个服务。我这么试了一下后,在开发环境可以用了。但是等我部署到线上了,又不能用了。因为我线上是HTTPS,接口是HTTP写的,被浏览器拦截了。

于是我又想着用线上服务器的nginx代理一下这个国内接口。结果代理完10分钟,端口就被拦截了,提示我的域名没有备案,不让使用这个接口。。。。。真是尴尬。

就没有走Nginx代理,在服务器上起了一个fastapi,通过request再转发。这样才绕开了所有的限制。

但是国内服务器快过期了,我不准备续订。所以想了想,直接在家里电脑上起了查询接口,配置成开机启动的服务。再把服务器上那个fastapi程序改成向家里地址请求,通过这个方式最终实现了需求。

回顾一下,流程之所以搞得如此繁琐,主要还是在于网易云对海外的隔离。导致我不能直接在海外服务器上起服务。

PS : 网易云外链接口:https://music.163.com/song/media/outer/url?id=${id}.mp3

id跟歌曲介绍页是一样的,比如下面这首歌
https://music.163.com/#/song?id=22644323

其外链为https://music.163.com/song/media/outer/url?id=22644323.mp3

Aruarian Dance

Nujabes


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注