Seite 1 von 1

Schneller MiniRDFparser

Verfasst: Donnerstag 23. Dezember 2004, 12:31
von Milan
Hi, ich bin gerade dabei meinen alten Quellcode für ein Nachrichtentelegramm zu überholen und portabel für andere RDF-Dienste zu machen, deswegen hab ich mal einen kleinen Miniparser geschrieben. Argumente sind eine RDF oder RSS Datei mit den Nachrichten und ein Dictionary mit den zu parsenden Tagnamen und ihren Standartwerten bei nichtvorkommen. Das ganze sieht dann so aus (mit Beispiel):

Code: Alles auswählen

from xml.dom.minidom import parse as makeDomObjFromFile, parseString as makeDomObjFromString

def parseRDFobj(dom_obj,extracttags={"title":"no title","link":None,"description":"no description"},encoding=None):
    for item in dom_obj.getElementsByTagName("item"):
        extracted_item={}
        for tag in extracttags:
            try:
                text=""
                for node in item.getElementsByTagName(tag)[0].childNodes:
                    if node.nodeType == node.TEXT_NODE:
                        text += node.data
                assert text != ""
            except (IndexError,AssertionError):
                extracted_item[tag]=extracttags[tag]
            else:
                if encoding:
                    text=text.encode(encoding)
                extracted_item[tag]=text
        yield extracted_item

if __name__ == "__main__":
    import urllib
    dom_obj=makeDomObjFromFile( urllib.urlopen("http://www.tagesschau.de/newsticker.rdf") )
    for item in parseRDFobj(dom_obj,encoding="latin-1"):
        print item
Vorher hat das ganze mit RE gearbeitet, aber so ist es flexibler :D .

Verfasst: Donnerstag 23. Dezember 2004, 21:46
von Milan
hab noch einen weiteren Parameter encoding hinzugefügt, somit wird der Inhalt von Unicode gleich mit umgewandelt, falls erwünscht (standartmäßig abgeschaltet). Eine Anwendung des ganzen ist zum Beispiel dieses CGI-Script.