首页 > 代码库 > 二、酷狗 歌词下载

二、酷狗 歌词下载

上篇中得到的JSON穿通过解析可以得到以下数据

TSearchKg=record

singername:string;//歌手名

filename:string;//歌词名

hash:string;//哈希验证

timelength:string;//时长

end;

酷狗歌词下载Url:http://mobilecdn.kugou.com/new/app/i/krc.php?‘ + ‘keyword=‘ +
    song + ‘&timelength=‘ + timelength + ‘&type=1‘ + ‘&cmd=200‘ +‘&time=‘+time+
    ‘&hash=‘ + hash;

song为utf8编码,有字符的处理转码需要特别处理,也许有更巧妙的UrlCode方式,但是我这里只解析song字段,所以这样处理,可能比较麻烦

 1 function StrToHex5(str: string; AEncoding: TEncoding): string; 2 var 3   ss: TStringStream; 4   i: Integer; 5   reg:TPerlRegex; 6 begin 7   Result := ‘‘; 8   reg:=TPerlregex.Create; 9   ss := TStringStream.Create(str, AEncoding);10   try11     for i := 0 to ss.Size - 1 do12     begin13       reg.Subject:=char(ss.Bytes[i]);14       reg.RegEx:= [a-zA-Z0-9]|\-|\.;15       if reg.Match then16       begin17         result:=result+char(ss.Bytes[i]);18         continue;19       end;20 21       if Trim(Char(ss.Bytes[i])) =   then22       begin23         result:=Result + %20;24         Continue;25       end;26 27       Result := Result + % + Format(%.2x, [ss.Bytes[i]]);28     end;29   finally30     ss.Free;31     reg.Free;32   end;33 end;

timelength,hash以通过搜索获取

time字段为时间戳,System.DateUtils单元中有function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean): Int64;

可以转换获取AInputIsUTC默认True设置False

字段值全部获取成功,提交链接,我通过Idhttp下载下来的文件在头尾都会多出一些内容,尚未查明原因,

所以直接用系统自带的下载Api下载

添加Winapi.UrlMon单元,使用URLDownloadToFile(nil,pchar(下载链接),pchar(保存路径),0,nil);即可

 

二、酷狗 歌词下载