Создание 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/"

Я не понимаю, что не так, помощь была бы очень признательна.

Вернуться на верх