Здравствуйте, в этой статье я хотел бы опять таки поговорить о VK API в Delphi. На этот раз мы поговорим как можно добавить комментарий к видеозаписи, а точнее каким методом API необходимо воспользоваться, чтобы создать комментарий. Мы уже похожий пример рассматривали, когда добавляли комментарии к фотографиям. Здесь почти тоже самое, только используется другой метод, а также другие параметры, хотя по значениям они одни и теже. То есть при отправке комментария к фотографии, на стену, необходимо было указывать идентификатор пользователя или фотографии, а также само сообщение, так вот здесь тоже самое, только необходимо указывать идентификатор видеозаписи. Итак сам метод API называется
- video.createComment
Он имеет следующие параметры
- vid - идентификатор видеозаписи, для которой необходимо оставлять комментарий.
- owner_id - идентификатор пользователя, который оставляет комментарий для видеозаписи, по умолчанию текущий пользователей
- message - текст сообщения комментария, но не меньше 2-х символов.
Здесь обязательными параметрами являются только 2 , это — vid, то есть идентификатор видеозаписи, для которого необходимо оставлять комментарий, а также message - текст сообщения комментария. Кроме этого, для того, чтобы пользователь мог добавлять комментарий к видеозаписи, для нашего приложения должны стоять права с битовой маской не менее 16.
Далее на вкладку «Видеозаписи» в нашей программе я добавил еще несколько следующих компонентов
- TEdit
- TListBox
- TButton
TEdit - для того, чтобы вводить текст сообщения (текст комментария), а TListBox выводится список идентификаторов видеозаписей. Да, в статье, где я рассказывал про то, как найти видеозаписи в ВК по определенному запросу , я дописал код, чтобы в наш TListBox выводились отдельно идентификаторы видеозаписей, а в той статье мы их склеивали с идентификатором пользователя. После того, как я получаю список видеозаписей, на кнопку «Отправить» (на событие OnClick) я написал следующий код
procedure TForm1.Button28Click(Sender: TObject);
var
sig:string;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmessage='+AnsiToUtf8(Edit10.Text)+'method=video.createCommentv=3.0vid='+ListBox15.Items[ListBox15.ItemIndex]+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=video.createComment');
PostVK.Add('vid='+ListBox15.Items[ListBox15.ItemIndex]);
PostVK.Add('message='+AnsiToUtf8(Edit10.Text));
PostVK.Add('format=XML');
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
PostVK.Free;
ShowMessage(logVK);
except
on e:Exception do
begin
PostVK.Free;
end;
end;
end;
Здесь я использую функцию AnsiToUtf8 для преобразования в UTF8 кодировку текста комментария, так как именно такая кодировка используется на сервере. А также необходимо составить правильно подпись безопасности в алфавитном порядке. Кроме этого часто может вылетать вот такая вот ошибка при отправке сообщения (ошибка API)
- Permission to perform this action is denied by user
Что означает то, что для нашего приложения запрещен доступ, то есть запрещено оставлять комментарии. Но раз данное сообщение появляется, значит мы выполняем все правильно, только лишь мы не можем оставить комментарий, так как у нашего приложения недостаточно прав доступа. А ответ с сервера об успешной выполненной работе придет в виде идентификатора комментария.
Остальные ошибки могут быть следующими
Код ошибки | Описание |
---|---|
1 | Unknown error occurred. |
2 | Application is disabled. Enable your application or use test mode. |
4 | Incorrect signature. |
5 | User authorization failed. |
6 | Too many requests per second. |
7 | Permission to perform this action is denied by user |
14 | Captcha is needed |
100 | One of the parameters specified was missing or invalid |
Ошибка 14 Captcha is needed, которая также может часто возникнуть, если пользователь будет ну очень часто отправлять, например, комментарии в одну и ту же видеозапись, это такая вот защита от спама.