百度MP3音乐API接口及应用

最近在做一个播放器的项目,要实现从网络下载歌曲和歌词,看了很多别人的帖子和博客,今天上午终于搞定,也来总结一下,希望能帮助大家,好了,不说废话了,进入正题。

百度提供了一个开放音乐搜索的api,在浏览器的地址栏输入:

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" ?> 

-<result>

 <count>1</count>

-<url>

-<encode>

- <![CDATA[http://zhangmenshiting.baidu.com/data2/music/4725615/ZWllaWtnbGaeomZzrZmmnJZvbGdrbG2aZWhsZmacmWqUlGZkl2ZscGKXlWtuapqZZmVZoZ6adGhfaWpsa25raWRramVtbmw4

 ]]>

 </encode>

-<decode>

- <![CDATA[4725615.mp3?xcode=93666b46921fb2cb30b0581eb794ca53&mid=0.77868413971885

 ]]>

 </decode>

 <type>8</type>

 <lrcid>25635</lrcid>

 <flag>1</flag>

 </url>

-<durl>

-<encode>

- <![CDATA[http://zhangmenshiting2.baidu.com/data2/music/829260/aWRsZmtmZaWhZXKsmKWbnW5rZmprbJlsZ2tlZZuYaZuTZWOWZWtvaZaUam1pmZhtZFignZlzZ2ZoaWtqbWpoa2ppZGxtazc$

 ]]>

 </encode>

-<decode>

- <![CDATA[829260.mp3?xcode=93666b46921fb2cb30b0581eb794ca53&mid=0.77868413971885

 ]]>

 </decode>

 <type>8</type>

 <lrcid>25635</lrcid>

 <flag>1</flag>

 </durl>

-<p2p>

 <hash>284df2cfe87b4fe1442f4469aa688abc067a6243</hash>

-<url>

- <![CDATA[http://zhangmenshiting.baidu.com/data2/music/2346073/2346073.mp3?xcode=93666b46921fb2cb30b0581eb794ca53

 ]]>

 </url>

 <type>mp3</type>

 <size>6795585</size>

 <bitrate>192</bitrate>

 </p2p>

 </result>

大多数标签式没用的,<encode><decode><lrcid>三个标签是我们需要的,以第一个<url>为例;只需要用4725615.mp3?xcode=93666b46921fb2cb30b0581eb794ca53&mid=0.77868413971885替换

http://zhangmenshiting.baidu.com/data2/music/4725615/ZWllaWtnbGaeomZzrZmmnJZvbGdrbG2aZWhsZmacmWqUlGZkl2ZscGKXlWtuapqZZmVZoZ6adGhfaWpsa25raWRramVtbmw4中的ZWllaWtnbGaeomZzrZmmnJZvbGdrbG2aZWhsZmacmWqUlGZkl2ZscGKXlWtuapqZZmVZoZ6adGhfaWpsa25raWRramVtbmw4 ,这样就得到了歌曲的下载地址。lrcid这个的值是百度服务器上这首歌的歌词文件的文件名,这个文件的路径是:http://box.zhangmen.baidu.com/bdlrc/256/25635.lrc 


这个地址解析下:
http://box.zhangmen.baidu.com/bdlrc/ 这个是百度lrc歌词存放地址,256lrcid里的值除以100,后边的25635就是lrcid的值,这样就得到了歌曲的下载地址。如果lrcid的值为0,则表示没有对应的歌词。很简单吧,试试吧,嘿嘿.....







/**********************************************************************************************************************************/


当你在百度去搜索一首歌时,你会发现有种更简单的方法,嘿嘿,安宁ヤ太天真告诉你个秘密,百度有个不公开的API 

http://box.zhangmen.baidu.com/x?op=12&count=1&title=大约在冬季$$齐秦$$$$ 
用上面的地址,红色部分改成歌名与作者名,然后百度就会给你一个XML: 

Java代码  
<?xml version="1.0" encoding="gb2312" ?>   <result>     <count>1</count>   <data>  <encode>http://song.feifa-radio.com/Q/20050701/jingxuan/YjI$.Wma</encode>   <decode>1.Wma</decode>   <type>2</type>   <lrcid>49684</lrcid>       </data>  </result>  


其中的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


你可能感兴趣的:(百度MP3音乐API接口及应用)