There will soon be a component for Zend Framework called Zend_Feed_Writer that looks pretty interesting. Here's an excerpt from a feed of one of (perhaps the?) developer of that component, Padráic Brady (link to the blog post). He says that it's currently in the Zend Framework Incubator, but that a first official version should be ready by the end of the weekend:
Zend_Feed_Writer
The new kid on the block, to be added
in Zend Framework 1.10, is
Zend_Feed_Writer. A bit like the older
Zend_Feed_Builder classes, its purpose
is to generate Atom 1.0 and RSS 2.0
feeds. The difference is that, like
its sibling Zend_Feed_Reader, it is
standards aware and operates entirely
using PHP's DOM.
Why another feed generation component?
The problem is somewhat similar to the
one that Zend_Feed_Reader solved.
Generating an RSS and Atom feed is far
more involved than sticking a bunch of
elements together - each standard has
its quirks, its unique features, and
its own set of best practices outside
of the standards. Using
Zend_Feed_Builder, you relied on two
things - repetition and validation.
Moving away from its core focus
required more work, even to the extent
of subclassing, and you were always at
the mercy of misinterpreting a
standard.
Zend_Feed_Writer builds on the simple
API of Zend_Feed_Reader (using setters
rather than getters) and the concept
of having the component understand the
standards (so you don't have to). The
component is split across two class
types - a base data container to store
feed data and ensure it conforms to
expected formats, and a renderer to
actually generate the feeds and
provide feedback on standards
adherence. For example, in Atom 1.0
the omission of a title will generate
an exception - a title is an
obligatory element under the Atom 1.0
standard. While this could be
interpreted as a nuisance, the fact is
that an invalid Atom 1.0 feed is worse
than useless. Better you are irritated
now, than later when an online
validator calls you rude names :-).
The net result of this approach is
that you focus on the data, and let
Zend_Feed_Writer worry about what
elements and attributes to use. It
should, in theory (always a grand
thing), be impossible for
Zend_Feed_Writer to produce an invalid
feed.
Of course, we also throw in the
concept of Extensions, as with
Zend_Feed_Reader, allowing you to add
support for RSS and Atom extensions
more dynamically without the need for
subclassing or API arm twisting.
If you go looking for
Zend_Feed_Writer, it's currently in
chunks in the Incubator. I should have
it entirely integrated and functional
over the weekend. You can however give
it a shot for writing Atom 1.0 feeds
so long as you stick to the core
elements (i.e. most blog feeds). RSS
2.0 support is the last piece I need to complete in full.