уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Несколько раз в своем блоге я упоминал про обработку RSS-каналов средствами AJAX API Google. Удобный и экономичный способ разобрать RSS-канал любой сложности, в т.ч. и “завернутый” в FeedBurner. Если необходимо быстро получить список постов канала, провести поиск определенного поста в содержимом канала и т.д. ИМХО лучшего API и не надо.

Сегодня рассмотрим работу с Windows RSS Platform для управления RSS-каналами. Этот API позволяет не только получить данные с конкретного канала, но и довольно удобно управлять целым списком каналов, распределять их по папкам, загружать содержимое и т.д. В общем с помощью этого API можно разработать полноценный RSS Reader. Но обо всем по порядку.

Несколько общих слов по API

 

Начнем с того, где мы можем увидеть Windows RSS Platform в действии? Например, в Windows Live Mail:

winRSS

На рисунке показан RSS-канал блога “Delphi в Internet”, который находится в папке “Программирование”. Мы можем просмотреть содержимое канала, добавить любую структуру папок для удобного расположения каналов и т.д.

Теперь самое время рассмотреть объектную модель этого API. Она показана на рисунке ниже:

winRSS_OM

Самым верхним элементом структуры является FeedManager – менеджер управления RSS-каналами. FeedManager предоставляет информацию по папкам, возвращает ссылку на интерфейс корневой папки (RootFolder), возвращает ссылки на интерфейсы отдельных каналов (Feed).

В свою очередь элемент модели Feed содержит информацию по отдельному каналу – язык канала, автор, ссылку на XML и т.д.

Как видите по рисунку каналы могут находится как в папках (тогда доступ к ним будет осуществляться через FeedManager –> FeedFolder –> Feed), так и находится в корне (тогда доступ к каналу будет осуществляться через FeedManager –> Feed).

В целом структура довольно простая. Что касается ограничений, то Windows RSS Platform может использоваться в ОС не ниже Windows XP SP2 с установленным IE 7 или выше.

Теперь перейдем к разработке собственного RSS Reader’а.

Получаем модуль с описанием всех объектов API

 

Запускаем Delphi и в главном меню IDE выбираем: Component –> Import Component… –> Import a Type Library:

winRSS_1

Жмем Next>>. Выбираем в списке Microsoft Feeds 2.0. Object Library:

winRSS_2

Жмем Next>>. На следующей вкладке отмечаем “Generate Component Wrappers”, а также, если необходимо, указываем на какую вкладку палитры компонентов поместить компоненты API:

winRSS_3

Далее жмем Next>>, Finish и в итоге получаем модуль Feeds_TLB.pas, c описанием всех интерфейсов и объектов. Его мы и будем в дальнейшем использовать.

Теперь создаем новый проект Delphi, подключаем в uses только что полученный модуль и начинаем работу с первым интерфейсом – IFeedsManager.

Работа с IFeedsManager.

 

IFeedsManager – это объект верхнего уровня Windows RSS Platform, который предоставляет методы для получения списка каналов на которые подписан пользователь.

Рассмотрим методы интерфейса.

Метод RootFolder — метод возвращает ссылку на интерфейс, содержащий информацию о корневой папке.

Пример использования метода:

var Folder: IFeedFolder;
    FeedManager: TFeedsManager;
begin
  FeedManager:=TFeedsManager.Create(self);//создаем объект менеджера
  Folder:=FeedManager.RootFolder as IFeedFolder; //получаем ссылку на интерфейс IFeedFolder
  ShowMessage(BoolToStr(Folder.IsRoot,true)) //определяем, является ли папка корневой 
end;

 

С использования этого метода начинается вся дальнейшая работа.

Метод ExistsFolder — метод возвращает True в случае, если папка с заданным именем существует. Например, (см. самый первый рисунок в посте) проверим, существует ли в иерархии папок папка с названием «Программирование»:

var Folder: IFeedFolder;
    FeedManager: IFeedsManager;
begin
  FeedManager:=CoFeedsManager.Create;//получили ссылку на интерфейс
  Folder:=FeedManager.RootFolder as IFeedFolder;//получили ссылку на корневую папку
  Folder.CreateSubfolder('Программирование');//создали папку
  if FeedManager.ExistsFolder('Программирование') then //проверили существование папки
     ShowMessage('Папка с таким именем существует')
end;

 

Если Вы попробуете создать две папки с одним и тем же названием, то во втором случае получите исключение «Папка с таким названием уже существует», поэтому перед созданием папок рекомендуется использовать этот метод.

Метод GetFolder — возвращает ссылку на интерфейс папки.  Например, так можно получить ссылку на интерфейс папки “Программирование” и удалить её из списка:

