Cev
Cev

Reputation: 1428

How can I generate RSS with arbitrary tags and enclosures

Right now, I'm using PyRSS2Gen to generate an RSS document (resyndicating a modification of an rss feed that was parsed with feedparser), but I can't figure out how to add uncommon tags to the item.

items = [
PyRSS2Gen.RSSItem(
    title = x.title,
    link = x.link,
    description = x.summary,
    guid = x.link,
    pubDate = datetime(
        x.modified_parsed[0],
        x.modified_parsed[1],
        x.modified_parsed[2],
        x.modified_parsed[3],
        x.modified_parsed[4],
        x.modified_parsed[5])
    )

for x in parsed_feed.entries]

rss = PyRSS2Gen.RSS2(
    title = "Resyndicator",
    link = parsed_feed['feed'].get("link"),
    description = "etc",

    language = parsed_feed['feed'].get("language"),    
    copyright = parsed_feed['feed'].get("copyright"),
    managingEditor = parsed_feed['feed'].get("managingEditor"),
    webMaster = parsed_feed['feed'].get("webMaster"),
    pubDate = parsed_feed['feed'].get("pubDate"),
    lastBuildDate = parsed_feed['feed'].get("lastBuildDate"),

    categories = parsed_feed['feed'].get("categories"),
    generator = parsed_feed['feed'].get("generator"),
    docs = parsed_feed['feed'].get("docs"),

    items = items
)

The original feed has a <show_id></show_id> tag, as well as an enclosure <enclosure url="http://url.com" length="10" type="" /> and I need to include that in the generated version as well.

Upvotes: 1

Views: 1131

Answers (2)

Andrew Dalke
Andrew Dalke

Reputation: 15335

There are two ways. First, you could change the code directly. Edit 'publish' and put whatever you want wherever you want it.

But if you want to take the suggestion from the documentation, derive from RSS2 and implement your own publish_extensions, like this:

class YourRSS2Item(PyRSS2Gen.RSSItem):
    def publish_extensions(self, handler):
        handler.startElement("show_id")
        handler.endElement("show_id")

'handler' follows the SAX2 API (start_element, characters, end_element).

And as for making an enclosure, use the Enclosure class, as in

item = RSSItem( .... enclosure = Enclosure("http://url.com", 10, ""), ...)

Upvotes: 1

badp
badp

Reputation: 11833

The documentation explains:

To add your own attributes (needed for namespace declarations), redefine element_attrs or rss_attrs in your subclass [of RSS and RSSData].

That's the whole point about subclassing, isn't it? :)

Upvotes: 1

Related Questions