Yii 1.1: webfeed

Webfeed creator (RSS, RDF and Atom)
6 followers

This extension is allows you to create webfeeds (Atom 1.0 and RSS 1.0 and 2.0)

File checksums

  • 6ff18978ae9e3197a7767c8f9b56705b webfeed-1.0b.tar.bz2
  • 6a54a2a7faca5cee9ba2d7c6168835ba webfeed-1.0b.zip

Resources

Documentation

You can play like this in your action, and you'll get a valid (as per http://validator.w3.org/feed/check.cgi) RSS feed. I tried to follow the specifications as close as I understand them. The validator will throw some recommendations which are not in the specifications. Also, extensions/modules/etc. are not implemented yet (just the strict specs). Same comments apply to Atom 1.0 and RSS 1.0.

Since I tried to follow RFCs and specifications as close as possible, these classes are sometimes picky. For instance, you must specify URIs so they follow the respective RFC's rules, so http://www.microsoft.com is not valid, but http://www.microsoft.com/ is fine (notice the ending slash)

You should put the code inside the run() method of an action, and don't throw anything else to the client (dumpXML is a method which should take care of the XML code for you)

Requirements

  • Yii 1.0 or above

Installation

  • Extract the release file under protected/extensions

Usage

See the following code example for RSS 2.0:

// Import the extension's namespace
Yii::import('application.extensions.webfeed.EWebFeed');
// Instantiate a EWebFeed object, passing an instance of a feed type class, in this case RSS_2_0 (for RSS 2.0)
$feed = new EWebFeed(new RSS_2_0("Hello", "Hello world", "http://www.kernel.org/"));
// here you could stop, since the basic data for the channel is configured. However, if you want, you can add more fields:
$feed->charset = 'UTF-8';
$feed->pubDate = time();
$feed->skipDays = array('Monday');
$feed->ttl = 300;
$feed->addCategory('standards/xsl/implementations','http://www.superopendirectory.com/');
$feed->addCategory('standards/xsl/specifications','http://www.superopendirectory.com/');
// Now add the news items:
$feed->addItem('item 1', 'http://www.microsoft.com/', 'Mocosoft');
// Again, here you could stop with the item, since addItem adds the basic data. But if you want, you can add more fields, using the items array, starting with 0 for the first feed item:
$feed->items[0]->addEnclosure('http://www.scripting.com/mp3s/weatherReportSuite.mp3', 12216320, 'audio/mpeg');
$feed->items[0]->addEnclosure('http://www.scripting.com/mp3s/weatherReportSuite2.mp3', 12216320, 'audio/mpeg');
$feed->items[0]->addCategory('standards/xsl/implementations', 'http://www.superopendirectory.com/');
$feed->items[0]->addCategory('standards/xsl/specifications', 'http://www.superopendirectory.com/');
$feed->items[0]->addSource('AppleSurf', 'http://www.myapplemenu.com/cgi-bin/surfView.cgi?category=applesurf&mainfull=1000&fmt=scripting&template=scripting');
$feed->items[0]->pubDate = time()-86400;
$feed->items[0]->author = "billgates@microsoft.com";
$feed->items[0]->comments = 'http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290';
$feed->items[0]->guid = strval(md5(uniqid()));
$feed->items[0]->guidIsPermaLink = false;
// Add another item:
$feed->addItem('item 2', 'http://www.kernel.com/', 'Linus');
// And add more data to the feed:
$feed->addImage('Hallo', 'http://yiiframework.com/somepic.jpg', 'http://www.kernel.org/');
$feed->addCloud('data.ourfavoritesongs.com', 80, '/RPC2', 'ourFavoriteSongs.rssPleaseNotify', 'xml-rpc');
// Dump the XML:
$feed->dumpXML();

See the following code example for Atom 1.0:

$content =<<<EOP
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget felis non leo ullamcorper vestibulum. Nulla ipsum. Aliquam vitae nisl. Nulla pretium auctor elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In augue. Maecenas laoreet vehicula odio. Donec metus. Aenean et augue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi blandit vulputate sapien. Suspendisse potenti. Nam sit amet lorem fermentum enim commodo vulputate. Vestibulum varius. Duis euismod turpis nec sem. Donec eros lorem, tincidunt ut, varius eu, scelerisque a, nunc. Donec et metus. Morbi sed elit.
</p>
<p>
Suspendisse fringilla cursus odio. Donec eros nulla, scelerisque non, vulputate vitae, eleifend at, velit. In ornare, lectus et congue adipiscing, erat elit mollis quam, eu varius mauris neque sit amet pede. Morbi pulvinar egestas ipsum. Nulla a dui. Praesent sed nibh non ipsum auctor pulvinar. Fusce leo. Maecenas nec sapien. Sed eu enim. Proin non tellus at metus placerat ullamcorper. Nam semper augue non nunc. Curabitur nulla dolor, tempus eget, porttitor ac, vehicula nec, mi.
</p>
EOP;
 
