Назад | Перейти на главную страницу

Добавить событие календаря в Nextcloud с помощью curl

Я безуспешно пытаюсь добавить событие в повестку дня Nextcloud (Nextcloud версии 16), используя cURL:

curl --user 'user:pass' -X PUT \
https://myNCserver/remote.php/dav/calendars/user/myCalendar /Myevents-Z2HOOON14VOH09RIACY3IL3W.ics \
-H "Content-Type: text/calendar ; charset=utf-8" --data @myEvent.ics

Содержимое файла myEvent.ics:

BEGIN:VCALENDAR
PRODID:-//My own caldav script
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
CREATED:20190606T094245
DTSTAMP:20190606T094245
LAST-MODIFIED:20190606T094245
UID:VYM30SH4VNJFV4CWAUC0V9
SUMMARY:Test added using cURL !
CLASS:PUBLIC
STATUS:CONFIRMED
DTSTART;TZID=Europe/Zurich:20190606T200000
DTEND;TZID=Europe/Zurich:20190606T210000
END:VEVENT
BEGIN:VTIMEZONE
TZID:Europe/Zurich
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

Я проверил этот контент, используя https://icalendar.org/validator.html

UID генерируется случайным образом с использованием:

cat /dev/urandom | tr -dc 'A-Z0-9' | fold -w 22 | head -n 1

И то же самое для имени файла / ресурса Myevents-Z2HOOON14VOH09RIACY3IL3W.ics

Я получаю от сервера следующий ответ:

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:exception>Sabre\DAV\Exception\UnsupportedMediaType</s:exception>
  <s:message>This resource only supports valid iCalendar 2.0 data. Parse error: This parser only supports VCARD and VCALENDAR files</s:message>
</d:error>

Я пытался переименовать .ics в .vcal, не повезло.

Также я просмотрел файл журнала Nextcloud, он содержит большой массив json, который не предоставляет больше информации, чем возвращенное сообщение об ошибке.

Нашел решение: --data myEvent.ics вариант curl здесь не подходит, так как он не сохраняет перевод строки в представленном файле данных.

Вместо этого нужно использовать --data-binary @myEvent.ics ! Эта опция сохраняет переводы строк, а затем сервер Nextcloud принимает запрос и создает событие в календаре. Видеть https://curl.haxx.se/docs/manpage.html