Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_4445.html
 

vkAPI.newsfeed

Опубликовано 25.11.2010 г. 00:48
Давно ничего в блоге не писал, ибо уже наверное недели 3 занимаюсь разработкой плагина для MS Outlook. Весьма увлекательное занятие, скажу я вам. Но речь сейчас пойдет не об этом.
В прошлой статье я привел пример класса, для взаимодействия с API вконтакта. При этом упомянул, что данный программный интерфейс убог. И сделано такое заявление было в связи с тем, что сервис не предоставлял методов API для получения новостей. А мой интерес на тот момент только в этом и состоял, чтобы список этих новостей получить. Я даже в какой то момент после чтения документации решил что я немного дурачок, и пошел погуглить на эту тему, ничего правда не нашел. Затем связался с разработчиком соответствующего плагина для миранды, в надежде узнать, как же они получают новости. Ответ оказался весьма простым - парсинг страницы новостей. Жестокое занятие скажу я вам. Поэтому в своем приложении от этой идеи я отказался, и использовал какой то из старых методов, который выдавал частичные новости. Но свершилось чудо, и примерно через неделю API расширился, и мы получили новый модуль newsfeed. И теперь можем получать всякие разные обновления и новости. Но и тут на мой взгляд весьма странная ситуация: Ответ сервера на запрос новостей представляет собой три блока данных: непосредственно сами новости с указанием владельца (ID), список пользователей и список групп. Элементы обоих списков могут быть владельцем новости. В случае если мы рассматриваем список пользователей, то получаем его ID, имя, фамилию, и аватар. Собственно с точки зрения разработчика, логично предположить, что эти два списка предназначены для снижения нагрузки на сервера. Потому как если я получил просто список новостей с ID владельца, мне наверняка придется вытаскивать и его ФИО скажем, т.к в своем приложении мне все же надо как то назвать пользователя. Поэтому сразу получив имена пользователей мы избавляемся от необходимости посылать дополнительные запросы. Идея конечно хороша, и разработчику лишнего вроде как писать не надо, и серверам проще. Но вот теперь скажите мне, как разработчик в своей программе будет показывать соответствующие сообщения? Предположим, что у нас есть две новости допустим вида "Пользователь ID=xxxx добавил 3 фотографии". Изучив список пользователей мы обнаружили, что пользователи это, например, Маша и Саша. Дак вот как же теперь составлять сообщения? Для Маши надо написать "добавила" а для Саши "добавил". Это я все к чему. Для формирования информативного сообщения мне надо знать пол владельца, следовательно для каждого участника из списка мне все равно придется запросить более подробную информацию. Следовательно количество запросов к серверам не уменьшится, а для разработчика этот список в большинстве случаев бесполезен, ибо не несет достаточной информации. Собственно раз уж блог о программировании (: То используя класс для доступа к API, описанный в предыдущем посте, список новостей можно получать следующим образом:
var ut : int64;
begin
    ut := DateTimeToUnix(startTime);

    with session do begin
        method := 'newsfeed.get';
        urlParams.Values['start_time'] := IntToStr(ut);
        urlParams.Values['filters']     := 'post,photo';
        requestData();
    end;
   
   {$IFDEF DEBUG}
          session.xmlRoot.OwnerDocument.SaveToFile('newsFeed.xml');
   {$ENDIF}
end;
Заметьте, что одним из параметров запроса, является дата-время начиная с которого требуется получать новости. Параметр не обязательный, но если ваше приложение периодически проверяет новости, то каждый раз вам требуется получить только те новости, которые были опубликованы с момента предыдущей проверки. Время указывается в формате Unix Timestamp. Также стоит отметить, что иногда удобно использовать директивы условной компиляции для просмотра полученных данных. Впрочем подобное сохранение данных можно запротоколировать в методе TSession.RequestData и ответ сервера сохранять в файл с именем session.method + '.xml'.
Метки:  vkontakte API 

Комментарии

TDelphiGuru
25.11.2010 в 02:35
спасибо за пост, очень обрадовало расширение API, пусть даже он и не идеален
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно