21-7-14 游客身份从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,重新刷新页面再获取一次签名。