В данной статье хотел бы вернуться к API ВК и рассказать как можно отправлять комментарии к фотографиям вконтакте. Вообще я прошлый пост немного модифицировал (изменил), то есть я просто добавил парсинг идентификатора фотографий, так как нам необходимо будет при формировании запроса указывать на какую фотографию (на какой идентификатор фотографии) отправлять запрос с комментарием. Также я добавил на вкладку «Фотографии» еще один TListBox - для того, чтобы туда выводить все идентификаторы фотографий и в TListBox в свойстве Visible установим в False, при просмотре фотографий мы буем просто в нашем TListBox выделять идентификатор и комментарий будет отправляться на нужную фотографию (всетаки по одному идентификатору сложно усмотреть, что за фотография и на какую отправлять комментарий). Теперь давайте немного поговорим о самом методе, который поможет нам отправлять комментарии к фотографиям, это:
- photos.createComment
Теперь более подробно рассмотрим его параметры:
- api_id - ну как всегда уже традиционно идентификатор нашего приложения.
- sig - подпись безопасности
- v - версия API, в документации ВК - 2.0, а рабочая — 3.0
- pid - идентификатор фотографии, для которой необходимо отправлять комментарий
- owner_id - идентификатор пользователя, на фотографии которого отправляется комментарий, по умолчанию текущий пользователь
- message - текст комментария. Внимание не меньше 2-х символов
- format - формат, выводимых данных (XML или JSON)
- test_mode - если равен 1, то разрешает тестовые запросы к данным приложения
Ну а теперь, что я дополнительно установил на нашу вкладку помимо TListBox, это
- TMemo
- TButton
В TMemo у нас будет вводиться текст комментария, да не забываем создавать подпись безопасности в алфавитном порядке, иначе будет ошибка при отправке запроса. Вот как я дополнил код, который парсил url фотографий, кодом, который теперь и еще парсит идентификаторы фотографий
i:=1;
while i<=length(logVK) do
begin
if pos('<src_big>',logVK)<>0 then
begin
ListBox9.Items.Add(Pars(logVK,'<pid','</pid>',0));
Delete(logVK,1,pos('</pid>',logVK));
ListBox8.Items.Add(Pars(logVK,'<src_big','</src_big>',0));
delete(logVK,1,pos('</src_big>',logVK));
i:=0;
end;
inc(i);
end;
Теперь напишем код отправки комментария к фотографии, на событие TButton OnClick
procedure TForm1.Button21Click(Sender: TObject);
var
sig:string;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmessage='+AnsiToUtf8(Memo1.Text)+'method=photos.createCommentowner_id='+Edit7.Text+'pid='+ListBox9.Items[ListBox9.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=photos.createComment');
PostVK.Add('message='+AnsiToUtf8(Memo1.Text));
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);
if count<0 then
ShowMessage('Selected photo');
if pos('error_code',logVK)<>0 then
ShowMessage('Error send message')
else
ShowMessage('Message send');
PostVK.Free;
except
on e:Exception do
PostVK.Free;
end;
end;
Здесь должно быть все понятно, не забываем про версию API - 3.0, не забываем создавать подпись безопасности в алфавитном порядке. В следующих статьях будем получать комментарии, а также их удалять к фотографиям. Да и не забывайте отправлять текст комментария на русском языке перекодируя его сперва в другую кодировку, иначе могут быть иероглифы.