凯冰科技

凯冰科技

凯冰科技开源分享:凯冰音乐音乐平台歌曲解析之虾米音乐

PHPzkbhj 发表了文章 • 0 个评论 • 1891 次浏览 • 2017-12-05 11:13 • 来自相关话题

凯冰音乐(music.zkbhj.com)是凯冰科技旗下一个音乐类型的APP,主要解决了目前音乐市场歌曲版权分散,无法集中欣赏自己喜欢的音乐的问题而开发的。截止目前,已经可以对酷狗音乐、酷我音乐、虾米音乐、QQ音乐、网易云音乐和咪咕音乐六大主流音乐平台的歌曲解析。今天把这几个当中比较有意思的一个“破解解析”之路分享给大家,那就是虾米音乐。(记不记得前几天网上比较火的那个“穷逼VIP”,哈哈哈,就是出自阿里虾米音乐程序员之手!)。





言归正传,步入正题!
首先,破解虾米音乐的歌曲地址需要了解以下一些概念:
1、动态歌曲地址(所有音乐平台的歌曲地址都不是固定不变的,每一次请求的url都是经过计算甚至加密的);
2、恺撒加密,这个是虾米音乐使用的一种加密混淆方式,这也是我把他拿出来给大家分享的原因,比较有意思,破解难度稍高!

在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报,下面这张图加密方法就是错三个位来实现加密功能。
 







好了,开始整个破解过程!
 
首先,按照套路,我们需要观察虾米音乐的PC端播放器,在播放歌曲的时候,音乐文件的url是怎么获取到的。这个很简单,一个F12即可!





 
先来搜一首我的邓紫棋的一首歌曲,点击进入详情页,嗯,这个时候你会发现url中有一个数字,这个很重要,是这首歌曲的id,下面是要用得到的。
 
点击播放,进入PC版播放器界面,熟悉的音乐传来,按下F12,过滤掉其他无用的请求信息,只留下XHR类型的请求,你会发现第一个就是你想要的。没错,就是他!





 
来看一下请求地址:Request URL:http://www.xiami.com/song/play ... np670
Request Method:GET熟悉不?是个jsonp请求。里面用到了刚刚提到的那个id。当然,这个url地址你是无法直接请求的,因为做了refer来源的判断,只有*.xiami.com的来源请求才会被应答,否则是404。
 
ok,再看下返回结果。{
"status":true,
"message":null,
"data":{
"trackList":[
{
"songId":"1770016497",
"songName":"A.I.N.Y. (爱你)",
"subName":"",
"newSubName":"",
"translation":"",
"albumId":424082,
"artistId":55712,
"singers":"G.E.M.邓紫棋",
"mvId":489278,
"cdSerial":1,
"track":9,
"pinyin":"A.I.N.Y. (ai ni )",
"bakSongId":0,
"panFlag":0,
"musicType":"NORMAL",
"bakSong":null,
"lyricInfo":{
"lyricId":10064461,
"lyricType":3,
"lyricFile":"http://img.xiami.net/lyric/97/ ... ot%3B,
"isOfficial":true
},
"songwriters":"",
"composer":"",
"arrangement":"",
"boughtCount":0,
"pace":140,
"albumLanguage":"国语",
"playCount":2875407,
"offline":false,
"downloadCount":false,
"originOffline":false,
"exclusive":false,
"bizTags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"recommendCount":811,
"collectCount":7657,
"songStringId":"xLsLMvc02a4",
"albumStringId":"kkCgaa42a",
"artistStringId":"be6yda0f8",
"singerIds":[
55712
],
"demoCreateTime":1340847262000,
"tags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"offLyric":false,
"artist":"G.E.M.邓紫棋",
"songOpt":"NORMAL",
"purviews":{
"LISTEN":{
"LOW":"FREE",
"HIGH":"FREE"
},
"DOWNLOAD":{
"LOW":"FREE",
"HIGH":"FREE"
}
},
"publishStatus":"PUBLISH",
"demo":false,
"s":2875407,
"song_id":"1770016497",
"album_id":424082,
"name":"A.I.N.Y. (爱你)",
"title":"A.I.N.Y. 爱你",
"album_name":"A.I.N.Y. 爱你",
"sub_title":"",
"new_sub_title":"",
"song_sub_title":"",
"artist_name":"G.E.M.邓紫棋",
"artist_id":55712,
"cd_serial":1,
"singersSource":[
{
"artistId":55712,
"artistStringId":"be6yda0f8",
"artistName":"G.E.M.邓紫棋",
"artistLogo":"images/artistlogo/23/14578645251123_1.jpg",
"albumCount":28,
"area":"Hongkong 香港",
"alias":"邓紫棋 / 邓诗颖",
"pinyin":"G.E.M.deng zi qi ",
"isMusician":false,
"isShow":false,
"description":""
}
],
"length":224,
"recommends":811,
"collects":7657,
"key_words":null,
"music_type":0,
"play_volume":89,
"flag":null,
"album_logo":"images/album/img12/55712/4240821466497268_1.jpg",
"needpay":0,
"mvUrl":"K6YhbP",
"playstatus":1,
"downloadstatus":1,
"downloadjson":"%7B%22LOW%22%3A%22FREE%22%2C%22HIGH%22%3A%22FREE%22%7D",
"can_show":1,
"can_check":1,
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
"lyric":"http://img.xiami.net/lyric/97/ ... ot%3B,
"lyric_url":"http://img.xiami.net/lyric/97/ ... ot%3B,
"object_id":"1770016497",
"object_name":"default",
"insert_type":1,
"background":"http://img.xiami.net/res/playe ... ot%3B,
"aritst_type":"",
"artist_url":"http://www.xiami.com/artist/55712",
"grade":-1,
"tryhq":0,
"pic":"http://img.xiami.net/images/al ... ot%3B,
"album_pic":"http://img.xiami.net/images/al ... ot%3B,
"rec_note":""
}
],
"lastSongId":0,
"type":"default",
"type_id":1,
"clearlist":null,
"vip":0,
"vip_role":0,
"hqset":0
},
"jumpurl":null
}








 
失望!接口并没有直接返回音频文件的地址,而是返回了一个下面这样的东东:"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",没错,它是这首歌曲这次请求返回对的音频文件地址,拿来用肯定是不行的,那我该怎么办! 
现在遇到了两个问题:
1、获取地址的接口没办法直接调用;
2、返回的音频地址经过了加密处理,没办法直接使用。
 
还好,虾米音乐有些场景还是需要直接调的,比如外链播放器、甚至是APP客户端等,所以能够直接获取歌曲信息的接口找到了,可用的有以下两个:http@//www.xiami.com/widget/xml-single/sid/1770016497
http@//www.xiami.com/widget/json-single/sid/1770016497 
他们分别返回的格式有xml和json两种,我们选择第一种来看看,(json太简单了,而且试过了,有些歌曲没有数据返回)好了,第一个问题解决了,那么来第二个问题:如何把加密后的结果还原成可以正常访问的音频文件地址!还好,它用了加密算法领域最简单的恺撒加密,只要按照规律就可以轻松破解。
 
