Ein XML für Timeline aus einem CSV erstellen
CSV Python Script Timeline XMLEs 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()