[Delphi] Vkontakte API 3.0

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by RedFern.89, 7 Sep 2010.

  1. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Доброго времени суток уважаемые програмисты! На сегодня встал вопрос о поиске аудио через Vkontakte API 3.0. При поиске группы с названием без пробелов (например Biorate) поиск осуществляется нормально. Если же в названии группы содержаться пробелы (заменял на %20) (например Kill The Romance), то сервер отвечает Incorrect signature.



    Вот коды нужных процедур:

    #1

    Code:
    
    [i][color=DarkOrange]Функция убирает символы [b]&[/b] и сортирует параметры в алфавитном порядке[/color][/i]
    
    function SignRequest(const Request, mid, Secret: string): string;
    var
      sIn  : TStringList;
      sTmp : string;
      sCur : string;
      I    : Integer;
    begin
      sIn := TStringList.Create;
    
      sTmp := Request;
      sTmp := sTmp + '&';
    
      While (Pos('&', sTmp) <> 0) do
      begin
        sCur := Copy(sTmp, 1, Pos('&', sTmp) - 1);
        Delete(sTmp, 1, Pos('&', sTmp));
        sIn.Add(sCur);
      end;
       sIn.Sort;
    
     For I := 0 To sIn.Count -1 do
     begin
       Result := Result + sIn[i];
     end;
       Result := MD5(mid + result + secret);
       sIn.Free;
    end;
    
    #2

    Code:
    
    [color=DarkOrange]Функция поиска аудио[/color]
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      Req  : string;
      Sign : string;
      Host : string;
    begin
      Host := 'api.vkontakte.ru';
      Req  := 'q=Kill%20The%20Romance&sort=0&method=audio.search&count=100&offset=0&api_id=1931178&v=3.0&format=XML';
      Sign := SignRequest(Req, mid, secret);
    
      Req := Req + '&sig=' + sign + '&sid=' + sid;
    
      ShowMessage(idHTTP1.Get('http://' + Host + '/api.php?' + Req));
    end;
    
     
    #1 RedFern.89, 7 Sep 2010
    Last edited: 7 Sep 2010
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Попробуй в функции SignRequest в поле q заменить все символы #20 на пробел и тогда генерировать сигнатуру. Хотя возможно и не в этом причина, но так или иначе сигнатура не правильно создается.
     
  3. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Chrome~, тогда сигнатура неверной будет. я проснифал прогу Vkontakte DJ, там пробелы меняюца на %20. Она тоже юзает Vkontakte API

    update: вопрос закрыт. я разобрался. Всем спасибо за содействие
     
    #3 RedFern.89, 7 Sep 2010
    Last edited by a moderator: 8 Sep 2010
  4. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    А как авторизироваться с нажатием кнопки разрешить? есть у кого код?

    ps извиняюсь за археолога
     
  5. lamer811

    lamer811 Elder - Старейшина

    Joined:
    8 Nov 2009
    Messages:
    132
    Likes Received:
    39
    Reputations:
    12
    Смотри тему:
    https://forum.antichat.ru/threadnav234188-3-10.html
     
Loading...