用类似于恺撒方阵把链接的第一个数字去掉然后前两行分为21个字符,后六行分为20个字符排列:h28n557%45E.u3E553513
tF.e%%826E1mtD4EEbf92
t%xt22%F593ph17--5%87
p2i%FF532%93_56%de58e
%Fa253E4_57%k1%556E3f
3mmF6%%%1E83e35E%58f6
A1i115555%7Fy%E-5f7ae
%2.33EEE%54a%5%%Ea79你会发现从左边开始竖着往下拼起来类似于音乐链接了:http%3A%2F%2Fm128.xiami.net%2F135%2F56135%2F3%5E78%5E%5E%2F34%5E4652_15%5E9%5E%5E1397874.mp3%3Fauth_key%3D1513%5E476%5E%5E-%5E-%5E-d5%5E3b5e65fa5f%5E87719883fa9327ef6e把这条链接UrlDecode解码一下得到:http://m128.xiami.net/135/56135/3^78^^/34^4652_15^9^^1397874.mp3?auth_key=1513^476^^-^-^-d5^3b5e65fa5f^87719883fa9327ef6e然后把^字符替换成0得到:http://m128.xiami.net/135/56135/307800/3404652_1509001397874.mp3?auth_key=1513047600-0-0-d503b5e65fa5f087719883fa9327ef6e 
好了,这个就是我们最终想要的音频文件地址,拿来可以直接用了!
 
bingo,到此为止,解析结束。
 
PHP实现的代码如下:<?php
/*
虾米音乐音频文件地址解密算法,凯撒数列加密方式。
*/
namespace Org\Util;

class XiaMiMusic
{

public function decode($t) {
$l = substr($t, 0, 1);
$t = substr($t, 1);
$tn = strlen($t);
$ln = floor($tn / $l);
$r = $tn % $l;
$tex = str_split($t);

$text = '';
for ($i = 0;$i <= $ln;$i++) {
for ($j = 0;$j < $l;$j++) {
$n = $j * $ln + $i;
if ($j < $r) $n+= $j;
else $n+= $r;
if (isset($tex[$n])) $text.= $tex[$n];
else break;
}

}

$preg = array('^', '%');
$replace = array(0, '|');
return str_replace($preg, $replace, urldecode(substr($text, 0, $tn)));
}


public function getMusicUrl($id)
{

if($id){

$xml = file_get_contents('http://www.xiami.com/widget/xml-single/uid/0/sid/'.$id);
//匹配location内容
preg_match("/<\!\[CDATA\[([^\]].*)\]\]><\/location>/i",$xml,$location);
//转码得到正确的地址
return (string)$this->decode($location[1]);

}else{
return "";
}

}

}


$a = new xiamiMusic();
echo $a->getMusicUrl(1770016497);





 
好了,来听听这首《爱你A.I.N.Y》吧(实际这首歌曲解析来自QQ音乐平台,下次再分享这个喽,嘿嘿)!http://music.zkbhj.com/?goto=listen&id=646
  查看全部
凯冰音乐(music.zkbhj.com)是凯冰科技旗下一个音乐类型的APP,主要解决了目前音乐市场歌曲版权分散,无法集中欣赏自己喜欢的音乐的问题而开发的。截止目前,已经可以对酷狗音乐、酷我音乐、虾米音乐、QQ音乐、网易云音乐和咪咕音乐六大主流音乐平台的歌曲解析。今天把这几个当中比较有意思的一个“破解解析”之路分享给大家,那就是虾米音乐。(记不记得前几天网上比较火的那个“穷逼VIP”,哈哈哈,就是出自阿里虾米音乐程序员之手!)。

timg_(1).jpg

言归正传,步入正题!
首先,破解虾米音乐的歌曲地址需要了解以下一些概念:
1、动态歌曲地址(所有音乐平台的歌曲地址都不是固定不变的,每一次请求的url都是经过计算甚至加密的);
2、恺撒加密,这个是虾米音乐使用的一种加密混淆方式,这也是我把他拿出来给大家分享的原因,比较有意思,破解难度稍高!


在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报,下面这张图加密方法就是错三个位来实现加密功能。
 



1026866-20161028113544203-1413480347.png


好了,开始整个破解过程!
 
首先,按照套路,我们需要观察虾米音乐的PC端播放器,在播放歌曲的时候,音乐文件的url是怎么获取到的。这个很简单,一个F12即可!

QQ截图20171205120809.jpg

 
先来搜一首我的邓紫棋的一首歌曲,点击进入详情页,嗯,这个时候你会发现url中有一个数字,这个很重要,是这首歌曲的id,下面是要用得到的。
 
点击播放,进入PC版播放器界面,熟悉的音乐传来,按下F12,过滤掉其他无用的请求信息,只留下XHR类型的请求,你会发现第一个就是你想要的。没错,就是他!

QQ截图20171205121000.jpg

 
来看一下请求地址:
Request URL:http://www.xiami.com/song/play ... np670
Request Method:GET
熟悉不?是个jsonp请求。里面用到了刚刚提到的那个id。当然,这个url地址你是无法直接请求的,因为做了refer来源的判断,只有*.xiami.com的来源请求才会被应答,否则是404。
 
ok,再看下返回结果。
{
"status":true,
"message":null,
"data":{
"trackList":[
{
"songId":"1770016497",
"songName":"A.I.N.Y. (爱你)",
"subName":"",
"newSubName":"",
"translation":"",
"albumId":424082,
"artistId":55712,
"singers":"G.E.M.邓紫棋",
"mvId":489278,
"cdSerial":1,
"track":9,
"pinyin":"A.I.N.Y. (ai ni )",
"bakSongId":0,
"panFlag":0,
"musicType":"NORMAL",
"bakSong":null,
"lyricInfo":{
"lyricId":10064461,
"lyricType":3,
"lyricFile":"http://img.xiami.net/lyric/97/ ... ot%3B,
"isOfficial":true
},
"songwriters":"",
"composer":"",
"arrangement":"",
"boughtCount":0,
"pace":140,
"albumLanguage":"国语",
"playCount":2875407,
"offline":false,
"downloadCount":false,
"originOffline":false,
"exclusive":false,
"bizTags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"recommendCount":811,
"collectCount":7657,
"songStringId":"xLsLMvc02a4",
"albumStringId":"kkCgaa42a",
"artistStringId":"be6yda0f8",
"singerIds":[
55712
],
"demoCreateTime":1340847262000,
"tags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"offLyric":false,
"artist":"G.E.M.邓紫棋",
"songOpt":"NORMAL",
"purviews":{
"LISTEN":{
"LOW":"FREE",
"HIGH":"FREE"
},
"DOWNLOAD":{
"LOW":"FREE",
"HIGH":"FREE"
}
},
"publishStatus":"PUBLISH",
"demo":false,
"s":2875407,
"song_id":"1770016497",
"album_id":424082,
"name":"A.I.N.Y. (爱你)",
"title":"A.I.N.Y. 爱你",
"album_name":"A.I.N.Y. 爱你",
"sub_title":"",
"new_sub_title":"",
"song_sub_title":"",
"artist_name":"G.E.M.邓紫棋",
"artist_id":55712,
"cd_serial":1,
"singersSource":[
{
"artistId":55712,
"artistStringId":"be6yda0f8",
"artistName":"G.E.M.邓紫棋",
"artistLogo":"images/artistlogo/23/14578645251123_1.jpg",
"albumCount":28,
"area":"Hongkong 香港",
"alias":"邓紫棋 / 邓诗颖",
"pinyin":"G.E.M.deng zi qi ",
"isMusician":false,
"isShow":false,
"description":""
}
],
"length":224,
"recommends":811,
"collects":7657,
"key_words":null,
"music_type":0,
"play_volume":89,
"flag":null,
"album_logo":"images/album/img12/55712/4240821466497268_1.jpg",
"needpay":0,
"mvUrl":"K6YhbP",
"playstatus":1,
"downloadstatus":1,
"downloadjson":"%7B%22LOW%22%3A%22FREE%22%2C%22HIGH%22%3A%22FREE%22%7D",
"can_show":1,
"can_check":1,
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
"lyric":"http://img.xiami.net/lyric/97/ ... ot%3B,
"lyric_url":"http://img.xiami.net/lyric/97/ ... ot%3B,
"object_id":"1770016497",
"object_name":"default",
"insert_type":1,
"background":"http://img.xiami.net/res/playe ... ot%3B,
"aritst_type":"",
"artist_url":"http://www.xiami.com/artist/55712",
"grade":-1,
"tryhq":0,
"pic":"http://img.xiami.net/images/al ... ot%3B,
"album_pic":"http://img.xiami.net/images/al ... ot%3B,
"rec_note":""
}
],
"lastSongId":0,
"type":"default",
"type_id":1,
"clearlist":null,
"vip":0,
"vip_role":0,
"hqset":0
},
"jumpurl":null
}








 
失望!接口并没有直接返回音频文件的地址,而是返回了一个下面这样的东东:
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
没错,它是这首歌曲这次请求返回对的音频文件地址,拿来用肯定是不行的,那我该怎么办! 
现在遇到了两个问题:
1、获取地址的接口没办法直接调用;
2、返回的音频地址经过了加密处理,没办法直接使用。
 
