Итак в первой практической части по проекту 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('http://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 ВК, далее получаю ответ, если сформирован не правильно, то все равно будет ответ с сервера, но только уже с кодом ошибки. Естественно это будет работать в том случае, если Вы добавите данное приложение к себе на страницу и затем авторизируйтесь, а только потом можно будет смотреть информацию о себе. Далее мы рассмотрим это все дело в потоке, чтобы программа не зависала и доделаю свой «корявенький модуль ВК«, который будет получать результат.

Полный исходник (и с прошлого урока, и с модулем) качаем тут

Автор статьи - Andrey53

Метки: , , , , ,

Комментарии закрыты.