2014-01-05 9 views
9

Ich versuche, einen Feed mit mehreren Ereignissen zu analysieren, indem ich die icalendar-lib in Python verwende.iCal-Feed mit Python mithilfe von icalendar analysieren

'Zusammenfassung', 'Beschreibung' und so weiter funktioniert gut, aber für 'dtstart' und 'DTEND' es mir zurückkehrt: icalendar.prop.vDDDTypes object at 0x101be62d0

def calTest(): 
    req = urllib2.Request('https://www.google.com/calendar/ical/XXXXXXXXXX/basic.ics') 
    response = urllib2.urlopen(req) 
    data = response.read() 

    cal = Calendar.from_ical(data) 

    for event in cal.walk('vevent'): 

     date = event.get('dtstart') 
     summery = event.get('summary') 

     print str(date) 
     print str(summery) 

    return 

Was mache ich falsch? Um Vobject zu verwenden ist keine Option, müssen Sie die Icalendar-Bibliothek verwenden. Vielen Dank für jede Hilfe für einen Python Rookie.

+1

Also ist es vielleicht ein 'icalendar.prop.vDDDTypes' Objekt. Was ist das Problem? –

+0

Rechtschreibfehler, summery – dalore

Antwort

2

Vom official documentation, die Sie gelesen haben sollten, können Sie die Werte von dtstart und dtend wie dieser Zugang -

date = event.get('dtstart') 
print date.to_ical() 

sie sind icalendar.prop.vDDDTypes Objekte. Weder String noch haben sie eine intuitive __str__() Methode, scheint es. Daher hast du diese Ausgabe erhalten.

Bitte lesen Sie die Dokumentation.

17

Die Objekte, die dtstart und dtend darstellen, haben ein Attribut dt, das ein Standardobjekt datetime.datetime enthält.

start = event.get('dtstart') 
print(start.dt) 
+0

Es ist erstaunlich, dass niemand diese Antwort bis jetzt upvoted hat :-) – mastazi

+0

und wo kann man diese Informationen in der Dokumentation finden ?! Das hat mich verrückt gemacht, bis ich diese Antwort gefunden habe! – benzkji

+1

@benzkji Wahrscheinlich habe ich es direkt aus dem Quellcode –

0

ein wenig zu spät hier, aber wenn das hilft: die API aktualisiert wurde, da (ich habe den gleichen Fehler // Kopie einfügen eine andere Stackoverflow post) Sie müssen die Methode verwenden, decodiert() statt zu bekommen()

Sie können die neueste API-Referenz finden hier iCalendar: http://icalendar.readthedocs.io/en/latest/api.html

ersetzen Ihren Anruf von erhalten decodiert:

date = event.decoded('dtstart') 
summery = event.decoded('summary') 

Es sollte funktionieren.

+0

es funktioniert nicht, Rückgabe: ''Event' Objekt hat kein Attribut 'decode'' – user912830823

Verwandte Themen