还好,虾米音乐有些场景还是需要直接调的,比如外链播放器、甚至是APP客户端等,所以能够直接获取歌曲信息的接口找到了,可用的有以下两个:
http@//www.xiami.com/widget/xml-single/sid/1770016497
http@//www.xiami.com/widget/json-single/sid/1770016497
 
他们分别返回的格式有xml和json两种,我们选择第一种来看看,(json太简单了,而且试过了,有些歌曲没有数据返回)好了,第一个问题解决了,那么来第二个问题:如何把加密后的结果还原成可以正常访问的音频文件地址!还好,它用了加密算法领域最简单的恺撒加密,只要按照规律就可以轻松破解。
 
用类似于恺撒方阵把链接的第一个数字去掉然后前两行分为21个字符,后六行分为20个字符排列:
h28n557%45E.u3E553513
tF.e%%826E1mtD4EEbf92
t%xt22%F593ph17--5%87
p2i%FF532%93_56%de58e
%Fa253E4_57%k1%556E3f
3mmF6%%%1E83e35E%58f6
A1i115555%7Fy%E-5f7ae
%2.33EEE%54a%5%%Ea79
你会发现从左边开始竖着往下拼起来类似于音乐链接了:
http%3A%2F%2Fm128.xiami.net%2F135%2F56135%2F3%5E78%5E%5E%2F34%5E4652_15%5E9%5E%5E1397874.mp3%3Fauth_key%3D1513%5E476%5E%5E-%5E-%5E-d5%5E3b5e65fa5f%5E87719883fa9327ef6e
把这条链接UrlDecode解码一下得到:
http://m128.xiami.net/135/56135/3^78^^/34^4652_15^9^^1397874.mp3?auth_key=1513^476^^-^-^-d5^3b5e65fa5f^87719883fa9327ef6e
然后把^字符替换成0得到:
http://m128.xiami.net/135/56135/307800/3404652_1509001397874.mp3?auth_key=1513047600-0-0-d503b5e65fa5f087719883fa9327ef6e
 
好了,这个就是我们最终想要的音频文件地址,拿来可以直接用了!
 
bingo,到此为止,解析结束。
 
PHP实现的代码如下:
<?php
/*
虾米音乐音频文件地址解密算法,凯撒数列加密方式。
*/
namespace Org\Util;

class XiaMiMusic
{

public function decode($t) {
$l = substr($t, 0, 1);
$t = substr($t, 1);
$tn = strlen($t);
$ln = floor($tn / $l);
$r = $tn % $l;
$tex = str_split($t);

$text = '';
for ($i = 0;$i <= $ln;$i++) {
for ($j = 0;$j < $l;$j++) {
$n = $j * $ln + $i;
if ($j < $r) $n+= $j;
else $n+= $r;
if (isset($tex[$n])) $text.= $tex[$n];
else break;
}

}

$preg = array('^', '%');
$replace = array(0, '|');
return str_replace($preg, $replace, urldecode(substr($text, 0, $tn)));
}


public function getMusicUrl($id)
{

if($id){

$xml = file_get_contents('http://www.xiami.com/widget/xml-single/uid/0/sid/'.$id);
//匹配location内容
preg_match("/<\!\[CDATA\[([^\]].*)\]\]><\/location>/i",$xml,$location);
//转码得到正确的地址
return (string)$this->decode($location[1]);

}else{
return "";
}

}

}


$a = new xiamiMusic();
echo $a->getMusicUrl(1770016497);





 
好了,来听听这首《爱你A.I.N.Y》吧(实际这首歌曲解析来自QQ音乐平台,下次再分享这个喽,嘿嘿)!http://music.zkbhj.com/?goto=listen&id=646
 

【学习计划】9月学习&生活计划

学习计划zkbhj 发表了文章 • 0 个评论 • 1703 次浏览 • 2017-09-01 10:53 • 来自相关话题

【学习计划】9月需要看完的书:
《极简主义》
《成为技术领导者》
《高性能PHP》
 
9月需要持续推进学习的书:
《Redis设计与实现》第一部分:数据结构域对象
《第一行Android代码》
第1章 开始启程,你的第一行Android代码
第2章 先从看得到的入手,探究活动
《鸟哥的Linux私房菜 (基础学习篇 第三版)》
第0章 计算机概论
第1章 Linux是什么
第2章 Linux如何学习
 
9月份需要学习的知识点:
PHP所有数组函数;
http://www.w3school.com.cn/php/php_ref_array.asp
Yii2框架对数据库的操作;
SQL里的所有函数:
http://www.w3school.com.cn/sql/sql_dates.asp 
什么是redis持久化?
 
【生活计划】
1、看一次话剧
2、至少看两部新电影
3、至少外出游玩一次
4、至少和朋友聚餐2次;
5、坚持每隔一天跑步5公里;
6、开始简单的《囚徒健身》中的训练 查看全部
【学习计划】9月需要看完的书:
《极简主义》
《成为技术领导者》
《高性能PHP》
 
9月需要持续推进学习的书:
《Redis设计与实现》第一部分:数据结构域对象
《第一行Android代码》
第1章 开始启程,你的第一行Android代码
第2章 先从看得到的入手,探究活动
《鸟哥的Linux私房菜 (基础学习篇 第三版)》
第0章 计算机概论
第1章 Linux是什么
第2章 Linux如何学习
 
9月份需要学习的知识点:
PHP所有数组函数;
http://www.w3school.com.cn/php/php_ref_array.asp
Yii2框架对数据库的操作;
SQL里的所有函数:
http://www.w3school.com.cn/sql/sql_dates.asp 
什么是redis持久化?
 
【生活计划】
1、看一次话剧
2、至少看两部新电影
3、至少外出游玩一次
4、至少和朋友聚餐2次;
5、坚持每隔一天跑步5公里;
6、开始简单的《囚徒健身》中的训练

凯冰科技优化List

升级更新zkbhj 发表了文章 • 0 个评论 • 1843 次浏览 • 2017-08-31 09:51 • 来自相关话题

