Создание URL-адреса календарной ленты с помощью Python
Я пытаюсь написать представление в моем Django приложении, на которое может подписаться внешнее приложение календаря. Например, в Google Calendar вы можете "Добавить календарь из URL". Вот что я хочу создать, чтобы я мог автоматически добавлять новые события без необходимости загрузки новых файлов моими пользователями.
Насколько я могу судить по другим, функциональным URL, единственное, что должен делать такой URL, это возвращать файл .ics
без необходимости аутентификации. Хотя я считаю, что сделал это, Календарь Google (и другие приложения календаря), похоже, не импортирует мою ленту.
Интересным для меня является то, что когда я посещаю URL в браузере, он сразу же начинает загружать файл .ics
. Еще более странно, что когда я затем пытаюсь импортировать этот файл в Google Календарь с помощью функции "Импорт и экспорт", приложение прекрасно отображает события в моей ленте.
Ниже приведен отрывок из загружаемого файла. Его название pre-u.ics
.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//UT Pre-U//Portal//NL
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Pre-U Agenda
X-WR-TIMEZONE:Europe/Amsterdam
BEGIN:VEVENT
SUMMARY:Test event
DTSTART;VALUE=DATE-TIME:20221104T150000Z
DTSTAMP;VALUE=DATE-TIME:20221027T122423Z
UID:gebeurtenis1@pre-u-portal
CATEGORIES:
DESCRIPTION:Test
LOCATION:Unknown
ORGANIZER:MAILTO:myemailaddress@gmail.com
STATUS:CONFIRMED
URL:https://google.com/
END:VEVENT
END:VCALENDAR
Я генерирую файл с помощью пакета django-ical
и следующего кода:
import datetime
from django_ical.views import ICalFeed
from icalendar import vCalAddress, vText
class EventFeed(ICalFeed):
"""
A simple event calender
"""
product_id = "-//UT Pre-U//Portal//NL"
timezone = "Europe/Amsterdam"
file_name = "pre-u.ics"
title = "Pre-U Agenda"
def __init__(self):
self.temp_items = []
def items(self):
self.temp_items = []
for g in Event.objects.all().order_by("-date"):
self.temp_items.append(
{
"type": "event",
"id": g.id,
"name": g.name,
"description": g.description,
"start": g.datum,
"end": None,
"location": None,
}
)
return self.temp_items
def item_title(self, item):
return item["name"]
def item_guid(self, item):
return item["type"] + str(item["id"]) + "@pre-u-portal"
def item_description(self, item):
return item["description"]
def item_start_datetime(self, item):
return item["start"]
def item_end_datetime(self, item):
return item["end"]
def item_location(self, item):
if item["location"]:
return item["location"]
return "Unknown"
def item_status(self, _):
return "CONFIRMED"
def item_organizer(self, _):
return vCalAddress("MAILTO:myemailaddress@gmail.com")
def item_link(self, _):
return "https://portal.pre-u.utwente.nl/"
Я не понимаю, что не так, помощь была бы очень признательна.