Проект VK API в Delphi. Получение списка друзей

5 минут на чтение

Итак продолжаю я знакомится с VK API. Вот на этот раз пал мой взгляд на метод — friends.get. Итак, что мы имеем, почти все тоже самое, что и с получением информацией из своего пользователя, да кстати в этой теме я расскажу еще как я по этим пользователем получил информацию из их профиля. Конечно это предоставляется возможность в данном методе, но зачем? Раз мы уже писали получение информации просто его чуть-чуть модернезируем и он будет работать для всех одинаково. Ну и затем после всего как мы составили все наши данные нам необходимо отослать запрос на сервер ВК API, затем получить ответ в нужном нам варианте (XML или JSON) и затем этот вариант разобрать и разместить как требуется. Сначала хотел бы сказать, что данный метод будет работать если только на данное приложение установлены права не меньше 2, то есть по умолчанию, где есть кнопка в моем приложении «Добавить приложение на свое страницу» я даю все права данному приложению, а Вы уже сами решаете какие ставить, какие нет.

Параметры, которые передаются при данном методе — это

  • fields — поля, которые необходимо получать из профиля вашего друга, то есть теже самые, что и в получении информации из вашего профиля, по умолчанию только uid и ФИО.
  • name_case — это падеж, в котором выдавать ФИО (существуют nom-именительный, gen-родительный, dat-дательный,acc-винительный,ins-творительный,alb-предложный, по умолчанию nom).

Но я не буду получать все поля из профиля своих друзей, а просто получу id своих друзей, а затем по выбранному id я буду получать информацию о нем, в той процедуре, где я получал информацию о себе.

Итак я добавил TListBox на вкладку «Список друзей«, а также TEdit на вкладку «Профиль«, в котором будет отображаться id пользователя, для которого необходимо посмотреть информацию из профиля. На получение списка друзей, а точнее их id, я составил следующий запрос

procedure TForm1.Button5Click(Sender: TObject);
label met;
var
 PostVK:TStringList;
 sig:string;
begin
   try
    PostVK:=TStringList.Create;
    sig:=Pchar(Form1.LabelMid.Caption)+'api_id=1918788fields=photo_big,sexformat=XMLmethod=friends.getv=3.0'+Pchar(Form1.LabelSecret.Caption);
    sig:=md5(sig);
    PostVK.Add('api_id=1918788');
    PostVK.Add('method=friends.get');
    PostVK.Add('sig='+sig);
    PostVK.Add('v=3.0');
    PostVK.Add('format=XML');
    PostVK.Add('fields=photo_big,sex');
    PostVK.Add('sid='+Pchar(Form1.LabelSid.Caption));
    logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
    PostVK.Free;
    met:
     if pos('<uid>',logVK)<>0 then
      begin
       ListBox1.Items.Add(Pars(logVK,'<uid','</uid>',0));
       Delete(logVK,1,pos('</uid>',logVK));
       goto met;
      end;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

Естественно перед тем, как получить id ваших всех друзей, необходимо получить данные сессии, затем как всегда получаем sig - идентификатор безопасности, как его получить я рассказывал, а также поменял просто на новый метод, то есть friends.get. Дальше я почему-то решил использовать метки, чтобы из всего ответа от сервера получить список id всех ваших друзей. Далее как только находится id я его добавляю в TListBox, затем по нажатию на TListBox id отображается в TEdit, что размещен на вкладке «Профиль«, затем если нажать на кнопку «Посмотреть«, то появится краткая информация его профиля, ее можно расширить добавлением в запрос новых полей. Процедуру Execute потока, который получает у нас информацию из профиля на сервере VK, я изменил следующим образом

procedure VKThreadProfiles.Execute;
var
 Connection:DWORD;
begin
  inherited;
  try
   Connection:=1+2+3;
    if InternetGetConnectedState(@Connection,0)=False then
     begin
      Application.MessageBox('Подключить к Интернет','Внимание',MB_OK+MB_ICONINFORMATION);
      exit;
     end;
    Form1.LabelResultPofiles.Caption:='Ждите...идет получение данных';
    Form1.LabelResultPofiles.Font.Color:=clRed;
    Form1.Timer2.Enabled:=True;
    sig:=Pchar(Form1.LabelMid.Caption)+'api_id=1918788fields=photo_big,sexformat=XMLmethod=getProfilesuids='+Form1.Edit1.Text+'v=3.0'+Pchar(Form1.LabelSecret.Caption);
    sig:=Form1.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(Form1.LabelSid.Caption));
    PostVK.Add('uids='+Form1.Edit1.Text);
    PostVK.Add('fields=photo_big,sex');
    logVK:=Form1.idHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
    PostVK.Free;
    if pos('photo',logVK)<>0 then
     begin
      jpg:=TJPEGImage.Create;
      Pic:=TStringStream.Create(Form1.IdHTTP1.Get(Pars(logVK,'<photo_big','</photo_big>',0)));
      jpg.LoadFromStream(Pic);
      Form1.Image1.Picture.Assign(jpg);
      jpg.Free;
      Pic.Free;
     end;
    Synchronize(ShowResult);
   except
    on e:Exception do
   end;
end;

То есть добавил только то, чтобы id брался из TEdit. Ну что, теперь Вы спокойно можете писать для себя уже небольшие приложения, чем дальше, тем интереснее, дальше на очереди добавление данной функции в модуль VK_API, которая будет возвращать id друзей в одной строке, разделенными запятой.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Здравствуйте, давненько я не писал про проект VK API в Delphi, на этот раз хочу продолжить серию статей про данный проект, тем более, что еще достаточно много не рассмотрено функций по работе с VK API. В последних статьях про VK API в Delphi мы рассмотрели фун...
Здравствуйте, вот все продолжаю мучать VK API в Delphi. На этой раз «перст пал» на расширенные методы API. К данным методам относятся работа с личными сообщениями работа со стеной пользователя работа с фотографиями и альбомами фотографий В данный момент хоте...
Вот хочу запустить проект VK API в Delphi(Вконтакте API в Delphi), в связи с тем, что сам сайт вконтакте открыл возможно обращаться к серверу API Vkontakte из Desktop-приложений. Довольно интересно, так как можно написать свой IM-клиент для контакта и общаться...