1、在网站底部增加服务器支持说明和技术栈说明;【已完成】
2、开发通用新内容更新提示组件,首先插放在主站首页,当后台有内容更新时(发布博文、新增歌手,歌单和歌曲、发布视频等),可以进行消息推送(使用rabitmq实现),让最新内容直达用户。
3、香蕉音乐台增加歌词滚动,便于听音乐时查看歌词;
4、改版凯冰搜索界面,学习用jquery实现视差全图背景效果,并使用,增强视觉冲击力;
5、集中对凯冰科技MySQL数据库数据表进行优化;
6、凯冰账本增加夫妻理财功能; 查看全部
1、在网站底部增加服务器支持说明和技术栈说明;【已完成】
2、开发通用新内容更新提示组件,首先插放在主站首页,当后台有内容更新时(发布博文、新增歌手,歌单和歌曲、发布视频等),可以进行消息推送(使用rabitmq实现),让最新内容直达用户。
3、香蕉音乐台增加歌词滚动,便于听音乐时查看歌词;
4、改版凯冰搜索界面,学习用jquery实现视差全图背景效果,并使用,增强视觉冲击力;
5、集中对凯冰科技MySQL数据库数据表进行优化;
6、凯冰账本增加夫妻理财功能;

凯冰科技发现的BUG列表

升级更新zkbhj 发表了文章 • 0 个评论 • 3000 次浏览 • 2017-03-20 16:45 • 来自相关话题

1、支付完成后,页面的查看订单详情按钮链接有误;
2、订单详情页面的商品链接错误;
3、个人中心搜索框按钮搜索商品链接有误;
1、支付完成后,页面的查看订单详情按钮链接有误;
2、订单详情页面的商品链接错误;
3、个人中心搜索框按钮搜索商品链接有误;

凯冰科技旧系统迁移梳理

升级更新zkbhj 发表了文章 • 0 个评论 • 2232 次浏览 • 2017-02-22 14:13 • 来自相关话题

1、辽宁大学考试专题1
http://www.zkbhj.com/lnutest/
http://www.zkbhj.com/lnutest2/

2、文章详情页
http://www.zkbhj.com/articles/?id=2875
http://www.zkbhj.com/show/news.asp?id=2114

3、网址导航
http://www.zkbhj.com/123/

4、网站更新大事记
http://www.zkbhj.com/2012/
http://www.zkbhj.com/2013/

5、活动专题
2014国庆节
http://www.zkbhj.com/2014101/

6、凯冰相册
http://www.zkbhj.com/Album/list.php
http://www.zkbhj.com/Album/?id=26

7、板块
http://www.zkbhj.com/art/
http://www.zkbhj.com/tec/
http://www.zkbhj.com/news/
http://www.zkbhj.com/music/
http://www.zkbhj.com/soft/
http://www.zkbhj.com/project/
http://www.zkbhj.com/fumu/index.html
http://www.zkbhj.com/message/
http://www.zkbhj.com/zkbhj/
http://www.zkbhj.com/zkbhj/growth.php
http://www.zkbhj.com/me/
http://www.zkbhj.com/resume/

8、专栏作家平台
http://www.zkbhj.com/autherAdmin/login.php

9、辽宁大学网上同学录
http://www.zkbhj.com/CShome/login.php

10、凯冰资源库
http://www.zkbhj.com/bank/

11、工具
http://www.zkbhj.com/kits/rgb.html
http://www.zkbhj.com/kits/creat_ercode.php
http://www.zkbhj.com/kits/share_weixin.php
http://www.zkbhj.com/subway/


12、后台管理
http://www.zkbhj.com/kbweb_newadmin/login/

13、M站
http://www.zkbhj.com/wap/
m.zkbhj.com

14、 查看全部

凯冰科技规划版图

想法优化zkbhj 发表了文章 • 0 个评论 • 1888 次浏览 • 2016-09-08 10:17 • 来自相关话题

1、www、home:网站综合入口首页
2、code.zkbhj.com:凯冰开发者博客
3、blog.zkbhj.com:个人博客
4、kit.zkbhj.com:凯冰工具箱
5、api.zkbhj.com:接口中心
6、account.zkbhj.com:凯冰账户中心
7、i.zkbhj.com:个人中心
8、tv.zkbhj.com:凯冰直播
9、book.zkbhj.com:凯冰账本(HTTPS)
10、ask.zkbhj.com:凯冰科技知识中心
11、about.zkbhj.com:关于凯冰科技
12、zk.zkbhj.com:关于站长
13、music.zkbhj.com:凯冰音乐
14、fumu.zkbhj.com:父母网址导航
15、cms.zkbhj.com:凯冰科技CMS后台管理中心
16、mall.zkbhj.com:凯冰商城
17、pay.zkbhj.com:凯冰科技支付中心
18、cdn2.zkbhj.com:凯冰科技静态资源库(北京服务器1)
19、cdn3.zkbhj.com:凯冰科技静态资源库(北京服务器2)
20、m.zkbhj.com:凯冰开发者博客移动站
21、study.zkbhj.com:凯冰学习
22、map.zkbhj.com:凯冰科技网站地图
23、git.zkbhj.com:凯冰科技代码资源库
24、todo.zkbhj.com:事件备忘录 查看全部
1、www、home:网站综合入口首页
2、code.zkbhj.com:凯冰开发者博客
3、blog.zkbhj.com:个人博客
4、kit.zkbhj.com:凯冰工具箱
5、api.zkbhj.com:接口中心
6、account.zkbhj.com:凯冰账户中心
7、i.zkbhj.com:个人中心
8、tv.zkbhj.com:凯冰直播
9、book.zkbhj.com:凯冰账本(HTTPS)
10、ask.zkbhj.com:凯冰科技知识中心
11、about.zkbhj.com:关于凯冰科技
12、zk.zkbhj.com:关于站长
13、music.zkbhj.com:凯冰音乐
14、fumu.zkbhj.com:父母网址导航
15、cms.zkbhj.com:凯冰科技CMS后台管理中心
16、mall.zkbhj.com:凯冰商城
17、pay.zkbhj.com:凯冰科技支付中心
18、cdn2.zkbhj.com:凯冰科技静态资源库(北京服务器1)
19、cdn3.zkbhj.com:凯冰科技静态资源库(北京服务器2)
20、m.zkbhj.com:凯冰开发者博客移动站
21、study.zkbhj.com:凯冰学习
22、map.zkbhj.com:凯冰科技网站地图
23、git.zkbhj.com:凯冰科技代码资源库
24、todo.zkbhj.com:事件备忘录

凯冰科技未来要做的事

想法优化zkbhj 发表了文章 • 0 个评论 • 2029 次浏览 • 2016-08-17 15:21 • 来自相关话题

1、建立“凯冰科技前端规范”站点;
2、新建“关于凯冰科技”站点;
3、登录cookie内容采用aes加密;
4、凯冰商城;
5、个人空间;
6、CMS系统持续优化;
7、凯冰账本改版;
 
 
8、建立开发者博客,分为两大方向前端和后端。邀请技术爱好者分享自己的学习经验和工作经验等。
9、凯冰音乐增加音乐心情功能,自动匹配适合的音乐播放。 查看全部
1、建立“凯冰科技前端规范”站点;
2、新建“关于凯冰科技”站点;
3、登录cookie内容采用aes加密;
4、凯冰商城;
5、个人空间;
6、CMS系统持续优化;
7、凯冰账本改版;
 
 
8、建立开发者博客,分为两大方向前端和后端。邀请技术爱好者分享自己的学习经验和工作经验等。
9、凯冰音乐增加音乐心情功能,自动匹配适合的音乐播放。

凯冰科技开源分享:凯冰音乐音乐平台歌曲解析之虾米音乐

PHPzkbhj 发表了文章 • 0 个评论 • 1891 次浏览 • 2017-12-05 11:13 • 来自相关话题

