- 다양한 주제에 대해 자유롭게 글을 작성하는 게시판입니다.
Date 18/09/06 00:59:21수정됨
Name   CIMPLE
Link #1   https://ifttt.com/
Subject   Gmail 내용으로 구글캘린더 이벤트 자동생성하기
질게에도 올렸었는데요, 오늘 시간을 투자해서 방법을 알아낸 “Gmail 내용으로 구글 캘린더 이벤트를 자동 생성하는 방법”을 공유할까 합니다.
미루면 안쓸걸 알고있지만 또 자세히 쓰려면 한도끝도 없는 종류의 글이라 제 귀차니즘이 감당하는 선에서 간결하게 쓰도록 하겠습니다.
그리고 중간에 약간의 코딩이 포함되는데 전혀 어려운건 아니라서 코딩을 잘 모르시더라도 혹시 필요하시면 동일하게 세팅해서 쓰실수 있습니다.

일단 이걸 추진하게 된 input-output 은 간단합니다.

Input : 휴가 가는 사람, 휴가 기간이 적힌 Gmail
Output: 위 정보로 구글 캘린더 이벤트 자동생성

여기서 자동생성의 의미는 유저가 아무것도 안해도 되고, 그냥 Gmail 을 수신하는 것만으로도 캘린더에 자동으로 등록되는걸 의미합니다.
당연히 저는 구글신이니까 버튼클릭 몇번에 키워드 몇개 써넣으면 손쉽게 될줄 알았는데, 이게 안되더라고요.

리서치한것 간단히 요약하면

- 수신된 Gmail 에 기반해서 캘린더 이벤트를 자동 생성하는 기능이 있긴 한데, 특별한 몇몇 이벤트만 됩니다. 항공기,호텔, 레스토랑, 공연예약 딱 이거 4개만 됩니다. 그것도 아마 한글은 자동으로 안되고 그럴거에요. 즉 제가 커스텀하게 만든 이메일 일정은 자동등록 안됩니다.
- 위의 자동생성 말고 Gmail 에서 수동으로 옵션 클릭해서 ‘일정 만들기’ 라는 기능이 있습니다. 메일에 적혀 있는 날짜 등을 자동인식해서 캘린더 이벤트를 만들어 주는건데 역시 한국어메일은 잘 안되고 일단 이건 수동이라 제외합니다.
- 이런 일을 해주는 웹서비스들이 있습니다. 제가 찾은건 automate.io 나 zapier 같은 서비스들이 그것들인데 다 유료더라고요. 무료 15일 지나면 제가 설정해놓은것들이 리셋되는 놈들이어서 조금 만지작거리다가 제외.

그리고 나서 홍차넷 질문게시판에 질문을 올린 다음에 알아낸 것이 바로 IFTTT 였습니다.



이름 참 오묘한데요, 이쪽 업계에서는 아마도 얘가 대세인것 같습니다. 사실 저는 이런쪽은 잘 몰라요. 알고보니 대세가 아니었습니다! 일수도 있으니 너무 지적은 마시고
IFTTT 는 다양한 어플리케이션과 어플리케이션을 서로 연결해 주는 역할을 합니다. 뭐 대단히 많은 서비스들을 상호 연결시켜 주니 그건 더 설명하지 않기로 하고 저는 지메일과 구글 캘린더를 연결하는데 이걸 활용했습니다.

IFTTT 는 “애플릿(Applet)” 이라는 이름의, 일종의 작은 소프트웨어를 유저가 목적에 맞게 직접 개발해서 사용하는 시스템입니다. 단 이 과정을 프로그래밍을 모르더라도 할수 있게 해놨는데요, 각 어플리케이션에서 Field(필드) 안에 들어가는 Value(값) 에 Ingredient(성분) 이라고 불리우는 요소들을 손쉽게 상호 연결해서 자동으로 일을 할수 있게끔 합니다. 걍 복잡하니 성분으로 통일합시다.


(IFTTT의 Trigger-Filter-Action 의 개요. 구조를 손쉽게 이해할 수 있다.)


즉 위에서 언급한 지메일과 구글 캘린더로 예를 들면
지메일은 ‘제목’, ‘보내는사람’, ‘받는사람’, ‘본문’ 등이 있겠고 이게 성분입니다.
구글 캘린더는 ‘이벤트 제목’, ‘이벤트 설명’, ‘시작시간’, ‘종료시간’ 등이 성분이고요. 성분과 성분을 연결하는게 IFTTT 의 프로그래밍입니다. 말그대로 1:1 매핑이에요.
지메일은 Trigger(트리거) 즉 방아쇠가 당겨지는 역할을 합니다.