Yii::import('application.extensions.webfeed.EWebFeed');
$feed = new EWebFeed(new Atom_1_0("http://www.kernel.org/", "Hola niños & überalles", time(), 'http://localhost/yii-svn/demos/helloworld2/'));
$feed->addAuthor('MetaYii', 'http://www.yiiframework.com/', 'metayii@yiiframework.com');
$feed->addLink('http://localhost/yii-svn/demos/helloworld2/', 'alternate', '', '', 'Link');
$feed->addCategory('X', '', 'X');
$feed->addCategory('MS', 'http://www.microsoft.com/', 'Mocosoft');
$feed->addContributor('Mr. T');
$feed->addContributor('Uncle Lucas', '', 'lucas@ms.com');
$feed->addContributor('Sancho Panza', 'http://www.sancho.es/', 'lucas@ms.com');
$feed->addGenerator('Yii Framework', '1.0', 'http://www.yiiframework.com/');
$feed->addRights('(c) 2008 Qiang & Wei');
$feed->addSubtitle('Something');
 
$feed->addEntry('http://www.www.com/1', time(), 'xxx', 'yyy');
$feed->items[0]->addAuthor('MetaYii', 'http://www.microsoft.com/', 'metayii@yiiframework.com');
$feed->items[0]->setPublished(time()-86400);
$feed->items[0]->setUpdated(time());
$feed->items[0]->addContent($content, 'xhtml');
$feed->items[0]->addLink('http://www.example.com/');
//$feed->items[0]->addSummary('Lore ipsum');
$feed->items[0]->addCategory('lore');
$feed->items[0]->addCategory('ipsum', 'http://www.ipsum.com/', 'Ipsum');
$feed->items[0]->addContributor('Qiang');
$feed->items[0]->addContributor('Wei', 'http://www.wei.cn/', 'wei@yiiframework.com');
$feed->items[0]->addSource('http://www.cnn.com/2008-12-01/12', 'Adasdasd', time());
$feed->dumpXML();

Change Log

20090630 (1.0b)

  • Fixed typo in RSS_2_0 so it now should work.
  • Updated the example for RSS 2.0, since it was based on a previous version (sorry, the code is 6 months old and was untouched since January)

20090629 (1.0)

  • Initial release.

Total 7 comments

#3385 report it
at 2011/04/08 07:59am
Hey im new here

Sup guys,

Im new here im just posting to say Hey.

How is everyone?

#754 report it
Inkvizitor at 2010/03/04 10:10am
Bugs

Many bugs, not usable

#786 report it
OriginalCopy at 2010/02/28 09:50am
Poor design

Oh and forgot to mention that: write unit tests for your extensions.

#787 report it
OriginalCopy at 2010/02/28 09:49am
Poor design

Sorry to seem like being an asshole, and first of all thanks for your time, but

The extension is poorly designed from the ground up. You don't neet to require_once everything (or should not need to). If you do, then implement an abstract class for features shared across rss and atom..

Then you should use Yii::import() for everything.

Also, Atom generation doesn't work at all. Try running your own example.

#979 report it
MetaYii at 2010/01/15 10:39am
Please please please

Please reporte bug reports in the forum!!!

#980 report it
sdietz at 2010/01/15 10:35am
Throws errors

This extension does not work very well.

Tested with:

  • Vanilla install of Yii (1.0.11)
  • The RSS 2.0 example as per the documentation of this extension

It throws various exceptions concerning used constants, and even after fixing the use of the class constants, some errors concerning missing indices of $part(s).

I'd rather recommend using the Feed Component of the Zend framework for your RSS and Atom feed needs.

I'll post a tutorial on this topic in the cookbook soon(ish).

Best regards,

sdietz

#1191 report it
crioz at 2009/11/05 03:55am
little BUG found

When you generate FEED and add this to MS outlook it always took buffered RSS + new records from Database. This duplicates records in RSS folder in MS outlook. Need to clear buffer before RSS FEED genereation but i cant find where to do this ! May be author can help

Leave a comment

Please to leave your comment.

Create extension
  • Yii Version: 1.1
  • License: New BSD License
  • Developed by: MetaYii
  • Category: Web Service
  • Votes: +3 / -5
  • Downloaded: 1,453 times
  • Created on: Jun 21, 2009
  • Last updated: Jul 4, 2009