Итак в первой практической части по проекту VK API в Delphi, я рассказал как можно авторизировать свое приложение в сети и получить данные сессии приложения, которые нам потребуются для дальнейшего получения данных. Вот в данной статье мы и начнем получать те данные (дальнейшие данные). В данном случае мы попробуем получить информацию об id-пользователя, а в частности нас самих, то есть когда мы авторизируем свое приложение, мы получаем id своей странички вот его и подставим в метод API, который поможет нам получить информацию об этом id, для начала мы получим нашу автатарку и имя, а также фамилию, я расскажу как получить больше информации в профиле, но это уже Вы сами. В следующих статьях мы попробуем получить список всех пользователей (то есть список всех ваших друзей), а затем применить данный метод на id-ваших друзей, чтобы показывало их профиль в нашей программе. Дальше, чтобы получать какую-то информацию из аккаунта ВК, нам придется посылать запрос на сервер API ВК, там он получает запрос, обрабатывает его, если запрос верный выдает информацию в XML-формате или JSON-формате.
Нам необходимо посылать запрос на сервер API, то есть можно POST-запросом, можно GET-запросом, для этого нам надо туда послать обязательные параметры, это
- api_id — идентификатор вашего приложения
- method — название метода API из списка всех функций, в данном случае это метод getProfiles, о нем подробно позже
- sig — подпись, которая создается в целях безопасности, как ее создать я опишу чуть ниже
- v — версия API, в сейчас версия — это 3.0
- format — формат возвращаемых значений, что я раньше и говорил XML или JSON
- sid — идентификатор сессий, которую мы получили ранее при идентификации.
Далее параметр sig равен сложению следующих строк
- mid
- параметр=значение (это те поля, которые вы хотите получить в конкретном методе)
- secret — это значение мы получали при авторизации
Далее, когда мы сложили эти строки (конкатенация), нам надо взять md5 от этой строки и это будет наш sig.
Вот как у меня только слаживается параметр sig
Pchar(LabelMid.Caption)+'api_id=1918788fields=photo_big,sexformat=XMLmethod=getProfilesuids='+Pchar(LabelMid.Caption)+'v=3.0'+Pchar(LabelSecret.Caption);
То есть я слаживаю id полученной страницы, id приложения, затем поля, которые мне необходимы для получения моего запроса и в конце я слаживаю secret. Затем я написал функцию md5, которая и формирует из нашей строки — строку безопасности. В type, где описываются все функции, процедуры я описал функцию
function md5(st:string):string;
Затем я поставил курсор на данную функцию и нажал сочетания клавиш Ctrl+Shift+C и после чего появилась «заготовочка» для нашей функции, которая выглядет следующим образом
function TForm1.md5(st: string): string;
begin
Result:='';
with TIdHashMessageDigest5.Create do
begin
Result:=AnsiLowerCase(AsHex(HashValue(st)));
end;
end;
Да и не забываем в Uses подключить модуль IdHashMessageDigest
Теперь пройдемся по методу API getProfiles
Здесь главный параметр необходим — это uids - список id пользователей, для которых необходимо получить информацию, далее идут необязательные параметры, про которые Вы можете почитать вот тут.
Затем я на TButton на событие OnClick написал следующий код
procedure TForm1.Button1Click(Sender: TObject);
var
sig:WideString;
Pic:TStream;
jpg:TJpegImage;
begin
try
sig:=Pchar(LabelMid.Caption)+'api_id=1918788fields=photo_big,sexformat=XMLmethod=getProfilesuids='+Pchar(LabelMid.Caption)+'v=3.0'+Pchar(LabelSecret.Caption);
sig:=md5(sig);
PostVK:=TStringList.Create;
PostVK.Add('api_id=1918788');
PostVK.Add('method=getProfiles');
PostVK.Add('sig='+sig);
PostVK.Add('v=3.0');
PostVK.Add('format=XML');
PostVK.Add('sid='+Pchar(LabelSid.Caption));
PostVK.Add('uids='+Pchar(LabelMid.Caption));
PostVK.Add('fields=photo_big,sex');
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
if pos('photo',logVK)<>0 then
begin
jpg:=TJPEGImage.Create;
Pic:=TStringStream.Create(IdHTTP1.Get(Pars(logVK,'<photo_big','</photo_big>',0)));
jpg.LoadFromStream(Pic);
Image1.Picture.Assign(jpg);
jpg.Free;
Pic.Free;
end;
LabelName.Caption:=Utf8ToAnsi(Pars(logVK,'<first_name','</first_name>',0));
LabelLastName.Caption:=Utf8ToAnsi(Pars(logVK,'<last_name','</last_name>',0));
PostVK.Free;
except
on e:Exception do
end;
end;
То есть формирую запрос с нужными мне параметрами и посылают его на сервер API ВК, далее получаю ответ, если сформирован не правильно, то все равно будет ответ с сервера, но только уже с кодом ошибки. Естественно это будет работать в том случае, если Вы добавите данное приложение к себе на страницу и затем авторизируйтесь, а только потом можно будет смотреть информацию о себе. Далее мы рассмотрим это все дело в потоке, чтобы программа не зависала и доделаю свой «корявенький модуль ВК«, который будет получать результат.