qq音乐免费下载,包含2个关键点,一个是根据歌名获取id,一个是根据id获取下载地址

根据歌名获取id

qq音乐有固定的根据歌名搜索歌曲信息api,参数是歌名。
private String getSearchUrl(String songName) {return "http://c.y.qq.com/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.com/" + songPath + "?vkey=" + vkey + "&guid=" + RANDOM_QQID + "&uin=0&fromtag=64";return downloadurl;
}复制代码

规则如下:

"http://dl.stream.qqmusic.qq.com/" + songPath + "?vkey=" + vkey + "&guid=" + RANDOM_QQID + "&uin=0&fromtag=64";

  1. songPath
  2. vkey
  3. guid(随机数字,应该是qq号码类似结构就阔以)

继续以“告白气球”为例,生成的下载地址为:

http://dl.stream.qqmusic.qq.com/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"), 54APE("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.com/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音乐生成下载链接相关推荐

  1. 使用IIS将APK生成下载链接详细步骤

    使用IIS将APK生成下载链接详细步骤 1. Ctrl+s 搜索IIS 2 .设置网站 地址为下图 点击新建,加上扩展名,.apk 然后下面类型写 application/vnd.android.pa ...

  2. java生成图片url_Java Springboot如何基于图片生成下载链接

    现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...

  3. 网易云音乐、QQ音乐一键下载工具(Go语言)

    网易云音乐 | QQ音乐 下载助手,支持一键下载单曲/专辑/歌单以及歌手热门歌曲,并自动更新音乐标签. 本项目仅供学习研究使用.如侵犯你的权益,请 联系作者 删除. 下载安装 你可以前往 Releas ...

  4. windows下使用bat命令根据测站文件生成下载链接

    场景描述: 有一个测站list文件,需要根据list里的测站生成不同的wget下载链接 方法: 写bat批处理文件可以很方便的解决这个问题 代码: ::关闭代码输出 @echo off ::设置变量 ...

  5. 文件如何生成下载链接?

    做自媒体这些年,时常需要通过文章分享一些文档给读者下载使用,在文章中分享文档(如Word.Excel.PPT.PDF等),难免需要把文件生成链接放在文章中分享给粉丝. 做过自媒体的同学都知道,目前主流 ...

  6. QQ音乐本地下载(python爬虫)

    首先我要介绍本期用到的材料: python selenium框架. QQ音乐接口:QQ音乐无损接口 requests,re,json框架 好了,准备完以上内容要准被开工了.首先不知带怎么配置可以参考文 ...

  7. 记一次获取QQ音乐播放源链接地址

    目标链接: https://y.qq.com/portal/playe... 分析network 发现一个请求: 双击打开发现就是歌曲播放源地址 紫棋小姐姐唱歌真好听~ 记住这个链接,并且多打开几个试 ...

  8. 迅雷,qq旋风等下载链接加密算法解析

    1.迅雷 迅雷链接地址转换原理是在地址的前方和后方加入两个字母AA.ZZ,然后再进行Base64加密,再加上Thunder://这个专用链接标识,从而转换成迅雷的专用地址. 例如: 原链接为:http ...

  9. iOS 为app生成下载链接,并生成二维码

    1.打开这个网址:http://aso100.com 在此处输入app名称,点搜索 2.看,第一个就是我们的app,下一步点击图标 3.点击app id . 4.看连接出来了 5.最后到这个网站生成二 ...

  10. python爬虫实战——运用requests批量下载qq音乐

    python -qq音乐爬取 在学习一段时间后,在视频的讲解下,觉得自己掌握的不错,就开始了这一次的qq音乐的爬取,在爬取的过程中发现了很多问题.知识点掌握的不够,知识点掌握的不熟,例如:正则表达式的 ...

最新文章

  1. VMware 克隆Linux后找不到eth0
  2. 【PAT甲级 素数判断 进制转换】1015 Reversible Primes (20 分) Java版 4/4通过
  3. LintCode 600. 包裹黑色像素点的最小矩形(BFS)
  4. LeetCode 70. 爬楼梯(动态规划)
  5. bzoj1132:[POI2008]Tro
  6. Effective Modern C++ 第三章第一节,C++新特性:初始化、nullptr、alias别名、enum
  7. 记录Jenkins+gitlab+maven
  8. 树莓派摄像头——图像 视频采集
  9. 学习用PS美化软件界面
  10. 华为#S系列交换机和E系列交换机基于IP网段配置限速
  11. NOIP2017模拟赛总结(2017.10.30-2017.11.1)
  12. Debian10 更换软件源 配置中文环境 安装中文输入法
  13. Python爬虫爬下IT之家图片
  14. 华为如何升级鸿蒙os,华为鸿蒙OS首批升级机型公布
  15. 温度场有限容积法程序入门之六:后处理.花絮.Contour Plotter and 3D Function Grapher Together - the Applet and the Souce Co
  16. hdu 1493 qq宠物
  17. 【Unity3D日常开发】生成预制体,并且预制体自动销毁
  18. 【虹科】什么是网络钓鱼?如何避免?
  19. win7系统打开截图工具显示“截图工具当前未在计算机上运行”
  20. 黑马程序员-Java高新技术-反射

热门文章

  1. 电脑桌面计算机软件不见了,电脑桌面图标不见了怎么恢复?
  2. 华三ASPF技术白皮书
  3. 显示器刷新率测试软件144,【显示器】为什么“吃鸡”要选144Hz显示器?详解高刷新率显示器对FPS游戏的重要影响...
  4. 收藏已久免费下载软件的黑科技网站
  5. 电力系统微型计算机继电保护试题及答案,a全p国2010年7月高等教育自学考试电力系统微型计算机继电保护试题及答案.doc...
  6. 计算机继电保护书籍,计算机继电保护的发展
  7. # RPGMaker MV 基础 1 : 项目目录认识
  8. C语言购物管理系统项目
  9. 导出PDF /home/education/font/simsun.ttc not found as file or resource.
  10. ssm+vue基于微信小程序的数学辅导教学学习系统#毕业设计