凯冰音乐(music.zkbhj.com)是凯冰科技旗下一个音乐类型的APP,主要解决了目前音乐市场歌曲版权分散,无法集中欣赏自己喜欢的音乐的问题而开发的。截止目前,已经可以对酷狗音乐、酷我音乐、虾米音乐、QQ音乐、网易云音乐和咪咕音乐六大主流音乐平台的歌曲解析。今天把这几个当中比较有意思的一个“破解解析”之路分享给大家,那就是虾米音乐。(记不记得前几天网上比较火的那个“穷逼VIP”,哈哈哈,就是出自阿里虾米音乐程序员之手!)。





言归正传,步入正题!
首先,破解虾米音乐的歌曲地址需要了解以下一些概念:
1、动态歌曲地址(所有音乐平台的歌曲地址都不是固定不变的,每一次请求的url都是经过计算甚至加密的);
2、恺撒加密,这个是虾米音乐使用的一种加密混淆方式,这也是我把他拿出来给大家分享的原因,比较有意思,破解难度稍高!

在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报,下面这张图加密方法就是错三个位来实现加密功能。
 







好了,开始整个破解过程!
 
首先,按照套路,我们需要观察虾米音乐的PC端播放器,在播放歌曲的时候,音乐文件的url是怎么获取到的。这个很简单,一个F12即可!





 
先来搜一首我的邓紫棋的一首歌曲,点击进入详情页,嗯,这个时候你会发现url中有一个数字,这个很重要,是这首歌曲的id,下面是要用得到的。
 
点击播放,进入PC版播放器界面,熟悉的音乐传来,按下F12,过滤掉其他无用的请求信息,只留下XHR类型的请求,你会发现第一个就是你想要的。没错,就是他!





 
来看一下请求地址:Request URL:http://www.xiami.com/song/play ... np670
Request Method:GET熟悉不?是个jsonp请求。里面用到了刚刚提到的那个id。当然,这个url地址你是无法直接请求的,因为做了refer来源的判断,只有*.xiami.com的来源请求才会被应答,否则是404。
 
ok,再看下返回结果。{
"status":true,
"message":null,
"data":{
"trackList":[
{
"songId":"1770016497",
"songName":"A.I.N.Y. (爱你)",
"subName":"",
"newSubName":"",
"translation":"",
"albumId":424082,
"artistId":55712,
"singers":"G.E.M.邓紫棋",
"mvId":489278,
"cdSerial":1,
"track":9,
"pinyin":"A.I.N.Y. (ai ni )",
"bakSongId":0,
"panFlag":0,
"musicType":"NORMAL",
"bakSong":null,
"lyricInfo":{
"lyricId":10064461,
"lyricType":3,
"lyricFile":"http://img.xiami.net/lyric/97/ ... ot%3B,
"isOfficial":true
},
"songwriters":"",
"composer":"",
"arrangement":"",
"boughtCount":0,
"pace":140,
"albumLanguage":"国语",
"playCount":2875407,
"offline":false,
"downloadCount":false,
"originOffline":false,
"exclusive":false,
"bizTags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"recommendCount":811,
"collectCount":7657,
"songStringId":"xLsLMvc02a4",
"albumStringId":"kkCgaa42a",
"artistStringId":"be6yda0f8",
"singerIds":[
55712
],
"demoCreateTime":1340847262000,
"tags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"offLyric":false,
"artist":"G.E.M.邓紫棋",
"songOpt":"NORMAL",
"purviews":{
"LISTEN":{
"LOW":"FREE",
"HIGH":"FREE"
},
"DOWNLOAD":{
"LOW":"FREE",
"HIGH":"FREE"
}
},
"publishStatus":"PUBLISH",
"demo":false,
"s":2875407,
"song_id":"1770016497",
"album_id":424082,
"name":"A.I.N.Y. (爱你)",
"title":"A.I.N.Y. 爱你",
"album_name":"A.I.N.Y. 爱你",
"sub_title":"",
"new_sub_title":"",
"song_sub_title":"",
"artist_name":"G.E.M.邓紫棋",
"artist_id":55712,
"cd_serial":1,
"singersSource":[
{
"artistId":55712,
"artistStringId":"be6yda0f8",
"artistName":"G.E.M.邓紫棋",
"artistLogo":"images/artistlogo/23/14578645251123_1.jpg",
"albumCount":28,
"area":"Hongkong 香港",
"alias":"邓紫棋 / 邓诗颖",
"pinyin":"G.E.M.deng zi qi ",
"isMusician":false,
"isShow":false,
"description":""
}
],
"length":224,
"recommends":811,
"collects":7657,
"key_words":null,
"music_type":0,
"play_volume":89,
"flag":null,
"album_logo":"images/album/img12/55712/4240821466497268_1.jpg",
"needpay":0,
"mvUrl":"K6YhbP",
"playstatus":1,
"downloadstatus":1,
"downloadjson":"%7B%22LOW%22%3A%22FREE%22%2C%22HIGH%22%3A%22FREE%22%7D",
"can_show":1,
"can_check":1,
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
"lyric":"http://img.xiami.net/lyric/97/ ... ot%3B,
"lyric_url":"http://img.xiami.net/lyric/97/ ... ot%3B,
"object_id":"1770016497",
"object_name":"default",
"insert_type":1,
"background":"http://img.xiami.net/res/playe ... ot%3B,
"aritst_type":"",
"artist_url":"http://www.xiami.com/artist/55712",
"grade":-1,
"tryhq":0,
"pic":"http://img.xiami.net/images/al ... ot%3B,
"album_pic":"http://img.xiami.net/images/al ... ot%3B,
"rec_note":""
}
],
"lastSongId":0,
"type":"default",
"type_id":1,
"clearlist":null,
"vip":0,
"vip_role":0,
"hqset":0
},
"jumpurl":null
}








 
失望!接口并没有直接返回音频文件的地址,而是返回了一个下面这样的东东:"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",没错,它是这首歌曲这次请求返回对的音频文件地址,拿来用肯定是不行的,那我该怎么办! 
现在遇到了两个问题:
1、获取地址的接口没办法直接调用;
2、返回的音频地址经过了加密处理,没办法直接使用。
 
还好,虾米音乐有些场景还是需要直接调的,比如外链播放器、甚至是APP客户端等,所以能够直接获取歌曲信息的接口找到了,可用的有以下两个:http@//www.xiami.com/widget/xml-single/sid/1770016497
http@//www.xiami.com/widget/json-single/sid/1770016497 
他们分别返回的格式有xml和json两种,我们选择第一种来看看,(json太简单了,而且试过了,有些歌曲没有数据返回)好了,第一个问题解决了,那么来第二个问题:如何把加密后的结果还原成可以正常访问的音频文件地址!还好,它用了加密算法领域最简单的恺撒加密,只要按照规律就可以轻松破解。
 
