您的位置:首页 > 其它

二、酷狗 歌词下载

2014-11-10 17:28 106 查看
上篇中得到的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字段,所以这样处理,可能比较麻烦

function StrToHex5(str: string; AEncoding: TEncoding): string;
var
ss: TStringStream;
i: Integer;
reg:TPerlRegex;
begin
Result := '';
reg:=TPerlregex.Create;
ss := TStringStream.Create(str, AEncoding);
try
for i := 0 to ss.Size - 1 do
begin
reg.Subject:=char(ss.Bytes[i]);
reg.RegEx:= '[a-zA-Z0-9]|\-|\.';
if reg.Match then
begin
result:=result+char(ss.Bytes[i]);
continue;
end;

if Trim(Char(ss.Bytes[i])) = ' ' then
begin
result:=Result + '%20';
Continue;
end;

Result := Result + '%' + Format('%.2x', [ss.Bytes[i]]);
end;
finally
ss.Free;
reg.Free;
end;
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);即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: