最近在做一个播放器的项目,要实现从网络下载歌曲和歌词,看了很多别人的帖子和博客,今天上午终于搞定,也来总结一下,希望能帮助大家,好了,不说废话了,进入正题。
http://box.zhangmen.baidu.com/x?op=12&count=1&title=歌名$$歌手$$$$
其中歌名和歌手两个字段值需要经过utf-8编码
URLEncoder.encode(song.trim(), “utf-8”);
这个是编码方法
然后访问回来的中歌曲下载的url还要处理一下,如:
http://box.zhangmen.baidu.com/x?op=12&count=1&title=怒放的生命$$汪峰$$$$,返回xml格式的流。
<?xml version="1.0" encoding="gb2312" ?>
- <![CDATA[4725615.mp3?xcode=93666b46921fb2cb30b0581eb794ca53&mid=0.77868413971885
- <![CDATA[829260.mp3?xcode=93666b46921fb2cb30b0581eb794ca53&mid=0.77868413971885
<hash>284df2cfe87b4fe1442f4469aa688abc067a6243</hash>
其中的count值为1是说返回的是一个,这个没什么用,接下来的东西就有用了,encode里的值是歌曲加密后的地址,加密只是对文件名加密 的,我们需要的只是前面的路径,也就是 http://song.feifa-radio.com/Q/20050701/jingxuan/ 这部分,然后复制decode 的值: 1.Wma 与前面的相拼就是正确的下载地址:
http://song.feifa-radio.com/Q/20050701/jingxuan/1.Wma
后面的type的值为2表示此歌曲文件类型是wma的,其它的:1表示rm,0表示MP3,通常我们下的类型都是MP3或WMA的,所以只要有2或0的
lrcid这个的值是百度服务器上这首歌的歌词文件的文件名,这个文件的路径是:http://box.zhangmen.baidu.com/bdlrc/496/49684.lrc
这个地址解析下:
http://box.zhangmen.baidu.com/bdlrc/ 这个是百度lrc歌词存放地址,后面的496是一个的不定的,民就是说歌曲不同那个目录名也不同,它的算法是拿歌词文件名(也就是上面说的 49684) 除以一百,然后取小于等于其结果的最大整数,如上面的:49684/100 =496.84 取小于等于496.84 的最大整数就是496,于是这首歌完整的歌词地址就出来了:http://box.zhangmen.baidu.com/bdlrc/496 /49684.lrc