Здравствуйте, давненько я ничего не писал в блог, сами понимаете работа, учеба, да и куча других дел есть, вот хотел бы наверстать упущенное и в этой статье вернуться к проекту VK API в Delphi. А точнее если быть мы закончили на том, что получали список идентификаторов видео файлов из социальной сети вконтакте. Теперь же мы получим информацию о данном видео файле. То есть результатом будет массив из количество найденных видеозаписей и объектов. Мы получим примерно следующие данные — название, описание, ключевые слова, дата создания, картинку и так далее. Конечно не обязательно все данные парсить и получать, а только те, которые Вам необходимы. Теперь перейдем к самому методу API, который называется
- video.get
Скажу сразу, чтобы использовать данный метод необходимо, если у приложения установлены права доступа с битовой маской не меньше 16. Теперь приступим к описанию самих параметров данного метода.
- api_id — идентификатор приложения
- sig - подпись безопастности
- v - версия API, текущая 3.0, в документации ВК — 2.0
- videos - идентификаторы пользователя с идентификаторами видеозаписей, перечисленные нижним подчеркиванием. Пример — 4363_136089719
- uid - идентификатор пользователя, видеозаписи которого необходимо вернуть, если задан параметр videos, то uid не учитывается
- width - требуемая ширина, получаемых видеозаписей
- count - количество возвращаемых видео записей
- offset - смещение отностительно первой найденной видео записи для выборки определенного подмножества данных о видеозаписях
- format - формат возвращаемых данных (XML или JSON)
- test_mode — если равен 1, то разрешает тестовые запросы к данным приложения.
Теперь вернемся к тому, чтобы получить информацию о видеозаписи. Для этого я немного переделал получение идентификаторов видео в TListBox, так как, если Вы помните, нам необходимо в параметре videos передать идентификатор пользователя, который отправлял видео и через нижнее подчеркивание (_) идентификатор видео самого. Только не перепутайте порядок, так как если сначала будет идти идентификатор видео, а потом через нижнее подчеркивание идентификатор пользователя, который отправил данное видео, то ошибки сервер API никакой не выдаст, а возвратит только количество видео, но никаких другой информации по данному видео не будет. Я переделал следующим образом поиск видео по определенному запросу
procedure TForm1.Button25Click(Sender: TObject);
var
sig,s:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=video.searchq='+AnsiToUtf8(Edit8.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.search');
PostVK.Add('format=XML');
PostVK.Add('q='+AnsiToUtf8(Edit8.Text));
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
PostVK.Free;
ListBox14.Clear;
i:=1;
while (i<=length(logVK)) do
begin
if pos('<id>',logVK)<>0 then
begin
s:='';
s:=Pars(logVK,'<owner_id','</owner_id>',0)+'_'+Pars(logVK,'<id','</id>',0);
delete(logVK,1,pos('</owner_id>',logVK));
ListBox14.Items.Add(s);
i:=0;
end;
inc(i);
end;
except
on e:Exception do
begin
PostVK.Free;
end;
end;
end;
Как видите вот этой строчкой
s:=Pars(logVK,'<owner_id','</owner_id>',0)+'_'+Pars(logVK,'<id','</id>',0);
мы собираем идентификатор пользователя, который отправил (добавил) видео, а также идентификатор самого видео в одну переменную. Также хочу напомнить, что для работы с данным методом необходимы права с битовой маской не меньше 16. Далее на форму я установил еще 1 TButton и на событие OnClick написал следующий код
procedure TForm1.Button26Click(Sender: TObject);
var
sig:string;
i:integer;
begin
try
PostVK:=TStringList.Create;
sig:=Pchar(LabelMid.Caption)+'api_id=1918788format=XMLmethod=video.getv=3.0videos='+ListBox14.Items[ListBox14.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.get');
PostVK.Add('format=XML');
PostVK.Add('videos='+ListBox14.Items[ListBox14.ItemIndex]);
PostVK.Add('sid='+Pchar(LabelSid.Caption));
logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
PostVK.Free;
ShowMessage(LogVK);
i:=1;
except
on e:Exception do
begin
PostVK.Free;
end;
end;
end;
Нам остается только пропарсить и получить нужную нам информацию. Не забывайте составлять подпись безопасности в алфавитном порядке. Далее по проекту VK API в Delphi мы будем рассматривать работу с методами для видеозаписей.