====================
== Andreas Streim ==
====================
I am a digital resident and this is my ~

Ein XML für Timeline aus einem CSV erstellen

CSV Python Script Timeline XML

Es gibt ein nettes Tool namens Timeline, mit dem man auf recht einfache Art und Weise eine Zeitleiste bauen kann, die sich in eine Webseite einbinden lässt. Das Schöne daran, verglichen mit optisch sicherlich beeindruckenderen Diensten wie Dipity: es kann komplett auf dem eigenen Server stattfinden, kein fremder (möglicherweise kostenpflichtiger) Dienstleister wird benötigt.

Füttern muss man SIMILE-Widgets Timeline zum Beispiel mit einem XML, die die darzustellenden Ereignisse enthält. Das von Hand zu schreiben ist mindestens lästig. Das untenstehende Python-Script baut aus einer aus einer Google-Doc-Tabelle (oder Excel-Tabelle) kommaseparierten CSV-Datei ein passendes XML. Dabei müssen die Spalten in folgender Reihenfolge enthalten sein:

  • Datum

  • Enddatum, so vorhanden

  • Titel des Ereignisses

  • Beschreibung des Ereignisses

  • Link-Url, so vorhanden

  • Bild-Url, so vorhanden

Man könnte jetzt sicher noch einen automatischen Upload per Ftp der fertigen XML bauen, aber das spare ich mir an dieser Stelle.

import csv
import datetime

srcfile='C:\\Dokumente und Einstellungen\\streiman\\Desktop\\Timeline\\bbi-raw.csv'
destfile='C:\\Dokumente und Einstellungen\\streiman\\Desktop\\Timeline\\bbi-neu.xml'

myCsv = csv.reader(open(srcfile, 'rb'), delimiter=',', quotechar='"')

f = open(destfile, 'w')
f.write("<data>\n")

title=myCsv.next() # in der ersten Zeile stehen die Spaltennamen

for row in myCsv:
    f.write("<event>\n")
    startdate=datetime.datetime.strptime(row[0], "%d.%m.%Y").strftime("%b %d %Y 00:00:00 GMT-0600")
    f.write("start=\""+startdate+"\"\n")
    if not row[1]=="":
        enddate=datetime.datetime.strptime(row[1], "%d.%m.%Y").strftime("%b %d %Y 00:00:00 GMT-0600")
        f.write("end=\""+enddate+"\"\n")
        f.write("isDuration=\"true\"\n")
    
    f.write("title=\""+row[2]+"\"\n")

    if len(row)>4:
        if not row[4]=="":
            f.write("link=\""+row[4]+"\"\n")
    if len(row)>5:
        if not row[5]=="":
            f.write("image=\""+row[5]+"\"\n")

    f.write(">\n")
    if len(row)>3:
        f.write(row[3]+"\n")
            
    f.write("</event>\n")

f.write("</data>\n")
f.close()
Previous Post Next Post