Problem

일정과 관련된 서비스에는 사용자가 사용하고 있는 캘린더에 바로 추가해줄 수 있는 기능이 있으면 대단히 편리할 것이다. iCalendar1 형식으로 파일을 내보내어 제공할 수도 있지만 사용자가 구글 캘린더를 이용하고 있을 경우 링크를 이용해 간단히 일정에 추가가 가능했다.

Solution

먼저 기본 URL 포맷은 아래와 같다. 여기에 여러 파라미터를 추가하여 링크를 만들 수 있다. https://calendar.google.com/calendar/render

  • *action: TEMPLATE
  • *text: 일정의 이름을 입력하면 된다.
  • *dates: 일정의 시작일과 종료일을 입력한다.
    • GMT 로 입력하거나 타임존을 명시해서 입력할 수 있다.
    • 2020년 10월 21일 3시 부터 4시 까지의 일정이라면 GMT 로 입력하면 다음과 같다.
      • dates=20201021T060000Z/20201021T070000Z
  • ctz: 타임존 설정
  • details: 이벤트 추가 시 상세 내용에 입력될 내용을 추가한다.
  • location: 위치
  • crm: AVAILABLE, BUSY, BLOCKING 를 입력할 수 있고 해당 일정의 내 상태를 나타낸다.
  • trp: true 바쁨, false 가능
  • sprop: 이벤트의 소스를 설정한다.
  • add: 추가할 게스트를 입력한다.
    • user1@domain.com,user2@domain.com 이메일을 콤마로 추가할 수 있다.
  • src: 공유 캘린더에 추가할 경우 사용한다.
  • recur: 반복되는 일정일 경우 사용한다.

*표시는 필수항목 입니다.

웹에서 간단히 테스트로 링크를 만들어 볼 수 있는 페이지2들도 있고 github에 간단하지만 링크 생성 관련 프로젝트3도 있다.

참고로 ics 파일 포맷4도 단순하여 구현이 어렵지 않다.

BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:mrlatte
NAME:mrlatte
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
X-LIC-LOCATION:Asia/Seoul
BEGIN:STANDARD
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
TZNAME:KST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20201021T220244Z
UID:20201021T220244Z-882354259@marudot.com
DTSTART;TZID=Asia/Seoul:20201022T120000
DTEND;TZID=Asia/Seoul:20201022T120000
SUMMARY:title
END:VEVENT
END:VCALENDAR

References