tags:

views:

366

answers:

3

Hi Guys,

I need an RSS Feed generator; should I use a class or should I generate the feed myself?

If I should generate it myself, where is a good place to get comprehensive specs of the standards?

If not, are there any good classes out there to do it and do it quickly and do it well?

+1  A: 

This page has a decent generator meeting 1.0/2.0/ATOM spec so you could either use it (PHP5) or just get a general idea of what is needed:

RSS2Writer

The usage notes at the bottom are fairly detailed and you don't even have to download to view source.

cballou
Hi cballou, your link isn't working...
Antony Carthy
@Antony - fixed the link. not quite sure what happened earlier but I had just woken up :)
cballou
+3  A: 

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.

PatrikAkerstrand
+2  A: 

PHP Universal Feed Generator (supports RSS 1.0, RSS 2.0 and ATOM)

Features:

* Generates RSS 1.0, RSS 2.0 and ATOM 1.0 feeds
* All feeds are are validated by feed validator.
* Supports all possible feed elements.
* Simple and easy to define channel and feed items
* Implements appropriate namespaces for different versions.
* Automatically converts date formats.
* Generates UUID for ATOM feeds.
* Enables usage of subtags and attributes. (example: image and encloser tags)
* Completely Object oriented in PHP5 class structure.
* Handles CDATA encoding for required tags.
* Nearly same code for generating all kinds of feed

Example (taken from the linked page and stripped the comments)

<?php
  include("FeedWriter.php");
  $TestFeed = new FeedWriter(RSS2);
  $TestFeed->setTitle('Testing & Checking the RSS writer class');
  $TestFeed->setLink('http://www.ajaxray.com/projects/rss');
  $TestFeed->setDescription(
        'This is test of creating a RSS 2.0 feed Universal Feed Writer'
  );
  $TestFeed->setImage('Testing the RSS writer class',
        'http://www.ajaxray.com/projects/rss',
        'http://www.rightbrainsolution.com/images/logo.gif');
    mysql_connect("server", "mysql_user", "mysql_password");
    mysql_select_db("my_database");
    $result = mysql_query("Your query here");
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        $newItem = $TestFeed->createNewItem();
        $newItem->setTitle($row['title']);
        $newItem->setLink($row['link']);
        $newItem->setDate($row['create_date']);
        $newItem->setDescription($row['description']);
        $TestFeed->addItem($newItem);
    }
  $TestFeed->genarateFeed();
?>
Peter Lindqvist