- 다양한 주제에 대해 자유롭게 글을 작성하는 게시판입니다.
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어시 뿌-듯


목록
번호 제목 이름 날짜 조회 추천
1577 과학/기술수학계에 천지개벽할 사건이 일어났네요. 19 darwin4078 15/11/17 7848 0
10296 도서/문학일독김용(一讀金庸): 김용 전집 리뷰 34 기아트윈스 20/02/16 7848 23
739 영화머니볼 : 스포츠 드라마의 종언(스포일러) 35 구밀복검 15/08/06 7849 0
4804 정치이재명이 싫은 이유? 2007년에 그가 한 "짓" 때문에. 38 Bergy10 17/02/08 7850 14
2894 과학/기술보톡스 (Botox) 7 모모스 16/05/25 7857 2
1303 문화/예술조성진 제 17회 쇼팽 국제 피아노 콩쿠르 우승 3 reason 15/10/21 7861 0
12306 일상/생각동물복지에 대한 생각 4 천하대장군 21/11/27 7865 10
193 기타잡설 #01 온라인과 광고 5 Secundo 15/06/03 7869 0
8172 IT/컴퓨터Gmail 내용으로 구글캘린더 이벤트 자동생성하기 8 CIMPLE 18/09/06 7869 6
9089 의료/건강오늘 받은 정관수술 후기 19 미스터주 19/04/17 7871 34
157 기타[계층] 프라탑이 쌓여가면서 5 BLUE_P 15/06/01 7876 0
13136 일상/생각요즘 애들 어휘력 부족이 정말 심각하다? 저는 동의 안 됩니다. 33 OneV 22/09/05 7877 0
305 기타국가지정병원 이야기 7 세상의빛 15/06/11 7879 0
1022 정치'헬조선증후군'이란?-jtbc기사(link) 20 천무덕 15/09/17 7880 0
286 기타안녕하세요~ 처음으로 인사 올려요 29 지니 15/06/10 7881 0
3486 꿀팁/강좌 치즈와 GMO이야기 19 눈부심 16/08/10 7886 4
233 기타ROM 족 약 30년만의 커밍아웃 16 이젠늙었어 15/06/06 7887 0
1046 음악Kath Bloom - Come Here 2 새의선물 15/09/20 7889 0
1336 일상/생각마리텔, AMA 게시판, 소통 5 王天君 15/10/25 7889 4
213 기타시나리오를 구합니다.... 15 표절작곡가 15/06/05 7892 0
225 기타2007-09 불황은 어떤 사람에게 가장 피해를 줬을까? (링크 수정) 3 낭만토토로 15/06/06 7893 0
8490 일상/생각한 때 썸 타던 남자가 갑자기 연락와서 마음 복잡하네요 24 쭈꾸미 18/11/08 7893 6
6924 경제원전으로 보는 마르크스의 노동가치론 20 소맥술사 18/01/10 7896 17
4074 게임디시 이제동 갤러리에 '쌌던' 잡글들. 9 알료사 16/11/04 7897 4
1440 일상/생각아차! 말실수 했구나 5 바코드 15/11/03 7898 0
목록

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

댓글