php解析酷狗音乐,PHP_将酷狗krc歌词解析并转换为lrc歌词php源码,最近在进行一次对酷狗音乐歌 - phpStudy...

将酷狗krc歌词解析并转换为lrc歌词php源码

最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是“乱码”,自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐也没仔细看他的歌词有什么不同,只是与天天静听等不同的是可以逐字高亮显示歌词。

对酷狗的flash播放器进行反编译,发现这段krc解密的ActionScript代码:

public function loaderCompleteHandler(param1:ByteArray) : void{

this.newkeyBytes = [64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105];

var result:* = param1;

var krcBytes:* = new ByteArray();

result.position = 4;

result.readBytes(krcBytes);

var l:* = krcBytes.length;

var i:int;

while (i < l) {

krcBytes[i] = krcBytes[i] ^ this.newkeyBytes[i % this.newkeyBytes.length];

i = (i + 1);

}

try {

krcBytes.uncompress();

} catch (error:SecurityError) {

errorfun("uncompressError");

return;

}

krcBytes.position = 0;

this.myLyric.dataStr = krcBytes.readUTFBytes(krcBytes.length);

this.successfun();

return;

}

根据这段代码可以很快转换成php解析代码:

$enKey = array(64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105);

$krc_content = substr($krc_content,4);

$len = strlen($krc_content);

$krc_compress = '';

for ($k = 0; $k < $len; $k++){

$krc_compress .= chr(ord($krc_content[$k]) ^ $enKey[$k % 16]);

}

$krc_text = gzuncompress($krc_compress);

上面的$krc_content为krc歌词压缩加密的文本内容,得到了解析后的krc明文文本歌词$krc_text,然后就可以很容易的转换成lrc歌词了,如下:

function krc2lrc($krc_content,$glue = "n"){

$enKey = array(64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105);

$krc_content = substr($krc_content,4);

$len = strlen($krc_content);

$krc_compress = '';

for ($k = 0; $k < $len; $k++){

$krc_compress .= chr(ord($krc_content[$k]) ^ $enKey[$k % 16]);

}

$krc_text = gzuncompress($krc_compress);

preg_match_all("/[(ar|ti|offset):(.+)]/",$krc_text,$matches);

$lrc_text = implode($glue,$matches[0]).$glue;

preg_match_all("/[(d{0,8}),(d{0,8})](.+)/",$krc_text,$matches);

unset($krc_text,$krc_compress,$krc_content,$enKey);

if(!empty($matches[1])){

foreach($matches[1] as $k=>$v){

list($seconds, $millis) = explode('.', $v / 1000);

$lrc_time = date('i:s',1388534400 + $seconds).'.'.substr($millis,0,2);

$lrc_cont = preg_replace("//",'',$matches[3][$k]);

$lrc_text .= "[{$lrc_time}]{$lrc_cont}{$glue}";

}

}

return $lrc_text;

}

简单示例如下:

$content = file_get_contents('1.krc');

echo krc2lrc($content,'
');相关阅读:

解决ASP.NET中"/"应用程序中的服务器错误的方法

浅析JS获取url中的参数实例代码

必备的JS调试技巧汇总

c#格式化数字的方法

Android开发之实现GridView支付宝九宫格

php中rename函数用法分析

Android日期时间格式国际化的实现代码

深入PHP magic quotes的详解

java验证用户是否已经登录 java实现自动登录

jQuery实现的手机发送验证码倒计时效果代码分享

jQuery制作简洁的多级联动Select下拉框

浅谈Cookie的生命周期问题

indexof 和 indexofany的区别介绍

整理的比较全的event对像在ie与firefox浏览器中的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值