Это вторая часть постов, посвященных работе с Windows RSS Platform – API для управления подписками пользователя.
1 часть – “Windows RSS Platform в Delphi. Интерфейс IFeedsManager.”
Сегодня рассмотрим работу с ещё одним интерфейсом, входящим в состав Windows RSS Platform – IFeedFolder.
Интерфейс IFeedFolder используется для управления папками и создания новых подписок на RSS-каналы.
Так как это вторая часть, то будем считать, что Вы уже импортировали заголовочный модуль с описанием всех интерфейсов API и приступим сразу к рассмотрению методов и свойств IFeedFolder.
Метод CreateFeed.
function CreateFeed(const feedName: WideString; const feedUrl: WideString): IDispatch;
Создает новую подписку на канал. Для нового канала необходимо задать feedName – название канала и feedUrl – URL канала. При этом следует учитывать, что имя не должно содержать символа ‘\’ т.к. этот символ зарезервирован системой для указания разделителя пути, а URL фида должен быть абсолютным, т.е. содержать название протокола – http:// или https:// (другие протоколы не поддерживаются).
После создания новой подписки метод возвращает ссылку на интерфейс IDispatch только что созданного фида (IFeed или IFeed2).
Пример использования метода:
var Folder: IFeedFolder; FeedManager: IFeedsManager; begin FeedManager:=CoFeedsManager.Create; //получили ссылку на корневую папку Folder:=FeedManager.RootFolder as IFeedFolder; //создали новую подписку Folder.CreateFeed('WebDelphi','http://feeds.feedburner.com/myDelphi');
Метод CreateSubfolder
function CreateSubfolder(const folderName: WideString): IDispatch;
Создает новую поддиректорию в текущей.
folderName – имя новой папки.
Результат выполнения функции – ссылка на интерфейс новой поддиректории.
Пример. Создадим в корневой директории папку с названием “Delphi” и в этой папке ещё одну с названием “Блоги”:
var Folder: IFeedFolder; FeedManager: IFeedsManager; begin FeedManager:=CoFeedsManager.Create; Folder:=FeedManager.RootFolder as IFeedFolder; Folder:=Folder.CreateSubfolder('Delphi') as IFeedFolder; Folder.CreateSubfolder('Блоги'); end;
Метод Delete
procedure Delete;
Удаляет текущую директорию из списка.
Метод ExistsFeed
function ExistsFeed(const feedName: WideString): WordBool;
Возвращает True, если канал с названием feedName найден в папке. Имя, заданное в параметре feedName не чувствительно к регистру. Например, проверим существование канала WebDelphi в корневой папке:
FeedManager:=CoFeedsManager.Create;
Folder:=FeedManager.RootFolder as IFeedFolder; if Folder.ExistsFeed('webdelphi') then ShowMessage('Канал найден');
Метод ExistsSubfolder
function ExistsSubfolder(const folderName: WideString): WordBool;
Аналогично предыдущему методу проверяет наличие поддиректории с именем folderName и возвращает True, если поддиректория найдена.
Метод GetSubfolder
function GetSubfolder(const folderName: WideString): IDispatch;
Аналогично предыдущему методу возвращает ссылку на интерфейс поддиректории с именем folderName. Также, как и в предыдущем примере, рекомендуется перед использованием метода проверять наличие поддиректории методом ExistsSubfolder.
Метод Move
procedure Move(const newParentPath: WideString);
Перемещает директорию и помещает её по пути newParentPath. При использовании метода следует учитывать, что путь newParentPath должен существовать ДО вызова метода, не должен содержать пустых строк. Так, например, можно перенести директорию «Блоги» из директории «Delphi» и расположить её по новому пути «Программирование/Блоги»:
//получили ссылку на родителя Folder:=Folder.GetSubfolder('Delphi')as IFeedFolder; //проверили существование папки if Folder.ExistsSubfolder('Блоги') then begin //получили ссылку на интерфейс Folder:=Folder.GetSubfolder('Блоги')as IFeedFolder; //переместили папку. Папка "Программирование" была уже добавлена ранее Folder.Move('Программирование'); ShowMessage(Folder.Path); end;
Метод Rename
procedure Rename(const folderName: WideString);
Переименовывает директорию, присваивая её имя folderName.
Пример — переименование директории «Блоги» в «Блогосфера»:
Folder:=FeedManager.RootFolder as IFeedFolder; Folder:=Folder.GetSubfolder('Программирование')as IFeedFolder; if Folder.ExistsSubfolder('Блоги') then begin Folder:=Folder.GetSubfolder('Блоги')as IFeedFolder; Folder.Rename('Блогосфера'); ShowMessage(Folder.Path); end;
Свойство Feeds
property Feeds: IDispatch;
Возвращает ссылку на интерфейс IFeedsEnum, содержащий информацию о коллекции каналов. Пример использования метода для перечисления всех каналов из корневой директории:
FeedManager:=CoFeedsManager.Create; Folder:=FeedManager.RootFolder as IFeedFolder; //получили ссылку на коллекцию FeedList:=Folder.Feeds as IFeedsEnum; //перечислили имена элементов for i := 0 to FeedList.Count-1 do showMessage((FeedList.Item(i) as IFeed).Name);
Метод GetFeed
function GetFeed(const feedName: WideString): IDispatch;
Возвращает ссылку на интерфейс канала с названием feedName. Перед использованием метода рекомендуется проверить наличие канала, используя метод ExistsFeed, например так:
if Folder.ExistsFeed('webdelphi') then begin Feed:=Folder.GetFeed('webdelphi') as IFeed; ShowMessage(Feed.Description); end;
Свойство IsRoot
property IsRoot: WordBool read Get_IsRoot;
Содержит True, если директория является корневой (не имеет родителя)
Свойство Name
property Name: WideString read Get_Name;
Возвращает имя директории
Свойство Parent
property Parent: IDispatch read Get_Parent;
Содержит ссылку на родительский объект.
Cвойство Path
property Path: WideString read Get_Path;
Содержит полный путь до директории. включая её имя. Для корневой директории (см. RootFolder) путь — пустая строка.
Свойство Subfolders
property Subfolders: IDispatch read Get_Subfolders;
Аналогично свойству Feeds (см. выше) содержит ссылку на интерфейс IFeedsEnum для перечисления всех поддиректорий.
Свойство TotalItemCount
property TotalItemCount: Integer read Get_TotalItemCount;
Содержит общее количество элементов всех RSS-каналов, находящихся в заданной директории. Для демонстрации работы этого свойства добавим в директорию «Блогосфера» канал моего блога, затем проверим значение свойства ДО и ПОСЛЕ выполнения метода Download для канала:
Folder:=Folder.GetSubfolder('Программирование')as IFeedFolder; if Folder.ExistsSubfolder('Блогосфера') then begin Folder:=Folder.GetSubfolder('Блогосфера')as IFeedFolder; Feed:=Folder.CreateFeed('WebDelphi','http://feeds.feedburner.com/myDelphi')as IFeed; ShowMessage(IntToStr(Folder.TotalItemCount));//вернет 0 Feed.Download; ShowMessage(IntToStr(Folder.TotalItemCount));//вернет 10 end;
Свойство TotalUnreadItemCount
property TotalUnreadItemCount: Integer read Get_TotalUnreadItemCount;
Свойство возвращает количество непрочитанных элементов всех каналов, находящихся в заданной директории. Для демонстрации работы свойства можно воспользоваться предыдущим примером, заменив в нем TotalItemCount на TotalUnreadItemCount — результат при первом вызове будет тот же. Если же вы откроете IE и отметите несколько постов прочитанными, то значение свойства TotalUnreadItemCount станет меньше.
Вот те свойства и методы интерфейса IFeedFolder, которые мы можем без проблем использовать при работе с RSS-каналами и директориями подписок в Delphi.
Следите за новостями блога в FaceBook — следующая часть будет касаться работы с интерфейсом RSS-канала. Кстати, раз уж речь зашла о соц. сети, то скажу, что ВКонтакте мне нравится меньше, чем FaceBook. Недавно ломал голову над тем как самому удалить страницу ВКонтакте, пока не наткнулся на приведенный линк. Воспользовался одним из предложенных методов…посмотрим удалят ли.
Книжная полка
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
||
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
Heya! I’m at work browsing your blog from my new apple iphone! Just wanted to say I love reading through your blog and look forward to all your posts! Keep up the excellent work!