msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

游客身份从SoundCloud下载MP3音频文件

不得不说,现在的流媒体网站确实很变态。为了下载自己喜欢的歌曲到电脑里,变得越来越难了。

以前查看页面源码,直接能找到歌曲的url,直接右击另存为就完事了。也算是斗智斗勇了。。。

SoundCloud 是国外著名的音频分享网站,里面有很多好歌,提供在线的免费试听。这个就给了我下载歌曲的可能性。

以袁咏琳的《画沙》为例,搜索歌名进入试听页面。打开F12,查看网络活动,可以观察到很多个的mp3字样的fetch 请求,如下图:

通过逐个打开后发现,每个音频时长大概在10秒左右。也就是说soundcloud 把一首完整的歌曲按照固定的SIZE切割成了若干块。用户在试听的时候不会感觉出来任何异样。但是若是要下载的话就变得很麻烦。

仔细观察url后发现一个规律,应该是使用了类似于路径变量PATH_VARIABLE 的东西,

https://cf-hls-media.sndcdn.com/media/4310412/4380628/t8iAt6nhAxDi.128.mp3?xxxxxxxx
>>>
https://cf-hls-media.sndcdn.com/media/START/STOP/t8iAt6nhAxDi.128.mp3?xxxxxxxx

相当于是下载文件的开始,结束大小区间。

弄懂了这一点,看到了一个 "https://cf-hls-media.sndcdn.com/playlist/t8iAt6nhAxDi.128.mp3/playlist.m3u8?xxxx" 的url,里面的内容基本印证了我的想法,如图:

如果是这样的话,那我可不可以找到文件最大的SIZE,然后修改url 把下载区间改成0-文件真实尺寸,那不就可以下载整首歌了?

想到这一层,我通过最后一次fetch 请求拿到了最终大小,如下图:

注:这个数值在playlist接口里面也可以找到。

然后将url修改成:
https://cf-hls-media.sndcdn.com/media/0/4380628/t8iAt6nhAxDi.128.mp3?xxxx 后面参数照搬,回车。

果然我可以试听到完整的《画沙》了,此刻,右击另存为,这首歌曲就可以下载到本地了。

大功告成!

注意:url 里面的Signature 签名啥的有时效限制,几分钟后就会失效。注意手速。真失效了提示 forbidden,重新刷新页面再获取一次签名。