wiki:FeedObject
Warning: Can't synchronize with repository "(default)" (Unsupported version control system "svn": No module named svn). Look in the Trac log for more information.

Version 1 (modified by elvelind@…, 14 years ago) (diff)

--

Turbogears 0.9 will have support for rss/atom feeds. Here is a quicklook on how to use them. Any suggestions are welcome.

We assume here that we have blog that we want to add and feed to.

First we need to create the feed object. Then we add a get_feed_data method to it. It is this that will be called to populate the feed everytime a user requests it.

from turbogears.feed import Feed
    class Feed(Feed):
        def get_feed_data(self):
          

now lets start adding some things to the feed. We do this by returning a dict from get_feed_data with the elements we wish to have

        def get_feed_data(self):
            return dict(
                title="my fine blog",
                link="http://blog.foo.org",
                author = {"name":"John Doe","email":"john@foo.org"},
                id = "http://blog.foo.org",
                subtitle="a blog about turbogears"
            )

Now we need to get some elements for the posts in the feed so we extend our get_feed_data method for that.

        def get_feed_data(self):

            entrys = []
            # get all latest five blog entries in reversed order from SQLobject
            for entry in list(BlogEntry.select()[:5].reversed()):
                foo = {}
                foo["updated"] = entry.updated
                foo["title"] = entry.title
                foo["published"] = entry.published 
                foo["author"] = {"name":"elvelind grandin", "uri":"midvinter.org"}
                foo["summary"] = entry.post[:30]
                entrys.append(foo)

            return dict(
                title="my fine blog",
                link="http://blog.foo.org",
                author = {"name":"John Doe","email":"john@foo.org"},
                id = "http://blog.foo.org",
                subtitle="a blog about turbogears",
                entry = entrys
            )

Now all we need is just to mount it in our controller

Class Blog(controllers.Root):

   feed = Feed()

   ....

now we have serveral urls to use. (assuming our blog is mounted as root) blog.foo.org/feed/atom1.0 blog.foo.org/feed/atom0.3 blog.foo.org/feed/rss2.0 blog.foo.org/feed - which will redirect to the default feed (by standard atom1.0)

Note: At this point the feed has no knowledge of which elements are necessary to create valid feed. But this is something I expect to add in the near future.