2010-06-04 12 views
2

Je dois être en mesure d'offrir des événements "téléchargeables" pour Outlook, via des objets vCalendar - si je ne me trompe pas.Créer un objet vCalendar "téléchargeable" pour Outlook avec vObject (Python)

De la recherche que j'ai faite, j'ai été pointé à l'aide de vObject. J'ai regardé leurs exemples d'utilisation, mais n'ayant aucune expérience préalable du format, je ne sais pas comment résoudre mon problème, car je ne sais pas quels champs sont disponibles, ou comment ils sont appelés ...

Existe-t-il un exemple parfait de création d'un objet/événement vCalendar très simple avec un type de nom/description, qui a une heure et une date de début et de fin?

Je vais utiliser Django, et je vais probablement les créer dynamiquement pour "télécharger" comme demandé.

Répondre

2

Je crois que les champs les plus utiles sont:

  • dtstart: heure de début
  • dtend: de fin
  • summary
  • location
  • url
  • description

Ensuite, vous créez un calendrier avec:

cal = vobject.iCalendar() 

alors un événement:

event = cal.add('vevent') 

et le remplir:

event.add('summary').value = 'your summary' 
event.add('dtstart').value = datetime.now() # or anything else 
... 

Maintenant, si vous voulez retourner le calendrier via http, vous pouvez utiliser cal.serialize().

+0

Merci! Je vais essayer ça bientôt! –

+0

Cela fonctionne très bien la création de l'événement, mais pour une raison quelconque, Outlook 2003 "ne peut pas importer vcalendar" lorsque je tente de l'importer, de diverses manières. –

+1

Mise à jour: Il semble que Outlook 2003 (au moins sur ma boîte) n'aime pas les fichiers ics qui ne contiennent pas «METHOD: PUBLISH» quelque part avant «BEGIN: VEVENT». ça fonctionne parfaitement maintenant. @ Olivier: Merci pour les conseils! J'apprécie votre temps! –

1

J'avais le même problème sur un système Windows. Une fois que j'ai remplacé crlfs par lfs, les choses ont commencé à fonctionner pour moi.

output = cal.serialize().replace(u'\r\n', u'\n').strip() 
1

Outlook 2003 semble avoir besoin d'un champ UID pour chaque VEVENT. le module icalendar ne semble pas les utiliser, j'ai donc dû ajouter les extraits de code suivants:

import uuid 
... 
event.add('uid',uuid.uuid4()) 
Questions connexes