<?php
//转载请注明出处 uenucom
function SingleDecToHex($dec) 

$tmp=""; 
$dec=$dec%16; 
if($dec<10) return $tmp.$dec; 
$arr=array("A","B","C","D","E","F"); 
return $tmp.$arr[$dec-10]; 

function SetToHexString($str) 

if(!$str) return false; 
$tmp=""; 
for($i=0;$i<strlen($str);$i++) 

$ord=ord($str[$i]); 
$tmp.=SingleDecToHex(($ord-$ord%16)/16); 
$tmp.=SingleDecToHex($ord%16); 

return $tmp; 

function qianqian_code($str) 

$s=strtolower($str); 
$s=str_replace(" ","",$s); 
$s=str_replace("'","",$s); 
return SetToHexString(iconv('GBK','UTF-16LE',$s));} 
  
function conv($num) 

$tp = bcmod($num,4294967296); 
  
if(bccomp($num,0)>=0 && bccomp($tp,2147483648)>0) 
$tp=bcadd($tp,-4294967296); 
if(bccomp($num,0)<0 && bccomp($tp,2147483648)<0) 
$tp=bcadd($tp,4294967296); 
  
return $tp; 

function CodeFunc($Id,$artist,$title) 

$Id=(int)$Id; 
$utf8Str=SetToHexString(iconv('GBK','UTF-8',$artist.$title)); 
  
$length=strlen($utf8Str)/2; 
for($i=0;$i<=$length-1;$i++) 
eval('$song['.$i.'] = 0x'.substr($utf8Str,$i*2,2).';'); 
  
$tmp2=0; 
$tmp3=0; 
  
$tmp1 = ($Id & 0x0000FF00) >> 8; //右移8位后为0x0000015F 
//tmp1 0x0000005F 
if ( ($Id & 0x00FF0000) == 0 ) { 
$tmp3 = 0x000000FF & ~$tmp1; //CL 0x000000E7 
} else { 
$tmp3 = 0x000000FF & (($Id & 0x00FF0000) >> 16); //右移16位后为0x00000001 

$tmp3 = $tmp3 | ((0x000000FF & $Id) << 8); //tmp3 0x00001801 
$tmp3 = $tmp3 << 8; //tmp3 0x00180100 
$tmp3 = $tmp3 | (0x000000FF & $tmp1); //tmp3 0x0018015F 
$tmp3 = $tmp3 << 8; //tmp3 0x18015F00 
if ( ($Id & 0xFF000000) == 0 ) { 
$tmp3 = $tmp3 | (0x000000FF & (~$Id)); //tmp3 0x18015FE7 
} else { 
$tmp3 = $tmp3 | (0x000000FF & ($Id >> 24)); //右移24位后为0x00000000 

  
$i=$length-1; 
while($i >= 0){ 
$char = $song[$i]; 
if($char >= 0x80) $char = $char - 0x100; 
  
$tmp1 = ($char + $tmp2) & 0x00000000FFFFFFFF; 
$tmp2 = ($tmp2 << ($i%2 + 4)) & 0x00000000FFFFFFFF; 
$tmp2 = ($tmp1 + $tmp2) & 0x00000000FFFFFFFF; 
$i -= 1; 

  
$i=0; 
$tmp1=0; 
while($i<=$length-1){ 
$char = $song[$i]; 
if($char >= 128) $char = $char - 256; 
$tmp7 = ($char + $tmp1) & 0x00000000FFFFFFFF; 
$tmp1 = ($tmp1 << ($i%2 + 3)) & 0x00000000FFFFFFFF; 
$tmp1 = ($tmp1 + $tmp7) & 0x00000000FFFFFFFF; 
  
$i += 1; 

  
$t = conv($tmp2 ^ $tmp3); 
$t = conv(($t+($tmp1 | $Id))); 
$t = conv(bcmul($t , ($tmp1 | $tmp3))); 
$t = conv(bcmul($t , ($tmp2 ^ $Id))); 
  
if(bccomp($t , 2147483648)>0) 
$t = bcadd($t ,- 4294967296); 
return $t;} 
  
$artist="央金兰泽"; 
$title="遇上你是我的缘"; 
$doc = new DOMDocument(); 
$doc->load("http://lrccnc.ttplayer.com/dll/lyricsvr.dll?sh?Artist=".qianqian_code($artist)."&Title=".qianqian_code($title)."&Flags=0"); 
  
$lrcNode = $doc->getElementsByTagName("lrc"); 
foreach($lrcNode as $lrc) 

$id=$lrc->getAttribute("id"); 
$artist=iconv('UTF-8','GBK',$lrc->getAttribute("artist")); 
$title=iconv('UTF-8','GBK',$lrc->getAttribute("title")); 
$code=CodeFunc($id,$artist,$title); 
$lrcstr=iconv('UTF-8','GBK',file_get_contents("http://lrccnc.ttplayer.com/dll/lyricsvr.dll?dl?Id=".$id."&Code=".$code)); 
echo $lrcstr; 
break; 

  
?>

最新文章

  1. Aoite 系列(03) - 一起来 Redis 吧!
  2. 【2016年特别福利】史上最全CSS学习资料大全
  3. 【BZOJ】1100: [POI2007]对称轴osi
  4. Gedit中文乱码
  5. 第2章 面向对象的设计原则(SOLID):2_里氏替换原则(LSP)
  6. Babelfish(poj 2503)
  7. php基础小知识
  8. 适合我胃口的angular.js学习资料
  9. C# Obsolete
  10. FTP配置参数
  11. jenkins+svn+gradle自动化部署笔记
  12. sulime text3
  13. Eclipse常用快捷键和调试方法
  14. sklearn交叉验证3-【老鱼学sklearn】
  15. 第十一篇 CBV和闪现
  16. Java学习笔记(二)——类和对象
  17. bzoj千题计划319:bzoj2865: 字符串识别(后缀自动机 + 线段树)
  18. Typescript学习总结之泛型
  19. C#--构造函数的理解
  20. Turn the Rectangles 1008B

热门文章

  1. Google Chrome插件开发-Context Menus
  2. Hadoop Maven pom文件示例
  3. 【笔记】js 关于定时器的理解
  4. (转)NIO 内存映射文件
  5. Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)
  6. Office WPS如何让页与页之间不相互影响
  7. 分布式消息系统Jafka入门指南
  8. Python 入门demo第二篇
  9. 回调函数callback使用例子
  10. 全排列算法 --javascript 实现