Здравствуйте, вот все я и дальше продолжаю ковырять 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('http://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

Хочу заметить, что сейчас очень многие в своих квартирах делают все различные виды перепланировок: вставляют батареи дополнительные в стены, трубы и многое другое. Так вот, чтобы все это встроить в стены, бетон существует такое понятие как алмазное сверление отверстий, которое может делать отверстия в стенах, фундаментах почти разных размеров.

Полный исходник проекта качаем тут

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

Метки: , , , , ,




К записи “Проект VK API в Delphi. Получение сообщений со стены” оставлено комментариев: 2.

  1. Andrey:

    Не думали ли Вы о написании нормального парсера ответов сервера? Чтоб, например, получив ответ в формате JSON или XML, этот ответ преобразовывался в какую-нибудь структуру, удобную для работы в Delphi. Чтоб, например, получив ответ от wall.get можно было бы к нему обратиться так: Response.Fields(‘Post’)[2].Fields(‘from_id’).

  2. Andrey53:

    to Andrey, здравствуйте теска, если честно не думал, но идея отличная, наверное необходимо браться за написание такой идеи

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

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

*