Выводим RSS
Автор: Misha v.3 [03 августа 2007]
Версия: 1.4
Тэги: RSS, XML
Не раз и не два мне приходилось выводить что-то в виде RSS лент, и в какой-то момент мне надоело каждый раз писать пусть простой, но однотипный xml. Поэтому я написал несколько классов, скрывающих интимные подробности RSS формата и позволяющие с помощью нескольких простых методов вывести данные в RSS поток.
# создаём объект Feed и при необходимости сразу определяем поля у <channel/>.
# можно задать любое поле, упомянутое в спецификации RSS 2.0.
# при задании полей типа date можно передавать как объект-date, так и строку с датой в sql формате.
$oFeed[^FeedRss::create[
$.title[RSS title]
$.link[http://$env:SERVER_NAME/]
$.description[RSS description]
# по умолчанию для docs будет выведено
# $.docs[http://blogs.law.harvard.edu/tech/rss]
# по умолчанию для generator будет выведено
# $.generator[^if(def $env:PARSER_VERSION){$env:PARSER_VERSION}{Parser 3}]
# $.copyright[Copyright (c) Vasya Poupkin]
# $.webMaster[vasya@poupkin.ru]
# $.ttl(10)
# $.image[
# <title>Совсем короткий заголовок</title>
# <url>http://$env:SERVER_NAME/link/to/image.jpg</url>
# <link>http://$env:SERVER_NAME/</link>
# <width>100</width>
# <height>100</height>
# ]
# и т.д.
]]
# если при создании объекта не определили поля <channel/> или возникло желание переопределить их -- делаем это
^oFeed.set[
$.title[RSS title ^[updated^]]
]
# добавляем item-ы
# можно задать любое поле, упомянутое в спецификации RSS 2.0.
# при задании полей типа date можно передавать как объект-date, так и строку с датой в sql формате.
# в реалиях вы как-то достанете данные из БД/файла, и несколько раз вызовете метод addItem (например в menu).
^oFeed.addItem[
$.title[Item 1 title]
$.guid[http://item1-link]
$.pubDate[^date::create[2007-08-02 22:33:44]]
$.author[^taint[Name <email@domain.ru>]]
]
^oFeed.addItem[
$.title[Item 2 title]
$.guid[http://item2-link]
$.pubDate[2007-08-01 12:23:34]
$.description[Item 2 description]
$.comments[Item 2 comments]
]
# выводим RSS поток
# перед выводом будет произведена проверка заполненности обязательных полей.
# по умолчанию будут выданы необходимые HTTP заголовки (last-modified, content-type).
^oFeed.print[
$.sVersion[2.0]
# нужно указать, какая Time Zone будет указана при выводе полей типа date.
# согласно RFC822 безопасно использовать зоны GMT, UTC, некоторые зоны USA или сдвиг времени.
# в случае, если указанная зона не совпадает с зоной, в которой работает ваш сервер,
# не забудьте вручную сдвинуть даты в нужную зону при задании полей типа date у channel и item.
$.sTZ[+0300]
# $.sTZ[GMT]
# количество item-ов, которое будет выведено. по умолчанию выводятся все добавленные item-ы.
$.iItemLimit(10)
# если указано, то item-ы будут отсортированы по pubDate. по умолчанию выводятся в порядке их добавления.
$.bOrderItems(true)
# подавить вывод XML declaration.
# $.bOmitXMLDeclaration(true)
# подавить вывод HTTP заголовков.
# $.bOmitHTTPHeaders(true)
]
Типа всё :)
Да, забыл сказать, что для работы этих классов требуется доступность класса dtf.p, а также нагло "украденных" у smalex-а классов ArrayList и ArrayListEnumerator, которые отныне поселились среди полезных пользовательских операторов.
Скачать:
Feed.zip
(15.08.2007
4,5 КБ)
Архив классов для формирования RSS лент с примером использования