Проект VK API в Delphi. Получение сообщений со стены

4 минуты на чтение

Здравствуйте, вот все я и дальше продолжаю ковырять API ВК. На этот раз мне почему-то захотелось продолжить поработать с расширенными методами в ВК API. На этот раз я решил поработать со стеной пользователя, а в частности как получить сообщения со стены пользователя. Тут конечно есть небольшая «загвоздочка» насчет того, что сообщения для пользователей могут быть не только текстовые, но еще, например, и в виде картинки, в виде приложения, музыки, видео файлов. Но скажем спасибо ВК, он предоставляет возможно и получать эти данные, не совсем эти данные, а например, для видео url-песни или для фотографии — url-фотографии. Также здесь есть не очень хорошо, что получение сообщений со стены по умолчанию идет только постранично, но омжно это дело увеличить до 100, но не больше, так что тут конечно не сильно удобно, если сообщений у Вас на стене больше 100, то придется смещаться на следующие страницы и тогда за несколько раз получать эти самые сообщения со стены. Теперь давайте поговорим о самом методе API, который позволит нам получить сообщения со стены, это

  • wall.get

Данный метод имеет следующие параметры

  • api_id - идентификатор приложения
  • sig - подпись безопасности
  • v - версия API (текущая 3.0, в документации ВК написано 2.0)
  • owner_id - идентификатор пользователя, для которого необходимо получать список сообщения со стены, по умолчанию текущий пользователь
  • offset - смещение, для получения необходимо подмножества сообщений, что я и говорил, если у Вас сообщений больше 100
  • count - количество сообщений, получаемых за 1 раз, не больше 100
  • format - XML или JSON
  • test_mode - если равен 1, то разрешает тесовые запросы к данным приложения

Итак немного о параметрах поговорили, первые 3 параметра являются обязательными для посылки запроса. Результатом будет массив объектов типа

  • from_id - от кого сообщение
  • to_id — для кого сообщение
  • date - дата отправки
  • text - текст сообщения
  • id - идентификатор сообщения
  • online - онлайн ли отправитель

Также если на стену был отправлен объект граффити например или песня, то также будет включен объект медиа в ответ на запрос

Виды типов объектов media: app, graffiti, video, audio, photo, posted_photo;

Объект media содержит поля:

  • type
  • item_id
  • owner_id (для всех, кроме graffiti)
  • thumb_src (для всех, кроме audio и video)
  • app_id (только для app).

Также здесь я использовал получение ответа в формате JSON, так как ответ в формате XML приходил с разными тегами, да и в документации API опять «накосячили» показали пример ответа в формате XML, что текст сообщения содержится в <text>текст сообщения<text>, но на самом деле, тег, то закрывающий, а я начал парсить данные как показано в документации, затем просто решил поменять формат ответа с сервера. Также я добавил новую вкладку, которую назвал «стена», дальше будем там еще размещать то, как можно отправить кому-то сообщения, удалять сообщения со стены и восстанавливать их. Далее на кнопку события OnClick для получения списка сообщений со стены я написал следующий код

procedure TForm1.Button15Click(Sender: TObject);
var
 sig:string;
 i:integer;
begin
   try
    PostVK:=TStringList.Create;
    sig:=Pchar(LabelMid.Caption)+'api_id=1918788count=100format=JSONmethod=wall.getv=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=wall.get');
    PostVK.Add('format=JSON');
    PostVK.Add('count=100');
    PostVK.Add('sid='+Pchar(LabelSid.Caption));
    logVK:=IdHTTP1.Post('https://api.vkontakte.ru/api.php',PostVK);
    i:=1;
    ListBox6.Clear;
    ShowMessage(logVK);
    while i<=length(logVK) do
     begin
      if pos('"text":',logVK)<>0 then
       begin
        ListBox6.Items.Add(Utf8ToAnsi(Pars(logVK,'"text":','"',0)));
        Delete(LogVK,1,pos('"text"',logVK));
        i:=0;
       end;
      inc(i);
     end;
    PostVK.Free;
   except
    on e:Exception do
     PostVK.Free;
   end;
end;

Не забывайте создавать подпись безопасности в алфавитном порядке, иначе будет просто-напросто ошибка в ответе.

Будем работать и дальше по методам ВК API

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Здравствуйте, давненько я не писал про проект VK API в Delphi, на этот раз хочу продолжить серию статей про данный проект, тем более, что еще достаточно много не рассмотрено функций по работе с VK API. В последних статьях про VK API в Delphi мы рассмотрели фун...
Здравствуйте, вот решил наконец-то вернуться к написанию статей о проекте VK в Delphi. Давненько я не писал, но вот решил закончить серию статье по работе со стеной пользователя. На этот раз мы рассмотрим как можно удалять сообщения со стены пользователя. По у...
Здравствуйте, вот все продолжаю мучать VK API в Delphi. На этой раз «перст пал» на расширенные методы API. К данным методам относятся работа с личными сообщениями работа со стеной пользователя работа с фотографиями и альбомами фотографий В данный момент хоте...