- 회원들이 추천해주신 좋은 글들을 따로 모아놓는 공간입니다.
- 추천글은 매주 자문단의 투표로 선정됩니다.
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 세탁기를 돌릴 수 있는 애플릿 같은것도 있는것같고… 역시 세상에는 공부하면 재밌는게 참 많은것 같습니다. 감사합니다!



* Toby님에 의해서 티타임 게시판으로부터 게시물 복사되었습니다 (2018-09-18 09:53)
* 관리사유 : 추천게시판으로 복사합니다.



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


목록
번호 제목 이름 날짜 조회 추천
621 정치/사회픽션은 사회를 어떻게 이끄는가 (1) 13 Danial Plainview 18/04/22 5840 15
613 정치/사회북미 정상회담을 앞둔 여덟 가지 생각 5 Danial Plainview 18/04/08 6497 14
612 정치/사회미중갈등의 미래와 한국의 선택 19 Danial Plainview 18/04/08 6106 23
579 체육/스포츠미식축구 입문 : 오펜시브 코디네이터처럼 생각하기 (스압, 용량 많음) 10 Danial Plainview 18/01/19 7053 17
511 체육/스포츠타이거! 타이거! : 게나디 골로프킨-사울 카넬로 알바레즈 전에 대해 19 Danial Plainview 17/09/16 7763 17
505 정치/사회핵무기 재배치의 필연적 귀결에 대한 "무모한" 설명 43 Danial Plainview 17/09/04 6036 3
15 꿀팁/강좌책장에서 책을 치우자! (북스캐너 + 스캔이북 써먹기) 21 damianhwang 15/06/08 30818 1
1383 정치/사회의대 증원과 사회보험, 지대에 대하여...(펌) 45 cummings 24/04/04 8376 37
1228 의료/건강아산병원사건 서울대 교수 실명글과 개인적인 견해 20 cummings 22/08/04 4518 23
740 일상/생각엑셀에 미쳤어요 24 Crimson 18/12/03 6497 27
755 일상/생각노가대의 생존영어 이야기 25 CONTAXS2 19/01/06 6479 25
744 일상/생각건설회사 스케줄러가 하는 일 - 공정율 산정 16 CONTAXS2 18/12/13 7015 18
625 일상/생각한국의 EPC(해외 플랜트)는 왜 망하는가. 49 CONTAXS2 18/05/02 8503 18
553 기타짧은 유치원 이야기 13 CONTAXS2 17/11/28 6875 7
524 일상/생각해외 플랜트 건설회사 스케줄러입니다. 65 CONTAXS2 17/10/05 12258 18
617 일상/생각건설회사 스케줄러가 하는 일 - 입찰 20 CONTAXS2 18/04/18 6645 21
692 IT/컴퓨터Gmail 내용으로 구글캘린더 이벤트 자동생성하기 8 CIMPLE 18/09/06 6360 6
928 역사역사학 강연에서 의용대를 자처하는 이들을 만난 이야기 13 Chere 20/02/29 5238 35
949 역사도철문, 혹은 수면문 이야기 2 Chere 20/04/18 5035 16
803 일상/생각끝나지 않은 투병기 25 Chere 19/05/16 6113 76
1111 문학영원한 인쉐옌 永遠的尹雪艷 下 7 celestine 21/08/01 3580 6
1018 철학/종교타이완바 세계사중국편 (5.4운동) 6 celestine 20/10/15 4371 11
519 경제외감법 개정과 감사인 지정제는 왜 해야하는가 75 CathedralWolf 17/09/26 7866 9
1030 일상/생각아빠의 쉼 총량제 22 Cascade 20/11/13 5265 41
726 꿀팁/강좌홍차넷을 여행하는 히치하이커를 위한 안내서 22 Cascade 18/11/04 7594 27
목록

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글

댓글