Здравствуйте, вот все я и дальше продолжаю ковырять 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, что текст сообщения содержится в
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
Похожие записи
Метки: API, Idhttp, VK API, vkontakte, vkontakte API, вконтакте API
Не думали ли Вы о написании нормального парсера ответов сервера? Чтоб, например, получив ответ в формате JSON или XML, этот ответ преобразовывался в какую-нибудь структуру, удобную для работы в Delphi. Чтоб, например, получив ответ от wall.get можно было бы к нему обратиться так: Response.Fields(‘Post’)[2].Fields(‘from_id’).
to Andrey, здравствуйте теска, если честно не думал, но идея отличная, наверное необходимо браться за написание такой идеи