• 二、酷狗 歌词下载


    上篇中得到的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);即可

  • 相关阅读:
    SQL语句编写
    触发器
    plot函数中的type中的参数
    【转】R中read.table详解
    7月18日R笔记
    RMySQL在windows下的安装方法
    WinXP下面实现JAVA对R调用 (rJava包设置)
    用R进行文档层次聚类完整实例(tm包)
    R学习之R层次聚类方法(tm包)
    R对term进行层次聚类完整实例(tm包)
  • 原文地址:https://www.cnblogs.com/ab0416/p/4087673.html
Copyright © 2020-2023  润新知