用类似于恺撒方阵把链接的第一个数字去掉然后前两行分为21个字符,后六行分为20个字符排列:h28n557%45E.u3E553513
tF.e%%826E1mtD4EEbf92
t%xt22%F593ph17--5%87
p2i%FF532%93_56%de58e
%Fa253E4_57%k1%556E3f
3mmF6%%%1E83e35E%58f6
A1i115555%7Fy%E-5f7ae
%2.33EEE%54a%5%%Ea79你会发现从左边开始竖着往下拼起来类似于音乐链接了:http%3A%2F%2Fm128.xiami.net%2F135%2F56135%2F3%5E78%5E%5E%2F34%5E4652_15%5E9%5E%5E1397874.mp3%3Fauth_key%3D1513%5E476%5E%5E-%5E-%5E-d5%5E3b5e65fa5f%5E87719883fa9327ef6e把这条链接UrlDecode解码一下得到:http://m128.xiami.net/135/56135/3^78^^/34^4652_15^9^^1397874.mp3?auth_key=1513^476^^-^-^-d5^3b5e65fa5f^87719883fa9327ef6e然后把^字符替换成0得到:http://m128.xiami.net/135/56135/307800/3404652_1509001397874.mp3?auth_key=1513047600-0-0-d503b5e65fa5f087719883fa9327ef6e 
好了,这个就是我们最终想要的音频文件地址,拿来可以直接用了!
 
bingo,到此为止,解析结束。
 
PHP实现的代码如下:<?php
/*
虾米音乐音频文件地址解密算法,凯撒数列加密方式。
*/
namespace Org\Util;

class XiaMiMusic
{

public function decode($t) {
$l = substr($t, 0, 1);
$t = substr($t, 1);
$tn = strlen($t);
$ln = floor($tn / $l);
$r = $tn % $l;
$tex = str_split($t);

$text = '';
for ($i = 0;$i <= $ln;$i++) {
for ($j = 0;$j < $l;$j++) {
$n = $j * $ln + $i;
if ($j < $r) $n+= $j;
else $n+= $r;
if (isset($tex[$n])) $text.= $tex[$n];
else break;
}

}

$preg = array('^', '%');
$replace = array(0, '|');
return str_replace($preg, $replace, urldecode(substr($text, 0, $tn)));
}


public function getMusicUrl($id)
{

if($id){

$xml = file_get_contents('http://www.xiami.com/widget/xml-single/uid/0/sid/'.$id);
//匹配location内容
preg_match("/<\!\[CDATA\[([^\]].*)\]\]><\/location>/i",$xml,$location);
//转码得到正确的地址
return (string)$this->decode($location[1]);

}else{
return "";
}

}

}


$a = new xiamiMusic();
echo $a->getMusicUrl(1770016497);





 
好了,来听听这首《爱你A.I.N.Y》吧(实际这首歌曲解析来自QQ音乐平台,下次再分享这个喽,嘿嘿)!http://music.zkbhj.com/?goto=listen&id=646
  查看全部
凯冰音乐(music.zkbhj.com)是凯冰科技旗下一个音乐类型的APP,主要解决了目前音乐市场歌曲版权分散,无法集中欣赏自己喜欢的音乐的问题而开发的。截止目前,已经可以对酷狗音乐、酷我音乐、虾米音乐、QQ音乐、网易云音乐和咪咕音乐六大主流音乐平台的歌曲解析。今天把这几个当中比较有意思的一个“破解解析”之路分享给大家,那就是虾米音乐。(记不记得前几天网上比较火的那个“穷逼VIP”,哈哈哈,就是出自阿里虾米音乐程序员之手!)。

timg_(1).jpg

言归正传,步入正题!
首先,破解虾米音乐的歌曲地址需要了解以下一些概念:
1、动态歌曲地址(所有音乐平台的歌曲地址都不是固定不变的,每一次请求的url都是经过计算甚至加密的);
2、恺撒加密,这个是虾米音乐使用的一种加密混淆方式,这也是我把他拿出来给大家分享的原因,比较有意思,破解难度稍高!


在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报,下面这张图加密方法就是错三个位来实现加密功能。
 



1026866-20161028113544203-1413480347.png


好了,开始整个破解过程!
 
首先,按照套路,我们需要观察虾米音乐的PC端播放器,在播放歌曲的时候,音乐文件的url是怎么获取到的。这个很简单,一个F12即可!

QQ截图20171205120809.jpg

 
先来搜一首我的邓紫棋的一首歌曲,点击进入详情页,嗯,这个时候你会发现url中有一个数字,这个很重要,是这首歌曲的id,下面是要用得到的。
 
点击播放,进入PC版播放器界面,熟悉的音乐传来,按下F12,过滤掉其他无用的请求信息,只留下XHR类型的请求,你会发现第一个就是你想要的。没错,就是他!

QQ截图20171205121000.jpg

 
来看一下请求地址:
Request URL:http://www.xiami.com/song/play ... np670
Request Method:GET
熟悉不?是个jsonp请求。里面用到了刚刚提到的那个id。当然,这个url地址你是无法直接请求的,因为做了refer来源的判断,只有*.xiami.com的来源请求才会被应答,否则是404。
 
ok,再看下返回结果。
{
"status":true,
"message":null,
"data":{
"trackList":[
{
"songId":"1770016497",
"songName":"A.I.N.Y. (爱你)",
"subName":"",
"newSubName":"",
"translation":"",
"albumId":424082,
"artistId":55712,
"singers":"G.E.M.邓紫棋",
"mvId":489278,
"cdSerial":1,
"track":9,
"pinyin":"A.I.N.Y. (ai ni )",
"bakSongId":0,
"panFlag":0,
"musicType":"NORMAL",
"bakSong":null,
"lyricInfo":{
"lyricId":10064461,
"lyricType":3,
"lyricFile":"http://img.xiami.net/lyric/97/ ... ot%3B,
"isOfficial":true
},
"songwriters":"",
"composer":"",
"arrangement":"",
"boughtCount":0,
"pace":140,
"albumLanguage":"国语",
"playCount":2875407,
"offline":false,
"downloadCount":false,
"originOffline":false,
"exclusive":false,
"bizTags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"recommendCount":811,
"collectCount":7657,
"songStringId":"xLsLMvc02a4",
"albumStringId":"kkCgaa42a",
"artistStringId":"be6yda0f8",
"singerIds":[
55712
],
"demoCreateTime":1340847262000,
"tags":[
"RI_A5YY",
"X_FREE",
"XN_BJ9QM"
],
"offLyric":false,
"artist":"G.E.M.邓紫棋",
"songOpt":"NORMAL",
"purviews":{
"LISTEN":{
"LOW":"FREE",
"HIGH":"FREE"
},
"DOWNLOAD":{
"LOW":"FREE",
"HIGH":"FREE"
}
},
"publishStatus":"PUBLISH",
"demo":false,
"s":2875407,
"song_id":"1770016497",
"album_id":424082,
"name":"A.I.N.Y. (爱你)",
"title":"A.I.N.Y. 爱你",
"album_name":"A.I.N.Y. 爱你",
"sub_title":"",
"new_sub_title":"",
"song_sub_title":"",
"artist_name":"G.E.M.邓紫棋",
"artist_id":55712,
"cd_serial":1,
"singersSource":[
{
"artistId":55712,
"artistStringId":"be6yda0f8",
"artistName":"G.E.M.邓紫棋",
"artistLogo":"images/artistlogo/23/14578645251123_1.jpg",
"albumCount":28,
"area":"Hongkong 香港",
"alias":"邓紫棋 / 邓诗颖",
"pinyin":"G.E.M.deng zi qi ",
"isMusician":false,
"isShow":false,
"description":""
}
],
"length":224,
"recommends":811,
"collects":7657,
"key_words":null,
"music_type":0,
"play_volume":89,
"flag":null,
"album_logo":"images/album/img12/55712/4240821466497268_1.jpg",
"needpay":0,
"mvUrl":"K6YhbP",
"playstatus":1,
"downloadstatus":1,
"downloadjson":"%7B%22LOW%22%3A%22FREE%22%2C%22HIGH%22%3A%22FREE%22%7D",
"can_show":1,
"can_check":1,
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
"lyric":"http://img.xiami.net/lyric/97/ ... ot%3B,
"lyric_url":"http://img.xiami.net/lyric/97/ ... ot%3B,
"object_id":"1770016497",
"object_name":"default",
"insert_type":1,
"background":"http://img.xiami.net/res/playe ... ot%3B,
"aritst_type":"",
"artist_url":"http://www.xiami.com/artist/55712",
"grade":-1,
"tryhq":0,
"pic":"http://img.xiami.net/images/al ... ot%3B,
"album_pic":"http://img.xiami.net/images/al ... ot%3B,
"rec_note":""
}
],
"lastSongId":0,
"type":"default",
"type_id":1,
"clearlist":null,
"vip":0,
"vip_role":0,
"hqset":0
},
"jumpurl":null
}








 
失望!接口并没有直接返回音频文件的地址,而是返回了一个下面这样的东东:
"location":"8h28n557%45E.u3E553513tF.e%%826E1mtD4EEbf92t%xt22%F593ph17--5%87p2i%FF532%93_56%de58e%Fa253E4_57%k1%556E3f3mmF6%%%1E83e35E%58f6A1i115555%7Fy%E-5f7ae%2.33EEE%54a%5%%Ea79",
没错,它是这首歌曲这次请求返回对的音频文件地址,拿来用肯定是不行的,那我该怎么办! 
现在遇到了两个问题:
1、获取地址的接口没办法直接调用;
2、返回的音频地址经过了加密处理,没办法直接使用。
 
