最近一直在虾米听歌,但是学校网速拙计,手机在外面也舍不得用流量听歌,遂百度。都说能用longkeymusic下载,试用一番还是不好使,再百度,根据教程真的解析出虾米的下载地址了。然后就有了做一个虾米音乐下载器自用的想法,也顺便熟悉一下Qt5.3的开发。

虾米音乐的解析不再赘述,详情可见我找到的那篇教程(http://www.shaoqun.com/a/29606.aspx)。不过比较坑爹的是它里面给出了一个过期的网址说是可以解析地址。然而,地址失效了。。。没办法,只能自己研究。

随便选了一首歌的Location代码做解释: 4h%2Ff.moF%4%722939l3a_%a2cc9464E16%55ut3Fmixim12121%1614.%uk3f1bfe474-3%5EEltA%5li.%2F2F722638m3teDed3499b%195E--lp%2.eac292919F1_8_pFhy1c7e6c2e543E%%n  乍看起来这串代码很复杂,不过百度之后发现是一种凯撒数列(不同的文章也有说叫凯撒矩阵的)加密,简单来说就是分组,横着写下来,然后竖着读出来。如何得知分了几行呢?字符串第一个字符就是行数,例子中得行数为4,将字符串分成四份可得如下矩阵:

竖着读出来可以看出是非常标准的http,剩下的就好办了,把location读取到字符串中,竖过来,再输出。

然而中间却遇到了一个问题,有些Location并不能完全组成一个矩阵,所以在实现的时候非常容易下标越界。我使用了一种巧妙的办法,使用Location中不会出现的‘~’字符作为占位,在转动的时候可以整个进行操作。而最后读取的时候,会检测是不是‘~’符号,只有不是的字符才会传给输出字符串。

最后,贴出完整版的虾米音乐location转正常url代码,希望能帮助后来的人:

QString Dialog::DecodeXiamiLocation(QString location)
{if(!(location.data()[0].isDigit()))//数字分行return "ERROR";int linecount=location.data()[0].digitValue();QString loc_temp=location.right(location.length()-1);int linestringcount=UpDiv(loc_temp.length(),linecount);int martix_size=linecount*linestringcount;QChar martix[martix_size];//凯撒矩阵转置for(int i=0;i<martix_size;i++){if(i<loc_temp.length())martix[i]=loc_temp.data()[i];elsemartix[i]='~';}QString ret;for(int j=0;j<linestringcount;j++)for(int i=0;i<linecount;i++)if(martix[i*linestringcount+j]!='~')ret.append(martix[i*linestringcount+j]);//urldecoderet=QUrl::fromPercentEncoding(ret.toLocal8Bit());//^转0ret=ret.replace('^','0');return ret;
}

PS:代码使用Qt5.3编译测试通过。

PPS:虾米音乐解析出来的地址带有auth_key ,在一段时间后就不能下载了,必须现解析现下载。而且,同一首歌曲不同时候请求到的Location都不一样。

PPPS:正在尝试把软件从简单的Location解析器转变为下载器,所以没留下截图.....

虾米音乐Qt版下载器之Location解密部分相关推荐

  1. php音乐链接,用PHP获取虾米音乐网的下载链接_php

    做链接转换的时候遇到的.虾米的链接解密有点烦,解法是我看别人的源码得到的.然后我把他改写成了php的版本.贴出来,有需要的就拿去用~ $mp3_id = '';//音乐ID function unes ...

  2. 虾米音乐如何重新下载

    虾米音乐如何重新下载 虾米音乐下载过后,如果不小心把下载好的音乐文件删了,或者想重新下载,突然发现下载的按钮无法点击,重启电脑也没用,其实是可以重新下载的. 只要把下载列表里面下载过的音乐删了,就可以 ...

  3. 从虾米音乐缓存中下载音乐

    浏览器:谷歌 听歌网站:虾米音乐 搜索自己想听的歌,点进去,先不开始听 右键打开检查---->NETWORK 搜索mp3文件,此时没有MP3文件 开始播放音乐,出现一条路径,复制该路径,用浏览器 ...

  4. php解析 虾米音乐地址解析,用PHP获取虾米音乐网的下载链接

    做链接转换的时候遇到的.虾米的链接解密有点烦,解法是我看别人的源码得到的.然后我把他改写成了PHP的版本.贴出来,有需要的就拿去用~ $mp3_id = '';//音乐ID function unes ...

  5. 酷我音乐linux版下载软件,Linux下的酷我音乐盒(开源非官方)

    kwplayer简介 kwplayer 是linux桌面下的轻量级的音乐播放软件, 由LiuLang同学开发, 使用的是Python3+gtk3, 开源的(GPLv3). 特点 它的主要特点有: • ...

  6. 网易云linux版本如何安装包,网易云音乐linux版下载-网易云音乐linux 安装包v1.1.0 官方版 - 极光下载站...

    网易云音乐Linux客户端特色 你可以在这里创建一个属于自己的专属听歌房间,别人看不到你在听什么. 任何你本地的铃声.任何平台上的铃声,只要你愿意,统统一键分享! 录制您的美妙歌声,一键上传平台,永久 ...

  7. 虾米音乐mac端应用代码注释惊现“穷逼vip”,是程序员干的

    http://www.guancha.cn/industry-science/2017_11_19_435527_s.shtml 11月19日,某技术论坛出现了一篇讨论阿里旗下虾米音乐客户端的帖子,引 ...

  8. 虾米音乐代码注释惊现“穷逼vip”程序员又背锅了

    开源最前线(ID:OpenSourceTop) 猿妹整编 综合自:V2EX社区.知乎等 11 月 19 日,在 V2EX 社区的技术版一名网友发布了一篇名为<虾米 mac 客户端发现个好玩的注释 ...

  9. 程序员又背锅了!虾米音乐代码注释惊现“穷逼vip”

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 11 月 19 日,在 V2EX 社区的技术版一名网友发布了一篇名为<虾米 mac ...

最新文章

  1. WebGL光栅化流水线
  2. Android系统中提供的原子操作
  3. 程序员职业发展路径图:从菜鸟工程师到高级架构师
  4. linux 编译3g驱动_linux下使用3G拨号上网 以及3g驱动设置
  5. rtsp转rtmp服务linux,ubuntu安装流媒体服务器(nginx+rtmp,rtsp转rtmp,rtsp转m3u8)
  6. 数据库系统概论-第一章绪论
  7. 【算法图解】 之 [二分查找法] 详解
  8. 获取CPU序列号的Delphi程序
  9. 上,下拉电阻的作用与计算
  10. matlab入门基础函数
  11. 5G网络切片安全隔离机制与应用
  12. 一些CS领域、互联网领域的名词解释,作为知识补充
  13. influxdb Measurements
  14. 记一次云主机如何挂载对象存储
  15. rails respon_to
  16. 如何记账并生成收入、支出的图表
  17. 用vue写的移动端车牌号输入法
  18. 实习与就业--软件外包公司(一)
  19. 思仪 4024A/B/C/D/E/F/G/H/L频谱分析仪
  20. 将数据导入到Excel表格

热门文章

  1. 今天发布视频-深海采矿船
  2. 【踩坑】cat3.x服务端部署, springboot客户端接入
  3. 小米网络信号测试软件,小米11信号怎么样_小米11信号测试
  4. 挖煤小伙带你SSH安全加固
  5. 如何下载保定市卫星地图高清版大图
  6. 微信小程序的家教信息系统
  7. c++ promer和c++ primer Pluse下载
  8. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...
  9. Java web开发及框架技术 资料下载
  10. rce漏洞 远程代码执行 简介