标签:style blog http io color ar 使用 sp for
上篇中得到的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 try 11 for i := 0 to ss.Size - 1 do 12 begin 13 reg.Subject:=char(ss.Bytes[i]); 14 reg.RegEx:= ‘[a-zA-Z0-9]|\-|\.‘; 15 if reg.Match then 16 begin 17 result:=result+char(ss.Bytes[i]); 18 continue; 19 end; 20 21 if Trim(Char(ss.Bytes[i])) = ‘ ‘ then 22 begin 23 result:=Result + ‘%20‘; 24 Continue; 25 end; 26 27 Result := Result + ‘%‘ + Format(‘%.2x‘, [ss.Bytes[i]]); 28 end; 29 finally 30 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);即可
标签:style blog http io color ar 使用 sp for
原文地址:http://www.cnblogs.com/ab0416/p/4087673.html