QQ音乐生成下载链接

编程知识 更新时间:2023-05-03 03:29:55
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&notice=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";

  1. songPath
  2. vkey 
  3. guid(随机数字,应该是qq号码类似结构就阔以)
继续以“告白气球”为例,生成的下载地址为:

http://dl.stream.qqmusic.qq/F000003OUlho2HcRHC.flac?vkey=84705F4CB0A8DB153D14259A3D34167B7862035008092D1AFC69679CAABA2314D4085915FEAB5C88308C397003DFAFEE54426BC03D0F501A&guid=1234567890&uin=0&fromtag=64

对应的:

  1. songpath:F000003OUlho2HcRHC.flac
  2. vkey :84705F4CB0A8DB153D14259A3D34167B7862035008092D1AFC69679CAABA2314D4085915FEAB5C88308C397003DFAFEE54426BC03D0F501A
  3. 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&notice=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音乐生成下载链接

本文发布于:2023-04-30 09:39:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/e2734b1503b6495290aba7d5d29c426d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:下载链接   音乐   QQ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 113836文章数
  • 28870阅读数
  • 0评论数