2010-06-04 38 views
2

如果我沒有弄錯,我需要能夠通過vCalendar對象爲Outlook提供「可下載」的事件。使用vObject爲Python創建「可下載的」vCalendar對象(Python)

從我所做的研究中,我一直指向使用vObject。我已經看過他們的使用例子,但是之前沒有格式的經驗,我不清楚如何解決我的問題,因爲我不確定哪些字段可用,或者他們被稱爲...

是否有一個直接的例子,用一些類型的名稱/描述創建一個非常簡單的對象/ vCalendar事件,它具有開始和結束時間/日期?

我將使用Django,並可能會根據請求動態創建這些用於「下載」。

回答

2

我認爲最有用的字段有:

  • dtstart:開始時間
  • dtend:結束時間
  • summary
  • location
  • url
  • description

然後創建一個日曆:

cal = vobject.iCalendar() 

那麼事件:

event = cal.add('vevent') 

和填充它:

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

現在,如果你想通過返回日曆http,你可以使用cal.serialize()

+0

謝謝!我很快就會嘗試。 – 2010-06-04 18:43:16

+0

這項工作非常有效,但是無論出於何種原因,當我嘗試以各種方式導入Outlook時,Outlook 2003「無法導入vcalendar」。 – 2010-06-04 19:37:50

+1

更新:它似乎是Outlook 2003(至少在我的盒子)不喜歡'BEGIN:VEVENT'之前某處不包含'METHOD:PUBLISH'的ics文件。現在就像魅力一樣。 @Olivier:感謝提示!我感謝你的時間! – 2010-06-04 20:05:20

1

我在Windows系統上遇到同樣的問題。一旦我用lfs替換crlfs的東西開始爲我工作。

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

Outlook 2003似乎需要每個VEVENT的UID字段。 icalendar模塊似乎沒有使用這些,所以我不得不添加下面的代碼片段:

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