В прошлой статье про 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('https://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('https://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;
В следующих статья все также будем рассматривать еще работы с фотографиями пользователя, и не забываем создавать подпись безопасности в алфавитном порядке