当你在百度去搜索一首歌时,你会发现有种更简单的方法。

http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌名$$作者$$$$

例如:

http://box.zhangmen.baidu.com/x?op=12&count=1&title=传奇$$李健$$$$

百度返回一个XML:

<result>
<count>1</count>
<url>
<encode>
<![CDATA[
http://zhangmenshiting.baidu.com/data2/music/51574053/ZmNoa2lmbGtfn6NndK6ap5WXcG1sl2qZYmtml2abcG6Tl5mVZ5dobpRpaWVlm5yak5WZl25tcGpiZZZnmJudaZNpY1qin5t1YWBraGtmb3BqamtlamlpbTE$
]]>
</encode>
<decode>
<![CDATA[
51574053.mp3?xcode=97a3a193c1e96befa2a16c7610eebbcfc979213c3cef1b70&mid=0.84608898815325
]]>
</decode>
<type>8</type>
<lrcid>170260</lrcid>
<flag>1</flag>
</url>
<durl>
<encode>
<![CDATA[
http://zhangmenshiting2.baidu.com/data2/music/121014239/YmRkZGZqaWtqYKCkaHWvm6CWmHFubZhrkmNsZ5hnnHFnlJiaZmpubGFrbGRlZmtpkmNoa2lmbWljlmZmZmmZb2NrZmxbo6CcbmJhbGlsZ3Bpa2tsZmtqamYy
]]>
</encode>
<decode>
<![CDATA[
121014239.mp3?xcode=97a3a193c1e96bef147409900041a15740612d3213b72938&mid=0.84608898815325
]]>
</decode>
<type>8</type>
<lrcid>170260</lrcid>
<flag>1</flag>
</durl>
<p2p>
<hash>218ad872a73061cfb5e4f40a6583f4ca98e739a4</hash>
<url>
<![CDATA[ ]]>
</url>
<type>mp3</type>
<size>7173146</size>
<bitrate>192</bitrate>
</p2p>
</result>

count :1代表查找成功且返回结果 0代表失败

url与durl分别对应不同质量的音频文件下载地址。

一下针对url里的内容分析,durl一样。

encode里的值是歌曲加密后的地址,加密只是对文件名加密的,我们需要的只是前面的路径,也就是
http://zhangmenshiting.baidu.com/data2/music/51574053/ 这部分,

然后复制decode 的值: 51574053.mp3?xcode=9baace62869d2dba935993ec0dabf034c979213c3cef1b70&mid=0.19874044629948

与前面的相拼就是正确的下载地址: 

http://zhangmenshiting.baidu.com/data2/music/51574053/51574053.mp3?xcode=9baace62869d2dba935993ec0dabf034c979213c3cef1b70&mid=0.19874044629948

http://zhangmenshiting.baidu.com/data2/music/51574053/51574053.mp3
不加参数则提示登录。

lrcid这个的值是百度服务器上这首歌的歌词文件的文件名,这个文件的路径是:http://box.zhangmen.baidu.com/bdlrc/1702/170260.lrc

这个地址解释下: 

http://box.zhangmen.baidu.com/bdlrc/ 这个是百度lrc歌词存放地址。后面的1702是一个的不定的数,也就是说歌曲不同那个目录名也不同,它的算法是拿歌词文件名(也就是上面说的170260)
除以一百,然后取小于等于其结果的最大整数,如上面的:170260/100
=1702.60 取小于等于1702.60 的最大整数就是1702,于是这首歌完整的歌词地址就出来了:http://box.zhangmen.baidu.com/bdlrc/1702/170260.lrc

最新文章

  1. javascript 练习示例(一)
  2. select 取的是session里面的值时
  3. (一)半小时开发一个APP
  4. Unity3D DllNotFoundException/System.DllNotFoundException
  5. Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for &hellip;
  6. js图片轮播图
  7. BIP_开发案例10_BI Publisher报表国际化多语言的实现(案例)
  8. Anchor和Dock的区别
  9. 【html】【15】特效篇--分页
  10. Extjs实现进度条
  11. .NET + Jcrop 实现在线裁图功能
  12. git 常用命令及问题解决(转)
  13. 关于微信分享功能开发的一些bug
  14. 来自一位工作一年多的猿的分享 ------- ioc
  15. hello world 为什么我们看到学习中有这一句话!!!
  16. 临时关闭Mac SIP系统完整性保护机制
  17. 团队Github实战训练
  18. HDU - 6080 :度度熊保护村庄 (凸包,floyd最小环)(VJ1900题达成)
  19. 20145315何佳蕾《网络对抗》Web安全基础
  20. 20155219&amp;20155224 《信息安全系统设计基础》实验二 固件程序设计

热门文章

  1. Java 自增、自减
  2. 超详细Node安装教程
  3. 2017 ACM-ICPC亚洲区域赛北京站J题 Pangu and Stones 题解 区间DP
  4. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告
  5. 「Vijos 1284」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法阵
  6. Java网络编程——TCP图片上传
  7. 1029 旧键盘 (20 分)C、Java、python
  8. 不懂Neo4j?没关系,先学增删改查
  9. C#反射与特性(七):自定义特性以及应用
  10. springboot2 整合mongodb