Montag, 7. Dezember 2009

ISO-Datumsangaben mit Python verarbeiten

Es gibt für Python ein paar Module, um ISO-Datums- und Zeitangaben zu verarbeiten. Solche Zeitangaben werden z.B. in RSS- und Atom-Feeds für das Einstell- und Updatedatum verwendet. Vor kurzem brauchte ich ein Skript, dass mir nur die aktuellen Posts eines solchen Feeds ausliest, also z.B. alle Einträge der letzten 2 Stunden. Als nützlich haben sich dabei das mit Python mitgelieferte datetime, sowie das Modul isodate erwiesen. Ich habe andere Module ausprobiert, aber diese kamen entweder mit bestimmten Formaten oder mit Zeitzonen nicht zurecht.

Hier ein kleines Skript, dass sowohl die Verarbeitung von ISO-Daten, als auch einen diff zwischen zwei Zeitangaben unter Berücksichtigung der Zeitzone veranschaulicht. Das Skript gibt alle Einträge meines Feeds der letzten Woche aus. Ihr braucht auch das feedparser-Paket, die eierlegende Wollmilchsau für Feed-verarbeitende Python-Programmierer. Die Zeitzone wird in datetime als eigene Klasse definiert, diese wird dann den datetime-Funktionen jeweils als Parameter übergeben. Jede Zeitzone braucht als eine eigene Klasse.

import feedparser
import isodate, datetime

class GMT1(datetime.tzinfo):
def utcoffset(self,dt):
return datetime.timedelta(hours=1)
def tzname(self,dt):
return "GMT +1"
def dst(self,dt):
return datetime.timedelta(0)

################################################### main

print "start\n\n"

# get atom feed via http
d = feedparser.parse("http://dasskript.blogspot.com/rss.xml")

entry_nodes = d.entries

gmt1 = GMT1()

for enode in entry_nodes:
entry_published = isodate.parse_datetime(enode['published'])
tdelta = datetime.timedelta(days=7)
#tdelta = datetime.timedelta(hours=2)

if (datetime.datetime.now(gmt1)-entry_published) < tdelta:
entry_id = enode['id']
headline = enode['title']
print entry_id + ": " + headline

0 Kommentare:

Kommentar veröffentlichen