Сам по себе модуль разрабатывался для одной цели — выбрать и правильно представить информацию по отдельному элементу фида (записи).
Думаю, что этот модуль пригодится тем, кто разрабатывает или планирует разрабатывать приложения так или иначе взаимодействующие с FeedBurner’ом. Простым примером такого приложения может быть программа для работы с пинг-сервисами. В ней модуль используется как раз для того, чтобы правильно заполнить необходимые поля формы.
Кстати, тот факт, что модуль написан в Lazarus не говорит о то, что Вы не сможете применять его в разработках в Delphi. Думаю, что при незначительных поправках в коде он легко интегрируется в Ваше приложение написанное на Delphi.
Итак, рассмотрим, что представляет из себя модуль и как с ним работать.В модуле определен класс TFeedChanel. Для того, чтобы класс был готов к работе достаточно его создать, используя конструктор:
constructor TFeedChanel.Create(cURL: string); begin inherited Create; GetDocument(cURL); end;
где cURL — это URL вашего фида. При этом URL может описан либо так:
http://feeds.feedburner.com/myDelphi
либо так:
http://feeds.feedburner.com/myDelphi?format=xml
После того, как объект создан в поле FDocument будет содержаться весь XML фида, что избавит нас от лишнего расхода трафика.
Далее можно приступать к использованию свойств.
property ItemsCount: integer read GetItemsCount;
Содержит общее количество записей фида. Количество записей подсчитывается по количеству узлов item в XML-документе.
property FeedAddress: string read FFeedAdress write SetFeedAdress;
URL обрабатываемого фида. При этом, если вы меняете адрес фида, то автоматически пересоздается FDocument, избавляя нас от лишних проверок тот ли фид мы обрабатываем.
property Title[i:integer]:string read GetTitle;
Читает заголовок i-го элемента фида:
function TFeedChanel.GetTitle(const i: integer): string; begin if i>ItemsCount then Exit; Result:=TDOMElement(FDocument.DocumentElement.GetElementsByTagName('item').Item[i]).GetElementsByTagName('title').Item[0].TextContent; {$IFDEF win32} Result:=UTF8Encode(Result); {$ENDIF} end;
Если i>ItemsCount то возвращается пустая строка.
property Description[i:integer]:string read GetDescr;
Описание для элемента фида. При этом выводится всё содержимое тега description. Если Вам необходимо выводить, например, только 255 первых символов, то это свойство необходимо немного доработать.
property Tags[i:integer]:TstringList read GetTags;
Выводит содержимое тегов category каждого элемента фида. Слудует отметить, что у FeedBurner’а нет различий между названием категории и тегов записи — все они оформляются одинаково.
property DirectLink[i:integer]: string read GetDirectLink;
Ссылка назапись в блоге для выбранного элемента фида. Здесь следует отразить следующий момент. Не знаю как у Вас, а у меня в фиде ссылки на посты выглядят следующим образом:
А в блоге все ссылки с ЧПУ, т.е. вида:
Поэтому, чтобы не было разночтений между тем, что содержится в фиде и тем, что есть на самом деле в методе GetDirectLink проводится следующая дополнительная обработка:
[...] with (THTTPSend.Create) do begin HTTPMethod('get',result); case ResultCode of 301,302:begin for j:=0 to Headers.Count-1 do begin if pos('Location: ',Headers.Strings[j])>0 then begin Result:=copy(Headers.Strings[j],11, length(Headers.Strings[j])-10); break; end; end; end; 400:Result:=''; end; end;
т.е, идёт проверка возвращаемого результата. Если есть редирект, то соответственно выбираем ссылку из заголовка (Location), если вернулся код 404 — страницы недоступна и, соответственно ссылку не показываем. Здесь проводится проверка только на редиректы и отсутствие страницы, вы моете доработать проверку под свои нужды, например добавить проверку на код 500 и т.д., но в общем случае, думаю это не потребуется.
property BlogTitle: string read GetBlogTitle;
Выводит название блога (первый тег title в XML-документе)
property BlogURL: string read GetBlogURL;
Выводит URL блога.
Вот пожалуй всй, что можно получить из фида, используя модуль. Кстати, дополниельно можете использовать модуль для работы с API FeedBurner’а (разработан в Delphi)
Скачать модуль можно, как всегда, здесь либо со страницы исходников.