(IFTTT 의 '트리거' 어플리케이션으로 지메일을 설정한 모습)

그럼 구글 캘린더에서 Action(액션) 이 일어납니다.


(IFTTT의 '액션' 이 일어날 어플리케이션 구글 캘린더를 선택한 모습)

그래서 if(만약) this Trigger(이 트리거)  then(하면) that Action (이렇게 행동) 하라고 해서 사이트 이름이 이모양이죠.

IFTTT에 가입하셔서 지메일이랑 구글 캘린더 연동하시고, 검색을 통해 내가 개발하고자하는 애플릿과 비슷한걸 찾아서 그걸 수정해서 쓸 수도 있고, 내가 원하는 애플릿을 바로 만들어 쓸 수도 있습니다. 애플릿 개발은 IFTTT Platform 이라는 곳에서 이루어집니다.

애플릿 개발은 매우 쉽습니다.
- Trigger 영역에서 어플리케이션을 선택(지메일)
- Trigger 의 조건 선택(특정 Label 의 메일이 수신 - 지메일에서 필터 만들어서 특정 메일에 자동으로 레이블링 합니다.)
- Action 영역에서 어플리케이션과 주요 액션을 선택(구글 캘린더 - 이벤트 생성. 여기에서 이벤트 생성 방식을 quick add 와 create detailed event 선택할수 있는데 quick add 는 뭔짓을 해도 날짜가 안바뀌더군요. 그래서 create detailed event 선택했습니다.)
- Action 의 필드에 Trigger 의 성분을 연결 (ex. 구글 캘린더의 이벤트 제목(Title) 과 이메일의 제목(Subject) 를 연결)


(Action 에서 'Title' 이라는 필드의 값에 Subject(지메일 제목) 이라는 성분을 연결한 모습)

이렇게 해놓고 Save 한 다음에 동작시키면 되는겁니다. 그런데 구글 캘린더 같은 경우는 필수 성분이 시작시간(Start time) 과 끝나는 시간(End time) 입니다. 이게 없으면 일정이 제대로 생성이 안돼요.

근데 여기서 문제가, 구글 캘린더 이벤트의 제목은 이메일 제목과 1:1 매핑시킨다는 식으로 간단히 해결 가능한데, 시작시간/끝나는 시간은 메일 내용(Body) 에서 1:1 매핑이 안된다는 문제가 있습니다. 당연히 메일 내용을 아무리 간단히 휴가 시작하는 날짜, 휴가 끝나는 날짜로 딱 정해놓는다고 해도 “2018-09-06~2018-09-08 “ 이런식으로 본문이 적힐 것이기 때문에 메일 내용을 내가 원하는 대로 분리를 해서 넣어야 합니다. 그런데 기본적으로 이런 성분 분류는 지원을 하고 있지 않아요. 그렇다고 지메일의 다른 성분을 이용하기도 애매합니다. ‘참조’, ‘첨부파일’ 뭐 이런 성분들을 저런 날짜분류에 활용하기도 애매하죠.

그래서 Trigger 와 Action 중간에 Filter(필터) 가 존재합니다. 일종의 커스터마이즈 코딩을 하게 되는 부분인데, 완전 자유로운 것은 아니고 어디까지 Trigger 와 Action 을 연결시켜 주는 역할을 합니다. 여기에서 커스터마이즈 코딩은 자바스크립트를 활용하게 되는데요,  제가 만들어 준 부분은 아래와 같습니다.


(자바스크립트 작성 모습. 맨 아래 주석 라인은 all day 이벤트인지 정하는 boolean 옵션인데 휴가라서 체크했더니 마지막 날짜가 하루 잘리더라고요.. 저거없으면 약속시간이 정오로 고정되는데 어쩔수없이 주석처리함)

이건 다름 아니라 지메일의 본문 내용이

2018-09-06
2018-09-07
휴가갑니다~

로 적혀 있으면 첫 번째 줄은 캘린더의 startTime 에, 두 번째 줄은 endTime 에, 그리고 전체 bodyText 는 캘린더의 Description 에 연결시키라는 것입니다. 이런식으로 메일 내용을 간단히 분류해서 Action 에 꽂을 수 있습니다. 당연히 이건 메일이 딱 저런 형태로만 씌여져 있어야 합니다. 만약 좀더 고난이도의 Text parsing 이 필요하다면 더 추가적으로 구현을 할 수도 있겠지요. 그런데 저기 나오는 GoogleCalendar.addDetailedEvent.setDescription(); 같은 어플리케이션 클래스 함수 몰라도 돼요. 옆에 무슨 함수 쓸수 있는지 다 나오고(몇개안돼요) 자동완성도 됩니다. 

