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.
Bugs
Many bugs, not usable
Poor design
Oh and forgot to mention that: write unit tests for your extensions.
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.
Please please please
Please reporte bug reports in the forum!!!
Throws errors
This extension does not work very well.
Tested with:
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
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
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.