开发者

How can I generate RSS with arbitrary tags and enclosures

开发者 https://www.devze.com 2022-12-12 14:04 出处:网络
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 fig开发者_StackOverflow中文版ure out how to add

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 fig开发者_StackOverflow中文版ure 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.


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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号