В прошлой статье про VK API в Delphi я рассказал как можно добавлять комментарии к фотографиям так вот в этой статье мы рассмотрим как можно получить список этих самых комментариев и удалить комментарий, выбранный Вами, к конкретной фотографии. Тут есть немного нюансов, которые мы и рассмотрим. Ну во-первых для того, чтобы нам узнать комментарии к конкретной фотографии нам необходимо знать саму фотографию, а в частности ее идентификатор. Идентификатор фотографий мы ранее получали, когда в прошлой статье добавляли комментарии к фотографиям, так что для нас тут работа немного облегчена. Теперь давайте конкретно рассмотрим наш метод для получения комментариев

  • photos.getComments

Итак его параметры

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

Тут первые четыре параметры — обязательные для данного метода, также не забываем составлять подпись безопасности в алфавитном порядке. И также, если у Вас комментариев к фотографии больше 100, то Вам придется использовать смещение, а также, если комментариев совсем нету к Вашим фотографии, да бывает и такое, то просто в теге <count></count> будет просто 0. И еще 1 момент, что комментарии выводятся в порядке их создания, то есть первый комментарий будет тот, который был создан последним.

Теперь давайте перейдем к написанию самих запросов к ВК API. На нашу вкладку «Фотографии» я добавил еще пару компонентов, это

  • TListBox — 2 шт
  • TButton — 2 шт

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

Получение идентификаторов и самих комментариев у меня следующий

procedure TForm1.Button22Click(Sender: TObject);
var
 sig:string;
 i:integer;
begin
   try
    PostVK:=TStringList.Create;
    sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=photos.getCommentsowner_id='+Edit7.Text+'pid='+ListBox9.Items[ListBox9.ItemIndex]+'v=3.0'+Pchar(LabelSecret.Caption);
    sig:=md5(sig);
    if ListBox9.Count<=0 then
     begin
      ShowMessage('Not get photos');
      exit;
     end;
    PostVK.Clear;
    PostVK.Add('api_id=1918788');
    PostVK.Add('sig='+sig);
    PostVK.Add('v=3.0');
    PostVK.Add('method=photos.getComments');
    PostVK.Add('pid='+ListBox9.Items[ListBox9.ItemIndex]);
    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);
    PostVK.Free;
    i:=1;
    ListBox10.Clear;
    ListBox11.Clear;
    while (i<=length(logVK)) do
     begin
      if pos('<cid>',logVK)<>0 then
       begin
        ListBox10.Items.Add(Pars(logVK,'<cid','</cid>',0));
        Delete(logVK,1,pos('</cid>',logVK));
        ListBox11.Items.Add(Utf8ToAnsi(Pars(logVK,'<message','</message>',0)));
        Delete(logVK,1,pos('</message>',logVK));
        i:=0;
       end;
      inc(i);
     end;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

Так теперь давайте приступим к удалению наших комментариев к фотографиям, идентификаторы комментариев мы уже знаем, нам остается сделать все чуть-чуть. Рассмотрим сперва метод, который отвечает за эти действия

  • photos.deleteComment

Его параметры

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

Первые 5 параметров являются обязательными. Возвращает 1 — в случаем удачного удаления комментария или 0 — если комментарий удален уже, а также может и возвратит код ошибки, например если подпись безопасности составлена не верно.

Ну а теперь сам код

procedure TForm1.Button23Click(Sender: TObject);
var
 sig:string;
begin
   try
    PostVK:=TStringList.Create;
    sig:=Pchar(LabelMid.Caption)+'api_id=1918788cid='+ListBox10.Items[ListBox11.ItemIndex]+'format=XMLmethod=photos.deleteCommentowner_id='+Edit7.Text+'pid='+ListBox9.Items[ListBox9.ItemIndex]+'v=3.0'+Pchar(LabelSecret.Caption);
    sig:=md5(sig);
    if (ListBox10.Count<=0) or (ListBox11.Selected[0]=False) then
     begin
      ShowMessage('Not get photos');
      exit;
     end;
    PostVK.Clear;
    PostVK.Add('api_id=1918788');
    PostVK.Add('sig='+sig);
    PostVK.Add('v=3.0');
    PostVK.Add('method=photos.deleteComment');
    PostVK.Add('pid='+ListBox9.Items[ListBox9.ItemIndex]);
    PostVK.Add('cid='+ListBox10.Items[ListBox11.ItemIndex]);
    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);
    if pos('error_code',logVK)<>0 then
     ShowMessage('Delete Error')
    else
     ShowMessage('Delete comment');
    PostVK.Free;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

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

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

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

Метки: , , , , ,

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

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

*