2008-10-08 133 views
3

按照feedparser documentation,我可以把一个RSS feed到解析对象是这样的:如何将RSS反馈转换为RSS?

import feedparser 
d = feedparser.parse('http://feedparser.org/docs/examples/atom10.xml') 

,但我找不到任何说明如何走另一条路;我希望能够做操纵“d”,然后将结果输出为XML:

print d.toXML() 

但似乎没有任何东西在feedparser在那个方向。我将不得不循环各种元素,还是有更快的方法?

回答

5

附加的并不是非常优雅,但工作的解决方案 - 它使用feedparser来解析feed,然后可以修改条目,并将数据传递给PyRSS2Gen。它保留了Feed信息的大部分(无论如何,重要的比特位都有,需要额外转换的东西,例如parsed_feed ['feed'] ['image']元素)。

我把这个一起作为一个little feed-processing framework我与..这可能是一些使用的摆弄的一部分(这是很短 - 完成后应小于100线的总代码..)

#!/usr/bin/env python 
import datetime 

# http://www.feedparser.org/ 
import feedparser 
# http://www.dalkescientific.com/Python/PyRSS2Gen.html 
import PyRSS2Gen 

# Get the data 
parsed_feed = feedparser.parse('http://reddit.com/.rss') 

# Modify the parsed_feed data here 

items = [ 
    PyRSS2Gen.RSSItem(
     title = x.title, 
     link = x.link, 
     description = x.summary, 
     guid = x.link, 
     pubDate = datetime.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 
] 

# make the RSS2 object 
# Try to grab the title, link, language etc from the orig feed 

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

    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 
) 


print rss.to_xml() 
0
from xml.dom import minidom 

doc= minidom.parse('./your/file.xml') 
print doc.toxml() 

唯一的问题是它不会从互联网下载源。

+0

它不会以RSS感知的方式解析它们;所以操纵Feed将比Feedparser难得多 – Simon 2008-10-08 08:41:43

0

作为制作饲料的方法,PyRSS2Gen怎么样? :)

我还没有玩过FeedParser,但你有没有尝试只是做str(yourFeedParserObject)?我经常被各种模块惊讶,它们只有将文本输出为对象的方法。

[编辑]刚刚尝试过str()方法,它不适用于这个。值得拍摄虽然;-)

+0

我如何将Feedparser的输出提供给PyRSS2Gen?我试过 r = PyRSS2Gen.RSS2(d) 但这并不起作用。 – Simon 2008-10-08 09:16:39