Здравствуйте, в этой статье я хотел бы опять вернуться к API в ВК. На этот раз хотел бы рассмотреть метод API, с помощью которого можно получить все фотографии с альбомов. Довольно интересный метод, а также довольно полезный, так как можно вполне данную функцию сделать довольно привлекательной в вашем проекте, в виде слайд-шоу или что-то в этом вроде. Хочу сказать сразу, что все фотографии пользователя с фотоальбома данный метод возвращает в антихронологическом порядке. Скажу сразу, что данный метод позволяет получить ссылки на ваши фотографии в разных размерах фотографий, а точнее их 3 это:

  • src - среднее разрешение
  • src_big - полноразмерная фотография
  • src_small - самое маленькое разрешение

То есть если Вы будете получать отображать, например, в TImage src_big, то естественно фотографии там будут четкие, хорошего разрешения, ну а другие будут менее эффективные, но зато будут «тянуть» меньше трафика.

Теперь давайте перейдем непосредственно к самому методу, данный метод называется

  • photos.getAll

Он имеет следующие параметры

  • api_id - идентификатор приложения
  • sig - подпись безопастности
  • v - версия API, в документации VK 2.0, рабочая — 3.0
  • owner_id - идентификатор пользователя, для которого необходимо смотреть список фотографий
  • offset - смещения, необходимое для выборки определенного подмножества фотографий
  • count — количество фотографий, которое можно получать за 1 раз, по умолчанию 100
  • format - формат, получаемых данных JSON или XML
  • test_mode - если равен 1, то разрешает тестовые запросы к данным приложения

Ну что теперь давайте получим в TListBox список url картинок действительного размера и затем сделаем ручной слайд-шоу, с помощью TImage, конечно затем сможете сделать и с помощью таймера слайд-шоу, но это уже по вашему усмотрению, а теперь код, который формирует запрос и получает url на фотографии из ваших альбомов

procedure TForm1.Button18Click(Sender: TObject);
var
 sig:string;
 i:integer;
begin
   try
    PostVK:=TStringList.Create;
    sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=photos.getAllowner_id='+Edit7.Text+'v=3.0'+Pchar(LabelSecret.Caption);
    sig:=md5(sig);
    PostVK.Clear;
    PostVK.Add('api_id=1918788');
    PostVK.Add('sig='+sig);
    PostVK.Add('v=3.0');
    PostVK.Add('method=photos.getAll');
    PostVK.Add('format=XML');
    PostVK.Add('owner_id='+Edit7.Text);
    PostVK.Add('sid='+Pchar(LabelSid.Caption));
    logVK:=IdHTTP1.Post('http://api.vkontakte.ru/api.php',PostVK);
    ListBox8.Clear;
    i:=1;
    while i<=length(logVK) do
     begin
      if pos('<src_big>',logVK)<>0 then
       begin
        ListBox8.Items.Add(Pars(logVK,'<src_big','</src_big>',0));
        delete(logVK,1,pos('</src_big>',logVK));
        i:=0;
       end;
      inc(i);
     end;
    PostVK.Free;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

Не забывайте составлять подпись в алфавитном порядке и использовать версию API - 3.0. У меня при авторитизации в TEdit заносится мой id, а если Вы получите список идентификаторов ваших друзей и нажмете на их идентификатор, то сможете посмотреть список фотографий в их альбоме, то есть я не использовал здесь owner_id - по умолчанию.

Теперь код, который я написал на получение фотографий — кнопка «Далее«

procedure TForm1.Button19Click(Sender: TObject);
var
 Stream:TStream;
 jpg:TJPEGImage;
begin
   try
    if count>=ListBox8.Count-1 then
     count:=-1;
    inc(count);
    Stream:=TStringStream.Create(IdHTTP1.Get(ListBox8.Items[count]));
    jpg:=TJPEGImage.Create;
    jpg.LoadFromStream(Stream);
    Image2.Picture.Assign(jpg);
    jpg.Free;
    Stream.Free;
   except
    on e:Exception do
     begin
      Stream.Free;
      jpg.Free;
     end;
   end;
end;

Ну а теперь кнопка «Назад«

procedure TForm1.Button20Click(Sender: TObject);
var
 Stream:TStream;
 jpg:TJPEGImage;
begin
   try
    if count<=0 then
     count:=1;
    dec(count);
    Stream:=TStringStream.Create(IdHTTP1.Get(ListBox8.Items[count]));
    jpg:=TJPEGImage.Create;
    jpg.LoadFromStream(Stream);
    Image2.Picture.Assign(jpg);
    jpg.Free;
    Stream.Free;
   except
    on e:Exception do
     begin
      Stream.Free;
      jpg.Free;
     end;
   end;
end;

Как видите ничего сложного нету. В следующей статье мы рассмотрим как можно получить список фотографий, на которых отмечен пользователь

Исходники полного проекта качаем тут

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

Метки: , , , , ,




К записи “Проект VK API в Delphi. Получение фотографий” оставлено комментариев: 7.

  1. Alex:

    Отличные статьи! Спасибо! Вам бы Вконтакт это отправить, а то они нормального описания с примерами так и не сделали.

    • Алексей:

      Простите, я делаю приложение и мне хотелось бы узнать метод отправки фото в альбом ВК?
      И интересует вопрос с авторизацией, что бы пользователь мог авторизоваться и отправить себе на страницу фото?

      Спасибо)))

  2. Alex:

    Кстати а загрузить фото с помощью api в альбом можно?

  3. Отлично, спасибо Вам, будем применять данные методы на сайте http://www.iti-pgu.ru

  4. Роман:

    У меня почему-то программа возвращает не все фотографии, которые есть у моих друзей. Почему?

  5. Роман:

    Спасибо, а то думал, что-то не так делаю.

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*