Здравствуйте, давненько я ничего не писал в блог, сами понимаете работа, учеба, да и куча других дел есть, вот хотел бы наверстать упущенное и в этой статье вернуться к проекту 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('http://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('http://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 мы будем рассматривать работу с методами для видеозаписей.

Полный проект можно скачать тут

Автор статьи - Andrey53

Метки: , , , , ,




К записи “Проект VK API в Delphi. Получение информации по видеозаписям” оставлено комментариев: 4.

  1. Redfern.89:

    скоро доделаю свой компонент на вк апи 3.0 =))

  2. А зачем мудрить с парсингом, если можно TRegExpr заюзать?

  3. Andrey53:

    to GlooK ну правильно составить регулярное выражение тоже надо уметь, хотя через регулярки намного быстрее

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*