Доброго времени суток уважаемые програмисты! На сегодня встал вопрос о поиске аудио через 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;
Попробуй в функции SignRequest в поле q заменить все символы #20 на пробел и тогда генерировать сигнатуру. Хотя возможно и не в этом причина, но так или иначе сигнатура не правильно создается.
Chrome~, тогда сигнатура неверной будет. я проснифал прогу Vkontakte DJ, там пробелы меняюца на %20. Она тоже юзает Vkontakte API update: вопрос закрыт. я разобрался. Всем спасибо за содействие