Delphi goo.gl

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Москва, 12 Dec 2011.

  1. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    62
    Likes Received:
    3
    Reputations:
    0
    Подскажите как заюзать и получить от сервера укорачивателя goo.gl на Delphi вот, подключил SSL библиотеки. Вот POST запрос через httpfox:
    Code:
    (Request-Line)	POST /api/shorten HTTP/1.1
    Host	goo.gl
    User-Agent	Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0
    Accept	text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language	ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding	gzip, deflate
    Accept-Charset	windows-1251,utf-8;q=0.7,*;q=0.7
    Connection	keep-alive
    X-Auth-Google-Url-Shortener	true
    Content-Type	application/x-www-form-urlencoded;charset=utf-8
    Referer	http://goo.gl/
    Content-Length	39
    Cookie	authed=1
    Pragma	no-cache
    Cache-Control	no-cache

    Code:
    url	http://mail.ru
    security_token	

    ответ:
    Code:
    {"short_url":"http://goo.gl/PQda","added_to_history":false}
    Как на делфи это сделать с помощью IdHTTP и других компонентов?
     
  2. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    посмотрите тему "Наши релизы"
    там ShadowRun выкладывал готовую программу.
    Не нужно Вам ее писать.
    Вот ссылка на пост:
    /showpost.php?p=2885536&postcount=101
     
    #2 xophet, 12 Dec 2011
    Last edited: 12 Dec 2011
  3. Москва

    Москва New Member

    Joined:
    19 Oct 2010
    Messages:
    62
    Likes Received:
    3
    Reputations:
    0
    Спасибо за информацию. Но мне надо код, для своей программы)
     
  4. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Code:
    function Pars(T_, ForS, _T: string; CaseSensitive:Boolean=False): string;
    var
      a, b: integer;
    begin
      Result := '';
      if (ForS = '') then
        Exit;
        if T_='' then a:=1
        else
        if CaseSensitive then a := Pos(T_, ForS)
        else a := Pos(UpperCase(T_), UpperCase(ForS));
        if a = 0 then
          Exit
        else
          a := a + Length(T_);
      ForS := Copy(ForS, a, Length(ForS) - a + 1);
      if _T='' then b:=Length(forS)+1
      else
       if CaseSensitive then b := Pos(_T, ForS)
        else b := Pos(UpperCase(_T), UpperCase(ForS));
      if b > 0 then
        Result := Copy(ForS, 1, b - 1);
    end;
    
    function ShortenUrl(HTTP:TIdHTTP;Url:string):string;
    var i:Integer;
        Data:TStringList;
        res:string;
    begin
      i:=0;
      Result:='';
      Data:=TStringList.Create;
      try
        Data.Add('url='+Url);
        Data.Add('security_token');
        repeat
          try
            res:=HTTP.Post('http://goo.gl/api/shorten',Data);
            Result:=Pars('"short_url":"',res,'"');
          except
          end;
          Inc(i);
          if frmMain.NeedStop then
            Exit;
        until (Result<>'')or(i>=3);
      finally
        Data.Free;
      end;
    end;
    
    procedure TfrmMain.btnStartClick(Sender: TObject);
    var HTTP:TIdHTTP;
        LongUrls:TStringList;
        ShortUrl:string;
        i:Integer;
    begin
      mmoShort.Clear;
      NeedStop:=False;
      LongUrls:=TStringList.Create;
      HTTP:=TIdHTTP.Create;
      try
        HTTP.ReadTimeout:=10000;
        HTTP.ConnectTimeout:=40000;
        LongUrls.AddStrings(mmoLong.Lines);
        if LongUrls.Count=0 then
        begin
          ShowMessage('Добавьте ссылок');
          Exit;
        end;
        gProgress.Progress:=0;
        gProgress.MaxValue:=LongUrls.Count;
        for i:=0 to LongUrls.Count-1 do
        begin
          ShortUrl:=ShortenUrl(HTTP,LongUrls[i]);
          if ShortUrl<>'' then
            mmoShort.Lines.Add(ShortUrl);
          if NeedStop then
            Exit;
          gProgress.AddProgress(1);
          Application.ProcessMessages;
        end;
      finally
        LongUrls.Free;
        HTTP.Free;
      end;
    end;
    ,
    где mmoLong - Memo с списком длинных ссылок.
    gProgress - TGauge
    NeedStop - глобальная переменна типа Boolean, если нужно прервать цикл, сделайте
    Code:
    NeedStop:=True;
     
    1 person likes this.