虾米音乐国内音乐互联网平台中最完善的平台。和网易、新浪等多家都有合作,用户体验也非常好。
为了能充分利用虾米音乐做自己喜欢的音乐相关小工具,特将虾米音乐相关的接口公布出来,供大家使用。这些接口包含了音乐联想搜索、音乐详情、mp3地址解码等,基本上覆盖了音乐应用的全部方面。
ZDNet广播体操片头曲点播平台就是一个很好的应用
联想搜接口地址:
http://www.xiami.com/ajax/search-index?key=朋友
音乐详情接口地址:
http://www.xiami.com/widget/xml-single/uid/0/sid/72299
音乐详情包含歌曲的名字、作者、专辑、封面图以及mp3下载地址。但是这个下载地址是加密的,需要以下解密函数解密:
mp3下载地址解密javascript版:
function sospa(str)
{
var totle = parseInt(str);
var newString = str.substr(1);
var chu = Math.floor(newString.length / totle);
var yu = newString.length % totle;
var stor = new Array();
var i;
for(i = 0;i
{
stor[i] = newString.substr((chu+1)*i,chu+1);
}
for(i=yu;i
{
stor[i] = newString.substr(chu*(i-yu)+(chu+1)*yu,chu);
}
var pinString = '';
for(i=0;i
{
for(j=0;j
{
pinString += stor[j].substr(i,1);
}
}
pinString = rtan(pinString);
var returnString = '';
for(i=0;i
{
if(pinString.substr(i,1)=='^')
{
returnString += "0";
} else {
returnString += pinString.substr(i,1);
}
}
return returnString;
}
function rtan(str){
var ret="";
for(var i=0;i
var chr = str.charAt(i);
if(chr == "+"){
ret+=" ";
}else if(chr=="%"){
var asc = str.substring(i+1,i+3);
if(parseInt("0x"+asc)>0x7f){
ret+=String.fromCharCode(parseInt("0x"+asc+str.substring(i+4,i+6)));
i+=5;
}else{
ret+=String.fromCharCode(parseInt("0x"+asc));
i+=2;
}
}else{
ret+= chr;
}
}
return ret;
}
mp3下载地址PHP版:
public function xiami_decode($str){
//$str = '9hFaF76%6t%m17%59t2i162E%pF.6%545%fn4222E31e%F%3.A.t2%5_m%x%F5E7p2i25E743';
$totle = (int)$str;
$newString = substr($str, 1);
$chu = floor(strlen($newString) / $totle);
$yu = strlen($newString) % $totle;
$stor = array();
$i = 0;
for($i=0; $i
$stor[$i] = substr($newString, ($chu + 1) * $i, $chu + 1);
}
for($i=$yu; $i
$stor[$i] = substr($newString, $chu * ($i - $yu) + ($chu + 1) * $yu, $chu);
}
$pinString = '';
for($i=0; $i
for($j=0; $j
$pinString .= substr($stor[$j], $i, 1);
}
}
$pinString = rawurldecode($pinString);
$returnString = '';
for($i=0; $i
if(substr($pinString, $i, 1) == '^'){
$returnString .= '0';
}else{
$returnString .= substr($pinString, $i, 1);
}
}
return $returnString;
}