如何生成带任意标签和封装的RSS

1 投票
2 回答
1099 浏览
提问于 2025-04-15 16:11

现在,我正在使用PyRSS2Gen来生成一个RSS文档(这是对一个用feedparser解析过的RSS源的修改版),但是我不知道怎么在项目中添加一些不常见的标签。

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
)

原来的源里面有一个<show_id></show_id>标签,还有一个封装标签<enclosure url="http://url.com" length="10" type="" />,我也需要在生成的版本中包含这些内容。

2 个回答

1

文档中解释道:

要添加你自己的属性(这对于命名空间声明是必要的),你需要在你自己创建的类中重新定义 element_attrsrss_attrs [这些类是 RSSRSSData 的子类]。

这就是创建子类的主要目的,不是吗? :)

1

有两种方法。第一种,你可以直接修改代码。编辑'publish',把你想要的内容放到你想放的地方。

但如果你想按照文档的建议来做,可以从RSS2派生,并实现你自己的publish_extensions,像这样:

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

'handler'遵循SAX2的API(包括开始元素、字符和结束元素)。

至于制作一个封装,使用Enclosure类,像这样:

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

撰写回答