Как превратить RSS-канал обратно в RSS? - PullRequest
4 голосов
/ 08 октября 2008

Согласно документации feedparser , я могу превратить RSS-канал в разобранный объект, например так:

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

но я не могу найти ничего, показывающего, как идти другим путем; Я хотел бы иметь возможность манипулировать 'd', а затем выводить результат в виде XML:

print d.toXML()

но в feedparser, похоже, нет ничего для того, чтобы идти в этом направлении. Я собираюсь пройтись по различным элементам d, или есть более быстрый способ?

Ответы [ 4 ]

7 голосов
/ 10 октября 2008

Appended - это не очень элегантное, но работающее решение - оно использует feedparser для анализа канала, затем вы можете изменить записи и передать данные в PyRSS2Gen. Он сохраняет большинство информации о фиде (в любом случае важные биты, есть кое-что, что потребует дополнительного преобразования, например, элемент parsed_feed ['feed'] ['image']).

Я собрал это вместе как часть небольшой инфраструктуры обработки каналов Я возился с ... Это может быть полезно (это довольно коротко - должно быть меньше 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()
1 голос
/ 08 октября 2008

Если вы хотите прочитать в XML-ленте, изменить его и затем снова вывести, в главной странице Python есть страница , указывающая, что библиотека RSS.py может поддерживать то, что вам нужно (он читает большинство RSS и может выводить RSS 1.0). Я не смотрел на это подробно, хотя ..

0 голосов
/ 08 октября 2008

Как метод создания корма, как насчет PyRSS2Gen ? :)

Я не играл с FeedParser, но вы пробовали просто делать str (yourFeedParserObject)? Меня часто удивляли различные модули, которые имеют str методы для простого вывода объекта в виде текста.

[Edit] Только что попробовал метод str (), и он не работает на этом. Хотя стоит попробовать; -)

0 голосов
/ 08 октября 2008
from xml.dom import minidom

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

Единственная проблема заключается в том, что он не загружает каналы из Интернета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...