Здравствуйте, давненько я не писал про проект VK API в Delphi, на этот раз хочу продолжить серию статей про данный проект, тем более, что еще достаточно много не рассмотрено функций по работе с VK API. В последних статьях про VK API в Delphi мы рассмотрели функции API по работе с видеозаписями: как получить список видеозаписей по конкретному запросу пользователя и как узнать информацию по конкретной видеозаписи, подробную информацию. На этот раз я хотел бы поговорить о том, как можно получить список видеозаписей, на которых отмечен сам пользователь. Функция довольно простая, да и в основном параметров в ней нету, всего 3 параметра и те, которые не обязательные для нее. Давайте подробнее рассмотрим данные параметры функции для получения видео, на которых отмечен пользователь. Функция называется
-
video.getUserVideos
Теперь по ее параметрам
- uid - идентификатор пользователя, для которого необходимо получать список видео, на которых он отмечен
- offset - смещение необходимое для выборки определенного количества видеозаписей
- count - количество видеозаписей, которое необходимо получить, но не больше 100.
Ну естественно, есть такие замечательные параметры, которые Вам также необходимо будет указать, это, например format и указать в каком формате Вам выводить данные в XML или JSON.
Итак, для успешной работы данной функции VK API, нам потребуется еще, чтобы у нашего приложения было установлены права с битовой маской не меньше 16. После того как подготовим все данные для отправки их на сервер VK API, при правильной их отправке, нам еще необходимо составить подпись безопасности в алфавитном порядке, не забывайте про это, мы получим ответ с сервера в виде массива объектов. В данный массив объектов будет входить следующее:
- id
- title
- description
- owner_id
- duration
- date
- thumb
Данные объекты придут нам в ответе с сервера. По названием можно определить, что это за такие объекты. Теперь Вам останется только лишь пропарсить Ваш ответ и получить нужную информацию, в данном случае мы пропарсим title-объект, то есть название видео, на котором отмечен пользователь. Да кстати на вкладку «Видеозаписи» я поместил 2 компонента
- TButon
- TListBox - будет отображаться название видеозаписей, на которых отмечен пользователь
- TEdit - для того, чтобы вводить идентификатор пользователя, для которого необходимо посмотреть все видеозаписи, на которых он отмечен
Теперь на событие OnClick мы напишем следующий код, которых будет отправлять на сервер VK API данные и получать ответ, а также обрабатывать его и все называние видеозаписей, на которых отмечен пользователь будет добавлять в TListBox
procedure TForm1.Button27Click(Sender: TObject);
var
sig:string;
begin
try
ListBox13.Clear;
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=video.getUserVideosuid='+Edit9.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=video.getUserVideos');
PostVK.Add('uid='+Edit9.Text);
PostVK.Add('format=XML');
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
PostVK.Free;
repeat
ListBox13.Items.Add(Utf8ToAnsi(Pars(logVK,'<title','</title>',0)));
Delete(logVK,1,pos('</title>',logVK)+length('</title>'));
until pos('title',logVK)=0;
except
on e:Exception do
begin
PostVK.Free;
end;
end;
end;
Не забываем использовать функцию перекодировки Utf8ToAnsi, но это зависит от версии Indy, которую Вы используете.
Ошибки, которые могут возникнуть при отправке запроса на сервер
Код ошибки | Описание |
---|---|
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 |
100 | One of the parameters specified was missing or invalid |
Полный исходник всего проекта можно скачать тут