Восстановить полный экспорт ICS

Привет,

Было бы здорово вернуть функциональность, удалённую в #231.

В частности, возможность указывать iCal-клиенту путь к events.ics или аналогичному файлу для получения всех событий на сайте.

Кроме того, в замене download-calendar.js отсутствуют поля DESCRIPTION, URL и ORGANIZER. Для меня наиболее важны первые два.

Ещё лучше было бы включить #169 для добавления экспорта событий «по темам», но это уже дополнительная возможность.

10 лайков

Я тоже был бы очень рад, если бы мог подписаться на события из своего календаря.

В дополнение к /upcoming-events мне бы хотелось видеть /upcoming-events.ics.

Но да, возможность получать события для одной категории (или даже одного тега?) наверняка стала бы отличным дополнением.

Возможно, /upcoming-events.ics?category=12 для фильтрации по ID категории?

2 лайка

+1 за полную ленту ICS с фильтрацией по теме. Я понимаю, что это сложно из-за вопросов конфиденциальности. Обычно генерируется случайная хеш-лента, представляющая персональную ленту пользователя.

1 лайк

эмм, что … это публичный URL, по крайней мере с тем календарем, который мы используем …

Хочу также поддержать эту функцию. Я уже проголосовал за эту тему.

Возвращение возможности экспорта ICS для всего сайта или для каждого пользователя было бы крайне ценно для рабочего процесса нашего сообщества. Есть ли какие-либо обновления по пересмотру того, что было удалено в PR #231?

Если существуют опасения по поводу конфиденциальности или реализации, возможно, стоит рассмотреть решение в виде приватной ICS-ленты для каждого пользователя.

Спасибо за рассмотрение этого вопроса!

Я не думаю, что здесь есть какие-либо проблемы с конфиденциальностью, так как .json-эндпоинт уже существует, это просто другой формат данных.

@cvx / @j.jaffeux, что вы думаете о возвращении .ics на маршрут индекса событий (удалено в: DEV: Remove old ics code by cvx · Pull Request #231 · discourse/discourse-calendar · GitHub)? Мне кажется, это будет простым и эффективным решением.

Мы уже используем:

DiscoursePostEvent::EventFinder.search(current_user, filtered_events_params)

И можем установить MAX_RESULTS (сортировка по последним событиям), чтобы убедиться, что этот вывод и .json не становятся слишком большими.

2 лайка

Я вернул возможность экспорта в формате ICS через GET /discourse-post-event/events.ics (начиная с DEV: add ical format response for discourse-post-events index route by tyb-talks · Pull Request #35143 · discourse/discourse · GitHub). Обратите внимание, что этот эндпоинт имеет жёсткое ограничение в 200 событий. Если на вашем сайте больше событий и вы хотите выполнить полный экспорт, вы можете перебирать их, используя параметры запроса before и after, которые принимают строки дат. В ближайшее время мы добавим полный список допустимых параметров для этого эндпоинта в документацию API.

6 лайков

Спасибо за мерж PR #35143 — здорово, что экспорт .ics официально вернулся.

Хотел уточнить один момент: есть ли возможность (или план на будущее) аутентифицировать эту ленту с помощью токена пользователя или API-ключа, аналогично тому, как Discourse обрабатывает приватные RSS/Atom-ленты (/topics/feed.rss?token=…)?

Сейчас /discourse-post-event/events.ics работает только для публичных событий, что означает, что Outlook и Google Calendar не могут подписываться на приватные категории.

Даже простой подход на основе токенов (на пользователя или на сайт, только для чтения) позволил бы безопасно предоставлять доступ к приватным событиям в календарных клиентах без необходимости проксировать ленту через внешний скрипт.

Можно ли это добавить, или такая возможность уже есть через какой-то параметр, который я мог упустить?

Это звучит как отдельная просьба о новой функции. Я считаю, что технически это реализуемо с помощью API-ключа, поэтому вопрос скорее в том, как это проще всего реализовать.

Закрываю эту тему, чтобы вы могли создать отдельный запрос по этому поводу.