무척 간단하게 제작되는 소프트웨어이지만 확장성을 높여 주는 부분이 바로 이 Filter 이므로 Filter 가 적용된 애플릿은 배포할 수가 없고 개인적 목적으로만 쓰게 되어 있습니다. 다른이도 쓸 수 있게 배포하고 싶으면 유료버전을 사야 돼요.

짧게  쓰려고 했는데 길어졌네요… 더 깔끔하게 이해가기 쉽게 써야 하는데 그냥 대충대충 넘어간 부분도 많고 죄송합니다. 혹시 직접 해보실 분들은 해보시다 막히면 제가 그때 그때 답변 드리도록 하겠습니다. 참, 제가 만든 애플릿은 javascript 가 포함되어 있어서 배포가 안돼요. 그래서 저 애플릿을 직접 공유하는건 어려울것 같습니다. 
둘러보니까 이미 다른사람들이 제작 배포 공유한 것들 중에 재밌어 보이는 애플릿도 많더라고요. 문자를 보내서 LG 세탁기를 돌릴 수 있는 애플릿 같은것도 있는것같고… 역시 세상에는 공부하면 재밌는게 참 많은것 같습니다. 감사합니다!




6
  • 프로그래밍은 ㅊㅊ
  • 1어시 뿌-듯


목록
번호 제목 이름 날짜 조회 추천
공지 티타임 게시판 이용 규정 2 Toby 15/06/19 31712 7
15062 오프모임29일 서울 점심 먹읍시다(마감) 9 + 나단 24/11/22 400 4
15061 스포츠[MLB] 2024 AL,NL MVP 수상자.jpg 1 김치찌개 24/11/22 109 1
15060 스포츠[MLB] 2024 AL,NL 사이영 수상자.jpg 김치찌개 24/11/22 103 1
15059 음악[팝송] 션 멘데스 새 앨범 "Shawn" 김치찌개 24/11/22 85 0
15058 방송/연예예능적으로 2025년 한국프로야구 순위 및 상황 예언해보기 11 문샤넬남편(허윤진남편) 24/11/21 451 0
15057 일상/생각우리는 어쩌다 이렇게 됐을까 3 SKT Faker 24/11/21 613 1
15056 오프모임23일 토요일 14시 잠실 보드게임, 한잔 모임 오실 분? 4 트린 24/11/20 342 0
15055 방송/연예페미니스트 vs 변호사 유튜브 토론 - 동덕여대 시위 관련 25 알료사 24/11/20 3392 32
15054 생활체육[홍.스.골] 10,11월 대회 상품공지 켈로그김 24/11/19 257 1
15053 여행여자친구와 부산여행 계획중인데 어디를 가면 좋을까요?! 29 포도송이 24/11/19 699 0
15052 일상/생각오늘도 새벽 운동 다녀왔습니다. 5 큐리스 24/11/19 468 9
15051 일상/생각의식의 고백: 인류를 통한 확장의 기록 11 알료사 24/11/19 505 6
15050 게임[1부 : 황제를 도발하다] 님 임요환 긁어봄?? ㅋㅋ 6 Groot 24/11/18 466 0
15049 꿀팁/강좌한달 1만원으로 시작하는 전화영어, 다영이 영어회화&커뮤니티 19 김비버 24/11/18 946 10
15048 의료/건강고혈압 치료제가 발기부전을 치료제가 된 계기 19 허락해주세요 24/11/18 724 1
15047 일상/생각탐라에 쓰려니 길다고 쫓겨난 이야기 4 밀크티 24/11/16 900 0
15046 정치이재명 1심 판결 - 법원에서 배포한 설명자료 (11page) 33 매뉴물있뉴 24/11/15 1810 1
15045 일상/생각'우크라' 표기에 대한 생각. 32 arch 24/11/15 1014 5
15044 일상/생각부여성 사람들은 만나면 인사를 합니다. 6 nothing 24/11/14 910 20
15043 일상/생각수다를 떨자 2 골든햄스 24/11/13 466 10
15042 역사역사적으로 사용됐던 금화 11종의 현재 가치 추산 2 허락해주세요 24/11/13 565 7
15041 영화미국이 말아먹지만 멋있는 영화 vs 말아먹으면서 멋도 없는 영화 8 열한시육분 24/11/13 696 3
15040 오프모임11/27(수) 성북 벙개 33 dolmusa 24/11/13 766 3
15039 요리/음식칵테일 덕후 사이트 홍보합니다~ 2탄 8 Iowa 24/11/12 415 7
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글