Несколько раз в своем блоге я упоминал про обработку RSS-каналов средствами AJAX API Google. Удобный и экономичный способ разобрать RSS-канал любой сложности, в т.ч. и “завернутый” в FeedBurner. Если необходимо быстро получить список постов канала, провести поиск определенного поста в содержимом канала и т.д. ИМХО лучшего API и не надо.
Сегодня рассмотрим работу с Windows RSS Platform для управления RSS-каналами. Этот API позволяет не только получить данные с конкретного канала, но и довольно удобно управлять целым списком каналов, распределять их по папкам, загружать содержимое и т.д. В общем с помощью этого API можно разработать полноценный RSS Reader. Но обо всем по порядку.
Несколько общих слов по API
Начнем с того, где мы можем увидеть Windows RSS Platform в действии? Например, в Windows Live Mail:
На рисунке показан RSS-канал блога “Delphi в Internet”, который находится в папке “Программирование”. Мы можем просмотреть содержимое канала, добавить любую структуру папок для удобного расположения каналов и т.д.
Теперь самое время рассмотреть объектную модель этого API. Она показана на рисунке ниже:
Самым верхним элементом структуры является 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:
Жмем Next>>. Выбираем в списке Microsoft Feeds 2.0. Object Library:
Жмем Next>>. На следующей вкладке отмечаем “Generate Component Wrappers”, а также, если необходимо, указываем на какую вкладку палитры компонентов поместить компоненты API:
Далее жмем 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-канала. Например, выполним следующие действия:
- Получим ссылку на интерфейс IFeedManager
- Добавим в корень новую папку, с названием “Пример”.
- В добавленную папку добавим новый RSS-канал
- Получим ссылку на этот канал и перечислим некоторые его свойства.
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 к стандартному формату. Метод распознает следующие форматы:
- Atom Syndication Format 0.3, 1.0
- Rich Site Summary (RSS) 0.91, 0.92
- RDF Site Summary (RSS) 1.0
- 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 и др.
|
Хорошее изложение материала! Я публиковал чуть менее подробную статью на VR-Online (h ttp://www.vr-online.ru/blog/rss-dlja-lenivyh-3298)
angryvitum, спасибо. Думаю, что буду рассматривать этот API дальше — интересная штука :)