Come generare dinamicamente file XML per i Feed RSS?

Voglio creare un Feed RSS generator. Il generatore dovrebbe leggere i dati dal mio database e generare feed RSS per loro. Voglio scrivere uno script che automaticamente genera il xml file per la convalida.

Quindi, se un tipico xml file per feed RSS assomiglia a questo:

  <item>
  <title>Entry Title</title>
  <link>Link to the entry</link>
  <guid>http://example.com/item/123</guid>
  <pubDate>Sat, 9 Jan 2010 16:23:41 GMT</pubDate>
  <description>[CDATA[ This is the description. ]]</description>
  </item>

Voglio lo script per sostituire automaticamente il campo tra la <item> e il </item> tag.
Allo stesso modo per tutti i tag. Il valore per il tag saranno recuperati dal database. Così ho query. La mia applicazione è stata progettata in Django.

Io sono alla ricerca di suggerimenti su come fare questo in python. Io sono aperto anche ad altre alternative se la mia idea è vago.

Si prega di notare che questo è non la sintassi valida per CDATA sezione.
Quale sarebbe la sintassi corretta?
Se guardate attentamente il mio commento, si vedrà un link. Basta cliccare.
Perché il votedown? Sarebbe d’aiuto se una spiegazione era presente.

OriginaleL’autore Indradhanush Gupta | 2013-06-21

3 Replies
  1. 3

    Quello che hai provato finora?

    Un approccio di base sarebbe quella di utilizzare il Python DB API per interrogare il database e di eseguire qualche semplice formattazione utilizzando str.formato (io tipo direttamente in MODO — quindi attenzione di errori di battitura):

    >>> RSS_HEADER = """
    <whatever><you><need>
    """
    >>> RSS_FOOTER = """
    </need></you></whatever>
    """
    
    >>> RSS_ITEM_TEMPLATE = """
    <item>
        <title>{0}</title>
        <link>{1}</link>
    </item>
    """
    
    
    >>> print RSS_HEADER
    
    >>> for row in c.execute('SELECT title, link FROM MyThings ORDER BY TheDate'):
            print RSS_ITEM_TEMPLATE.format(*row)
    
    >>> print RSS_FOOTER
    Che cosa è c.execute() dovrebbe significare?
    Lei non ha risposto a mio domanda “Cosa hai provato finora?” Comunque, ho modificato la risposta di fornire alcuni link per la documentazione di base.
    Ho cercato in PyRSS2Gen.

    OriginaleL’autore Sylvain Leroux

  2. 1

    Grezzo codice utilizza una libreria utile chiamato Coherence. Serve come un parser HTML/XML linguaggi di markup fornire un oggetto python modello. Può essere utilizzato per estrarre/modifica delle informazioni di un file XML o creare XML, costruendo il modello a oggetti.

    Questo codice riportato di seguito funziona modificando i tag XML da un modello su pastebin. Lo fa copiando il modello di “elemento” tag per la compensazione, il suo bambino di tag e riempirli con le apposite voci di dizionario che sarà presumibilmente di provenienza da un database.

    # Import System libraries
    from copy import copy
    from copy import deepcopy
    
    # Import Custom libraries
    from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString, CData
    
    def gen_xml(record):
    
        description_blank_str = \
        '''
        <item>
        <title>Entry Title</title>
        <link>Link to the entry</link>
        <guid>http://example.com/item/123</guid>
        <pubDate>Sat, 9 Jan 2010 16:23:41 GMT</pubDate>
        <description>[CDATA[ This is the description. ]]</description>
        </item>
        '''
        description_xml_tag = BeautifulStoneSoup(description_blank_str)
    
        key_pair_locations = \
        [
            ("title", lambda x: x.name == u"title"),
            ("link", lambda x: x.name == u"link"),
            ("guid", lambda x: x.name == u"guid"),
            ("pubDate", lambda x: x.name == u"pubdate"),
            ("description", lambda x: x.name == u"description")
        ]
    
        tmp_description_tag_handle = deepcopy(description_xml_tag)
    
        for (key, location) in key_pair_locations:
            search_list = tmp_description_tag_handle.findAll(location)
            if(not search_list):
                continue
            tag_handle = search_list[0]
            tag_handle.clear()
            if(key == "description"):
                tag_handle.insert(0, CData(record[key]))
            else:
                tag_handle.insert(0, record[key])
    
        return tmp_description_tag_handle
    
    test_dict = \
    {
        "title" : "TEST",
        "link" : "TEST",
        "guid" : "TEST",
        "pubDate" : "TEST",
        "description" : "TEST"
    }
    print gen_xml(test_dict)

    OriginaleL’autore dilbert

Lascia un commento