2009-11-19 5 views
1

Actuellement, j'utilise PyRSS2Gen pour générer un document RSS (en indiquant une modification d'un flux rss qui a été analysé avec feedparser), mais je n'arrive pas à comprendre comment ajouter des étiquettes inhabituelles à l'article.Comment générer du flux RSS avec des balises et des boîtiers arbitraires?

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 
) 

L'alimentation d'origine a une étiquette <show_id></show_id>, ainsi qu'une enceinte <enclosure url="http://url.com" length="10" type="" /> et je dois inclure dans la version produite ainsi.

Répondre

1

Il y a deux façons. D'abord, vous pouvez changer le code directement. Editez "publier" et mettez ce que vous voulez où vous le voulez.

Mais si vous voulez prendre la suggestion de la documentation, découlent de RSS2 et mettre en œuvre vos propres publish_extensions, comme ceci:

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

'gestionnaire' suit l'API SAX2 (start_element, caractères, end_element).

Et comme pour faire une enceinte, utilisez la classe de châssis, comme dans

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

Comment puis-je utiliser cette classe (YourRSS2Item) pour écrire mes propres éléments? Pouvez-vous donner un exemple complet s'il vous plaît? – Stavros

1

The documentation explains:

Pour ajouter vos propres attributs (nécessaires à l'espace de noms déclarations), redéfinissent element_attrs ou rss_attrs dans votre sous-classe [de RSS et RSSData].

C'est tout le point sur le sous-classement, n'est-ce pas? :)

+0

Bien que je pense que j'ai compris « element_attrs », je ne peux pas envelopper la tête autour de la façon de faire « publish_extensions » ajouter de nouvelles élément à l'élément, car je n'ai pas eu beaucoup d'expérience dans l'héritage python jusqu'à ce point. – Cev