2010-07-20 65 views
3

我試圖用django + vobject發佈一個ICS飼料。作爲試運行,我已經定義了以下觀點:如果你願意去rosters.davidmck.com/ical/你應該得到服務的filename.ics,MIME類型=文本/日曆在Django中發佈ics飼料

def ical(request, user_id=None): 
    cal = vobject.iCalendar() 
    cal.add('method').value = 'PUBLISH' 
    cal.add('calscale').value = 'GREGORIAN' 
    cal.add('x-wr-calname').value = 'TestCal28' 
    cal.add('x-wr-timezone').value = 'Australia/Sydney' 
    cal.add('x-wr-caldesc').value = '' 
    vevent = cal.add('vevent') 
    vevent.add('dtstart').value = datetime.now() 
    vevent.add('dtend').value = datetime(2010, 7, 22) 
    vevent.add('dtstamp').value = datetime.now() 
    vevent.add('summary').value = "Test event" 
    icalstream = cal.serialize() 
    response = HttpResponse(icalstream, mimetype='text/calendar') 
    response['Filename'] = 'filename.ics' 
    response['Content-Disposition'] = 'attachment; filename=filename.ics' 

左右。到現在爲止還挺好。

BEGIN:VCALENDAR 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:PUBLISH 
PRODID:-//PYVOBJECT//NONSGML Version 1//EN 
BEGIN:VEVENT 
UID:[email protected] 
DTSTART:20100720T173356 
DTEND:20100722T000000 
DTSTAMP:20100720T173356 
SUMMARY:Test event 
END:VEVENT 
X-WR-CALDESC: 
X-WR-CALNAME:TestCal28 
X-WR-TIMEZONE:Australia/Sydney 
END:VCALENDAR 

這似乎是一個更或多或少也形成ICS文件:它會導入到任何和所有我試過,包括手動上傳到谷歌日曆日曆應用。如果你使用雅虎通過URL訂閱它,它似乎也可以工作。但是這裏是殺手:Google日曆不能用作訂閱。如果您嘗試通過URL將其添加到goocal,它只是說永久性地從URL導入日曆,有時會生成失敗消息(最終)。

更令人沮喪的,如果我只是採取filename.ics,並把它放在一些靜態文件服務的位置(如http://rosters.davidmck.com/site_media/filename.ics),但它仍然不起作用

據我所知,位置(靜態和生成)都是外部可用的。我也嘗試了將ics上傳到不同的web服務器,並且實際上似乎工作,所以我懷疑Goocal不喜歡我的web服務器出於某種原因。這讓我瘋狂,我想不出爲什麼。

回答

4

我懷疑這會解決你的問題(聽起來像是一個服務器配置問題),但我建議檢查django-cal您的飼料生成。它的工作方式與django.contrib的聯合供稿框架相同(閱讀:很好)