var Folder: IFeedFolder;
    FeedManager: IFeedsManager;
begin
  FeedManager:=CoFeedsManager.Create;
  Folder:=FeedManager.GetFolder('Программирование')as IFeedFolder;//получили ссылку на интерфейс
  Folder.Delete;//удалили папку
end;

 

Метод GetFeed — метод, аналогичен предыдущему, о возвращает ссылку на интерфейс RSS-канала. Например, выполним следующие действия:

  1. Получим ссылку на интерфейс IFeedManager
  2. Добавим в корень новую папку, с названием “Пример”.
  3. В добавленную папку добавим новый RSS-канал
  4. Получим ссылку на этот канал и перечислим некоторые его свойства.
var Feed: IFeed;
    Folder: IFeedFolder;
    FeedManager: IFeedsManager;
begin
  FeedManager:=CoFeedsManager.Create;
  Folder:=FeedManager.RootFolder as IFeedFolder;
  //добавили папку и получили ссылку на интерфейс
  Folder:=Folder.CreateSubfolder('Пример') as IFeedFolder;
  //создали новый канал
  Folder.CreateFeed('WebDelphi','http://feeds.feedburner.com/myDelphi?format=xml');
  Feed:=FeedManager.GetFeed('Пример\WebDelphi')as IFeed;//получили ссылку на канал
  Feed.Download;//загрузили данные канала
  ShowMessage(Feed.Url);//показали URL канала
  ShowMessage(Feed.Title);//показали заголовок канала
end;

 

Метод GetFeedByURL – возвращает ссылку на интерфейс канала по его URL.

Метод AsyncSyncAll — усиленно синхронизирует содержимое всех канало вне зависимости от того, когда в последний раз канал обновлялся.

Метод IsSubscribed проверяет подписан ли пользователь на канал с заданным URL, например,

  if not FeedManager.IsSubscribed('http://feeds.feedburner.com/myDelphi?format=xml') then
    //подписываемся, если не подписаны
    Folder.CreateFeed('WebDelphi','http://feeds.feedburner.com/myDelphi?format=xml')
  else
    ShowMessage('Уже подписаны на канал');

 

Свойство ItemCountLimit – возвращает количество элементов канала, которые будут загружены при обновлении. Свойство только для чтения. Например,

FeedManager:=CoFeedsManager.Create;
ShowMessage(IntToStr(FeedManager.ItemCountLimit));

 

Возвращает значение 2500.

Свойство DefaultInterval – возвращает или устанавливает интервал обновления содержимого каналов. Значение задается в минутах.

Метод DeleteFeed – удаляет RSS-канал из списка. В качестве параметра задается путь к каналу, например:

FeedManager.DeleteFeed('Пример\WebDelphi')

 

Метод DeleteFolder – удаляет папку. В качестве параметра задается путь к папке, например:

FeedManager.DeleteFolder('Пример')

 

Метод BackgroundSync — управляет поведение движка для загрузки содержимого каналов в фоновом режиме. Для управления необходимо передать в параметрах метода один из следующих флагов:

FBSA_DISABLE – отключает фоновую синхронизацию каналов для текущего пользователя

FBSA_ENABLE – включает фоновую синхронизацию канало для текущего пользователя

FBSA_RUNNOW – запускает процесс фоновой синхронизации.

Метод BackgroundSyncStatus — возвращает текущий статус движка фоновой синхронизации. Узнать статус можно по значению флага:

FBSS_DISABLED – фоновая синхронизация отключена

FBSS_ENABLED – фоновая синхронизация включена.

Пример использования методов BackgroundSync и BackgroundSyncStatus:

FeedManager:=CoFeedsManager.Create;
  case FeedManager.BackgroundSyncStatus of
    FBSS_ENABLED:begin
                   ShowMessage('Фоновая синхронизация включена. Запускаем процесс');
                   FeedManager.BackgroundSync(FBSA_RUNNOW);
                 end;
    FBSS_DISABLED: ShowMessage('Фоновая синхронизация отключена');
  end;

 

Метод Normalize — приводит заданный фрагмент XML к стандартному формату. Метод распознает следующие форматы:

  1. Atom Syndication Format 0.3, 1.0
  2. Rich Site Summary (RSS) 0.91, 0.92
  3. RDF Site Summary (RSS) 1.0
  4. Really Simple Syndication (RSS) 2.0

Пример использования этого метода рассмотрим в следующий раз при рассмотрении работы с интерфейсами IFeed и IFeedFolder.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
2 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
angryvitum
angryvitum
12/04/2011 08:31

Хорошее изложение материала! Я публиковал чуть менее подробную статью на VR-Online (h ttp://www.vr-online.ru/blog/rss-dlja-lenivyh-3298)