Здравствуйте, вот решил наконец-то вернуться к написанию статей о проекте VK в Delphi. Давненько я не писал, но вот решил закончить серию статье по работе со стеной пользователя. На этот раз мы рассмотрим как можно удалять сообщения со стены пользователя. По умолчанию мы будем рассматривать текущего пользователя, а точнее самого себя, то есть будем удалять сообщения со своей стены. Довольно похожий метод API VK на остальные, даже параметры почти одни и теже, называется данный метод
- wall.delete
Ну а теперь давайте пройдемся немного по параметрам
- api_id - идентификатор приложения
- sig - подпись безопастности
- v - версия API. В документации АПИ написана 2.0, но на самом деле рабочая — 3.0
- owner_id - идентификатор пользователя, по-умолчанию текущий пользователь, то есть мы
- mid - идентификатор сообщения, которое необходимо удалить
- test_mode - если равен 1, то разрешается тестовые запросы к данным приложения
Далее на вкладку «Стена» я установил еще следующие комопненты
TListBox
TButton
Вы спросите для чего еще 1 TListBox - для того, чтобы отображать для каждого сообщения идентификаторы сообщений, по которым мы будем потом их удалять.
На кнопку получения сообщений я дописал код, чтобы можно было еще и получать идентификатор сообщений
procedure TForm1.Button15Click(Sender: TObject);
var
sig:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788count=100format=JSONmethod=wall.getv=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=wall.get');
PostVK.Add('format=JSON');
PostVK.Add('count=100');
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
//ShowMessage(logVK);
i:=1;
ListBox6.Clear;
//ShowMessage(logVK);
while i<=length(logVK) do
begin
if pos('"text":',logVK)<>0 then
begin
ListBox6.Items.Add(Utf8ToAnsi(Pars(logVK,'"text":','"',0)));
ListBox7.Items.Add(Pars(logVK,'"id"','"',1));
Delete(LogVK,1,pos('"text"',logVK));
i:=0;
end;
inc(i);
end;
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
А на кнопку удаления сообщений я написал следующий код
procedure TForm1.Button16Click(Sender: TObject);
var
sig:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmessage='+AnsiToUtf8(Edit6.Text)+'method=wall.postowner_id='+Edit5.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=wall.post');
PostVK.Add('format=XML');
PostVK.Add('message='+AnsiToUtf8(Edit6.Text));
PostVK.Add('owner_id='+Edit5.Text);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
if pos('error_code',logVK)=0 then
begin
Showmessage('Message send');
end
else
begin
ShowMessage('Not message send');
end;
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
procedure TForm1.Button17Click(Sender: TObject);
var
sig:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=wall.deletemid='+ListBox7.Items[ListBox7.ItemIndex]+'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=wall.delete');
PostVK.Add('format=XML');
PostVK.Add('mid='+ListBox7.Items[ListBox7.ItemIndex]);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
ShowMessage(logVK);
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
Естественно удалить можно только после того, как получите список сообщений и выделите в TListBox идентификатор сообщения, который необходимо удалять. Не забываем составлять подпись в алфавитном порядке