1、歌名、歌手搜索接口:
或者:
http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword=歌曲名称&page=1&pagesize=20&showtype=1
2、歌曲具体信息接口(包括播放地址)
这个接口之前一直没问题,后来就错误编码20010了。经研究,只要在header中添加一个cookie即可:
key:Cookie
value:kg_mid=任意值
理论上是任意值都可以,但是貌似会有个时效性,所以我们还是根据官方js中的逻辑来给他一个值,官方js中是生成一个长度为4的随机字符串,然后再通过MD5加密而得。所以我们java代码可以这么给:
首先是生成四位数的随机字符串:
/**
* 生成随机数字和字母,
*/
public String getStringRandom(int length) {
String val = "";
Random random = new Random();
//参数length,表示生成几位随机数
for(int i = 0; i < length; i++) {
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
//输出字母还是数字
if( "char".equalsIgnoreCase(charOrNum) ) {
//输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val += (char)(random.nextInt(26) + temp);
} else if( "num".equalsIgnoreCase(charOrNum) ) {
val += String.valueOf(random.nextInt(10));
}
}
return val;
}
然后是MD5加密:
/**
* 32位MD5加密
* @param content -- 待加密内容
* @return
*/
public String md5Decode(String content) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("NoSuchAlgorithmException",e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UnsupportedEncodingException", e);
}
//对生成的16字节数组进行补零操作
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10){
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
然后就是给kg_mid赋值:
return "kg_mid="+md5Decode(getStringRandom(4));