百度音乐接口

百度其实有提供一个免费的音乐接口

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

返回的形式是以XML的格式返回;

其中encode中就是歌曲的地址,不过百度对它进行了加密,加密的部分是一串数字后面的那些乱码;

decode中就是encode中加密的内容,所以我们只要把decode中的部分替换中encode中就可以了,下面给的是PHP代码

$music="浮夸";
$name="陈奕迅";
$url="http://box.zhangmen.baidu.com/x?op=12&count=1&title=".$music."$$".$name."$$$$";
$xml = simplexml_load_file($url,null, LIBXML_NOCDATA) ; //创建 SimpleXML对象(后面两个参数是为了能读取到<![CDATA[]]>中的数据
$music_url=$xml->url;
$encode=$music_url->encode;
$decode=$music_url->decode;
$a="#/[0-9]+/(.+)$$#U";                   //正则匹配(括号中的部分才是我们要替换的)
preg_match($a,$encode,$c);
$change=array($c[1]=>$decode);
$music_url=strtr($encode,$change);
echo $music_url;

而如果你在使用simplexml_load_file的时候出现“parser error : switching encoding”的错误

那么,恭喜你,你无法使用百度音乐的接口

原因是百度音乐盒只提供给中国内地的用户,香港主机和国外主机都无法使用

之前用的香港主机所以被这个问题坑了几天,file_get_contents直接抓的时候以后一直是乱码,弄了好几天都没解决

直到无意中想试一下只抓取“http://box.zhangmen.baidu.com/”,然后就弹出了只提供给中国内地用户的警告

解决方法是只能找个人帮忙写个页面抓取,然后你再抓取他的页面了

之前找到了一个接口http://api.94qing.com/,里面提供了挺多内容的(包括百度音乐的接口),有需要的也可以用一下

posted @ 2013-06-09 12:48  唐好酸  阅读(728)  评论(2)    收藏  举报