qq音乐免费下载,包含2个关键点,一个是根据歌名获取id,一个是根据id获取下载地址
根据歌名获取id
qq音乐有固定的根据歌名搜索歌曲信息api,参数是歌名。private String getSearchUrl(String songName) {
return "http://c.y.qq/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.center&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=50&w=" + songName + "&jsonpCallback=searchCallbacksong2020&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0";
}复制代码
这个url是搜索接口,通过这个接口返回搜索结果。
String searchUrl = getSearchUrl(name);
SongSearchResult result = getHttpResult(searchUrl, SongSearchResult.class);
String media_mid = result.getData().getSong().getList().get(0).getFile().getMedia_mid();
复制代码
解析搜索结果的数据结构,拿到歌曲id。
以“告白气球”为例:
获取到的id为 : 003OUlho2HcRHC
获取下载地址
通过歌曲id,跟vkey,以及歌曲的type来获取歌曲的下载地址。
private String getDownloadUrl(String vkey, String mediaId, int type) {
SongType songType = SongType.getType(type);
String songPath = songType.getHead() + mediaId + songType.getSuffix();
String downloadurl = "http://dl.stream.qqmusic.qq/" + songPath + "?vkey=" + vkey + "&guid=" + RANDOM_QQID + "&uin=0&fromtag=64";
return downloadurl;
}复制代码
规则如下:
"http://dl.stream.qqmusic.qq/" + songPath + "?vkey=" + vkey + "&guid=" + RANDOM_QQID + "&uin=0&fromtag=64";
- songPath
- vkey
- guid(随机数字,应该是qq号码类似结构就阔以)
http://dl.stream.qqmusic.qq/F000003OUlho2HcRHC.flac?vkey=84705F4CB0A8DB153D14259A3D34167B7862035008092D1AFC69679CAABA2314D4085915FEAB5C88308C397003DFAFEE54426BC03D0F501A&guid=1234567890&uin=0&fromtag=64
对应的:
- songpath:F000003OUlho2HcRHC.flac
- vkey :84705F4CB0A8DB153D14259A3D34167B7862035008092D1AFC69679CAABA2314D4085915FEAB5C88308C397003DFAFEE54426BC03D0F501A
- RANDOM_QQID :1234567890
songPath :
String songPath = songType.getHead() + mediaId + songType.getSuffix();复制代码
songPath结构为:
自己枚举了一下常用的数据格式
public enum SongType {
MP3_128k("M500", ".mp3"),
MP3_320k("M800", ".mp3"),
FLAC("F000", ".flac"), 54
APE("A000", ".ape");
private String head;
private String suffix;
SongType(String head, String suffix) {
this.head = head;
this.suffix = suffix;
}复制代码
表示歌曲码率以及格式。我们可以选择不同的码率及格式构造songPath。
vkey:
这个用来校验的,生成规则也简单,固定url,然后配置guid = RANDOM_QQID就可以产生。
vkey获取一次就可以了。
private final String RANDOM_QQID = "1234567890";
private final String URL_VKEY = "https://c.y.qq/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback39355320624659207&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback39355320624659207&uin=0&songmid=000YU69H3N55rZ&filename=C400000YU69H3N55rZ.m4a&guid=" ;
复制代码
if (vkey == null) {
vkey = HttpClient.getHttpResult(URL_VKEY +RANDOM_QQID , Vkey.class);
}复制代码
其中RANDOM_QQID是任意固定数字。
guid
这个猜测是qq用来做用户校验的一个数据。生成vkey和生成最终地址的guid应该保持同一个。我这里就写死了1234567890。数字的内容意义不大,保持一样就行。
然后就阔以生成最终地址下载地址了。
最后贴个流程图:
转载于:https://juejin.im/post/5abb4afd6fb9a028d207fc56
更多推荐
QQ音乐生成下载链接
发布评论