views:

187

answers:

2

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.

+1  A: 

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? :)

badp
While I think I figured out 'element_attrs', I can't wrap my head around how to make 'publish_extensions' add new element to the item, as I haven't had much experience in python inheritance up to this point.
Cev
+1  A: 

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, ""), ...)
Andrew Dalke