虾米音乐mp3地址解密javascript版和PHP版

虾米音乐国内音乐互联网平台中最完善的平台。和网易、新浪等多家都有合作,用户体验也非常好。

为了能充分利用虾米音乐做自己喜欢的音乐相关小工具,特将虾米音乐相关的接口公布出来,供大家使用。这些接口包含了音乐联想搜索、音乐详情、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<yu;i++)
	{
		stor[i] = newString.substr((chu+1)*i,chu+1);
	}

	for(i=yu;i<totle;i++)
	{
		stor[i] = newString.substr(chu*(i-yu)+(chu+1)*yu,chu);
	}

	var pinString = '';
	for(i=0;i<stor[0].length;i++)
	{
		for(j=0;j<stor.length;j++)
		{
			pinString += stor[j].substr(i,1);
		}
	}
	pinString = rtan(pinString);
	var returnString = '';
	for(i=0;i<pinString.length;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<str.length;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<$yu; $i++){
			$stor[$i] = substr($newString, ($chu + 1) * $i, $chu + 1);
		}
		for($i=$yu; $i<$totle; $i++){
			$stor[$i] = substr($newString, $chu * ($i - $yu) + ($chu + 1) * $yu, $chu);
		}
		$pinString = '';
		for($i=0; $i<strlen($stor[0]); $i++){
			for($j=0; $j<count($stor); $j++){
				$pinString .= substr($stor[$j], $i, 1);
			}
		}
		$pinString = rawurldecode($pinString);
		$returnString = '';
		for($i=0; $i<strlen($pinString); $i++){
			if(substr($pinString, $i, 1) == '^'){
				$returnString .= '0';
			}else{
				$returnString .= substr($pinString, $i, 1);
			}
		}
		return $returnString;
	}

发表评论

电子邮件地址不会被公开。

*