还好,虾米音乐有些场景还是需要直接调的,比如外链播放器、甚至是APP客户端等,所以能够直接获取歌曲信息的接口找到了,可用的有以下两个:
http@//www.xiami.com/widget/xml-single/sid/1770016497
http@//www.xiami.com/widget/json-single/sid/1770016497
 
他们分别返回的格式有xml和json两种,我们选择第一种来看看,(json太简单了,而且试过了,有些歌曲没有数据返回)好了,第一个问题解决了,那么来第二个问题:如何把加密后的结果还原成可以正常访问的音频文件地址!还好,它用了加密算法领域最简单的恺撒加密,只要按照规律就可以轻松破解。
 
用类似于恺撒方阵把链接的第一个数字去掉然后前两行分为21个字符,后六行分为20个字符排列:
h28n557%45E.u3E553513
tF.e%%826E1mtD4EEbf92
t%xt22%F593ph17--5%87
p2i%FF532%93_56%de58e
%Fa253E4_57%k1%556E3f
3mmF6%%%1E83e35E%58f6
A1i115555%7Fy%E-5f7ae
%2.33EEE%54a%5%%Ea79
你会发现从左边开始竖着往下拼起来类似于音乐链接了:
http%3A%2F%2Fm128.xiami.net%2F135%2F56135%2F3%5E78%5E%5E%2F34%5E4652_15%5E9%5E%5E1397874.mp3%3Fauth_key%3D1513%5E476%5E%5E-%5E-%5E-d5%5E3b5e65fa5f%5E87719883fa9327ef6e
把这条链接UrlDecode解码一下得到:
http://m128.xiami.net/135/56135/3^78^^/34^4652_15^9^^1397874.mp3?auth_key=1513^476^^-^-^-d5^3b5e65fa5f^87719883fa9327ef6e
然后把^字符替换成0得到:
http://m128.xiami.net/135/56135/307800/3404652_1509001397874.mp3?auth_key=1513047600-0-0-d503b5e65fa5f087719883fa9327ef6e
 
好了,这个就是我们最终想要的音频文件地址,拿来可以直接用了!
 
bingo,到此为止,解析结束。
 
PHP实现的代码如下:
<?php
/*
虾米音乐音频文件地址解密算法,凯撒数列加密方式。
*/
namespace Org\Util;

class XiaMiMusic
{

public function decode($t) {
$l = substr($t, 0, 1);
$t = substr($t, 1);
$tn = strlen($t);
$ln = floor($tn / $l);
$r = $tn % $l;
$tex = str_split($t);

$text = '';
for ($i = 0;$i <= $ln;$i++) {
for ($j = 0;$j < $l;$j++) {
$n = $j * $ln + $i;
if ($j < $r) $n+= $j;
else $n+= $r;
if (isset($tex[$n])) $text.= $tex[$n];
else break;
}

}

$preg = array('^', '%');
$replace = array(0, '|');
return str_replace($preg, $replace, urldecode(substr($text, 0, $tn)));
}


public function getMusicUrl($id)
{

if($id){

$xml = file_get_contents('http://www.xiami.com/widget/xml-single/uid/0/sid/'.$id);
//匹配location内容
preg_match("/<\!\[CDATA\[([^\]].*)\]\]><\/location>/i",$xml,$location);
//转码得到正确的地址
return (string)$this->decode($location[1]);

}else{
return "";
}

}

}


$a = new xiamiMusic();
echo $a->getMusicUrl(1770016497);





 
好了,来听听这首《爱你A.I.N.Y》吧(实际这首歌曲解析来自QQ音乐平台,下次再分享这个喽,嘿嘿)!http://music.zkbhj.com/?goto=listen&id=646
 

【学习计划】9月学习&生活计划

学习计划zkbhj 发表了文章 • 0 个评论 • 1703 次浏览 • 2017-09-01 10:53 • 来自相关话题

【学习计划】9月需要看完的书:
《极简主义》
《成为技术领导者》
《高性能PHP》
 
9月需要持续推进学习的书:
《Redis设计与实现》第一部分:数据结构域对象
《第一行Android代码》
第1章 开始启程,你的第一行Android代码
第2章 先从看得到的入手,探究活动
《鸟哥的Linux私房菜 (基础学习篇 第三版)》
第0章 计算机概论
第1章 Linux是什么
第2章 Linux如何学习
 
9月份需要学习的知识点:
PHP所有数组函数;
http://www.w3school.com.cn/php/php_ref_array.asp
Yii2框架对数据库的操作;
SQL里的所有函数:
http://www.w3school.com.cn/sql/sql_dates.asp 
什么是redis持久化?
 
【生活计划】
1、看一次话剧
2、至少看两部新电影
3、至少外出游玩一次
4、至少和朋友聚餐2次;
5、坚持每隔一天跑步5公里;
6、开始简单的《囚徒健身》中的训练 查看全部
【学习计划】9月需要看完的书:
《极简主义》
《成为技术领导者》
《高性能PHP》
 
9月需要持续推进学习的书:
《Redis设计与实现》第一部分:数据结构域对象
《第一行Android代码》
第1章 开始启程,你的第一行Android代码
第2章 先从看得到的入手,探究活动
《鸟哥的Linux私房菜 (基础学习篇 第三版)》
第0章 计算机概论
第1章 Linux是什么
第2章 Linux如何学习
 
9月份需要学习的知识点:
PHP所有数组函数;
http://www.w3school.com.cn/php/php_ref_array.asp
Yii2框架对数据库的操作;
SQL里的所有函数:
http://www.w3school.com.cn/sql/sql_dates.asp 
什么是redis持久化?
 
【生活计划】
1、看一次话剧
2、至少看两部新电影
3、至少外出游玩一次
4、至少和朋友聚餐2次;
5、坚持每隔一天跑步5公里;
6、开始简单的《囚徒健身》中的训练

凯冰科技优化List

升级更新zkbhj 发表了文章 • 0 个评论 • 1843 次浏览 • 2017-08-31 09:51 • 来自相关话题

1、在网站底部增加服务器支持说明和技术栈说明;【已完成】
2、开发通用新内容更新提示组件,首先插放在主站首页,当后台有内容更新时(发布博文、新增歌手,歌单和歌曲、发布视频等),可以进行消息推送(使用rabitmq实现),让最新内容直达用户。
3、香蕉音乐台增加歌词滚动,便于听音乐时查看歌词;
4、改版凯冰搜索界面,学习用jquery实现视差全图背景效果,并使用,增强视觉冲击力;
5、集中对凯冰科技MySQL数据库数据表进行优化;
6、凯冰账本增加夫妻理财功能; 查看全部
1、在网站底部增加服务器支持说明和技术栈说明;【已完成】
2、开发通用新内容更新提示组件,首先插放在主站首页,当后台有内容更新时(发布博文、新增歌手,歌单和歌曲、发布视频等),可以进行消息推送(使用rabitmq实现),让最新内容直达用户。
3、香蕉音乐台增加歌词滚动,便于听音乐时查看歌词;
4、改版凯冰搜索界面,学习用jquery实现视差全图背景效果,并使用,增强视觉冲击力;
5、集中对凯冰科技MySQL数据库数据表进行优化;
6、凯冰账本增加夫妻理财功能;

凯冰科技发现的BUG列表

升级更新zkbhj 发表了文章 • 0 个评论 • 3000 次浏览 • 2017-03-20 16:45 • 来自相关话题

1、支付完成后,页面的查看订单详情按钮链接有误;
2、订单详情页面的商品链接错误;
3、个人中心搜索框按钮搜索商品链接有误;
1、支付完成后,页面的查看订单详情按钮链接有误;
2、订单详情页面的商品链接错误;
3、个人中心搜索框按钮搜索商品链接有误;

凯冰科技旧系统迁移梳理

升级更新zkbhj 发表了文章 • 0 个评论 • 2232 次浏览 • 2017-02-22 14:13 • 来自相关话题

1、辽宁大学考试专题1
http://www.zkbhj.com/lnutest/
http://www.zkbhj.com/lnutest2/

2、文章详情页
http://www.zkbhj.com/articles/?id=2875
http://www.zkbhj.com/show/news.asp?id=2114

3、网址导航
http://www.zkbhj.com/123/

4、网站更新大事记
http://www.zkbhj.com/2012/
http://www.zkbhj.com/2013/

5、活动专题
2014国庆节
http://www.zkbhj.com/2014101/

6、凯冰相册
http://www.zkbhj.com/Album/list.php
http://www.zkbhj.com/Album/?id=26

7、板块
http://www.zkbhj.com/art/
http://www.zkbhj.com/tec/
http://www.zkbhj.com/news/
http://www.zkbhj.com/music/
http://www.zkbhj.com/soft/
http://www.zkbhj.com/project/
http://www.zkbhj.com/fumu/index.html
http://www.zkbhj.com/message/
http://www.zkbhj.com/zkbhj/
http://www.zkbhj.com/zkbhj/growth.php
http://www.zkbhj.com/me/
http://www.zkbhj.com/resume/

8、专栏作家平台
http://www.zkbhj.com/autherAdmin/login.php

9、辽宁大学网上同学录
http://www.zkbhj.com/CShome/login.php

10、凯冰资源库
http://www.zkbhj.com/bank/

11、工具
http://www.zkbhj.com/kits/rgb.html
http://www.zkbhj.com/kits/creat_ercode.php
http://www.zkbhj.com/kits/share_weixin.php
http://www.zkbhj.com/subway/


12、后台管理
http://www.zkbhj.com/kbweb_newadmin/login/

13、M站
http://www.zkbhj.com/wap/
m.zkbhj.com

14、 查看全部

凯冰科技规划版图

想法优化zkbhj 发表了文章 • 0 个评论 • 1888 次浏览 • 2016-09-08 10:17 • 来自相关话题

1、www、home:网站综合入口首页
2、code.zkbhj.com:凯冰开发者博客
3、blog.zkbhj.com:个人博客
4、kit.zkbhj.com:凯冰工具箱
5、api.zkbhj.com:接口中心
6、account.zkbhj.com:凯冰账户中心
7、i.zkbhj.com:个人中心
8、tv.zkbhj.com:凯冰直播
9、book.zkbhj.com:凯冰账本(HTTPS)
10、ask.zkbhj.com:凯冰科技知识中心
11、about.zkbhj.com:关于凯冰科技
12、zk.zkbhj.com:关于站长
13、music.zkbhj.com:凯冰音乐
14、fumu.zkbhj.com:父母网址导航
15、cms.zkbhj.com:凯冰科技CMS后台管理中心
16、mall.zkbhj.com:凯冰商城
17、pay.zkbhj.com:凯冰科技支付中心
18、cdn2.zkbhj.com:凯冰科技静态资源库(北京服务器1)
19、cdn3.zkbhj.com:凯冰科技静态资源库(北京服务器2)
20、m.zkbhj.com:凯冰开发者博客移动站
21、study.zkbhj.com:凯冰学习
22、map.zkbhj.com:凯冰科技网站地图
23、git.zkbhj.com:凯冰科技代码资源库
24、todo.zkbhj.com:事件备忘录 查看全部
1、www、home:网站综合入口首页
2、code.zkbhj.com:凯冰开发者博客
3、blog.zkbhj.com:个人博客
4、kit.zkbhj.com:凯冰工具箱
5、api.zkbhj.com:接口中心
6、account.zkbhj.com:凯冰账户中心
7、i.zkbhj.com:个人中心
8、tv.zkbhj.com:凯冰直播
9、book.zkbhj.com:凯冰账本(HTTPS)
10、ask.zkbhj.com:凯冰科技知识中心
11、about.zkbhj.com:关于凯冰科技
12、zk.zkbhj.com:关于站长
13、music.zkbhj.com:凯冰音乐
14、fumu.zkbhj.com:父母网址导航
15、cms.zkbhj.com:凯冰科技CMS后台管理中心
16、mall.zkbhj.com:凯冰商城
17、pay.zkbhj.com:凯冰科技支付中心
18、cdn2.zkbhj.com:凯冰科技静态资源库(北京服务器1)
19、cdn3.zkbhj.com:凯冰科技静态资源库(北京服务器2)
20、m.zkbhj.com:凯冰开发者博客移动站
21、study.zkbhj.com:凯冰学习
22、map.zkbhj.com:凯冰科技网站地图
23、git.zkbhj.com:凯冰科技代码资源库
24、todo.zkbhj.com:事件备忘录

凯冰科技未来要做的事

想法优化zkbhj 发表了文章 • 0 个评论 • 2029 次浏览 • 2016-08-17 15:21 • 来自相关话题

1、建立“凯冰科技前端规范”站点;
2、新建“关于凯冰科技”站点;
3、登录cookie内容采用aes加密;
4、凯冰商城;
5、个人空间;
6、CMS系统持续优化;
7、凯冰账本改版;
 
 
8、建立开发者博客,分为两大方向前端和后端。邀请技术爱好者分享自己的学习经验和工作经验等。
9、凯冰音乐增加音乐心情功能,自动匹配适合的音乐播放。 查看全部
1、建立“凯冰科技前端规范”站点;
2、新建“关于凯冰科技”站点;
3、登录cookie内容采用aes加密;
4、凯冰商城;
5、个人空间;
6、CMS系统持续优化;
7、凯冰账本改版;
 
 
8、建立开发者博客,分为两大方向前端和后端。邀请技术爱好者分享自己的学习经验和工作经验等。
9、凯冰音乐增加音乐心情功能,自动匹配适合的音乐播放。