Google 캘린더를 집계하여 이번 주에 얼마나 체육관에 갔는지 알려주는 Slack 알림
3484 단어 슬랙GoogleAppsScriptslackbot
이유
최근 체육관을 시작했습니다. 회비가 수수하게 높기 때문에, 어느 정도 다녔는지를 자동으로 카운트하고 싶다.
필요한 설정
이미지
이런 식으로 매주 금요일에 집계해준다.
스크립트
테스트시는 main() 함수를 실행해, Trigger 설정을 포함해 실장할 때는 init()를 실행.cal_name
, gym_name
, slack_email
를 적절히 바꾸십시오
function init(){
// Trigger every week
ScriptApp.newTrigger('main').timeBased().everyWeeks(1).onWeekDay(ScriptApp.WeekDay.FRIDAY).atHour(10).create();
}
function main() {
var cal_name = "Feelcycle";
var gym_name = "Feelcycle";
var slack_email = "[email protected]";
var end_date = new Date();
var start_date = new Date(end_date.getTime());
start_date.setDate(start_date.getDate() - 6); // one week from now
events = getEventsFromCal(cal_name, start_date, end_date);
Logger.log("Fetched " + events.length + " events");
content = createEmailBody(events, gym_name);
Logger.log("content " + content);
sendToMyself(slack_email, gym_name, content, start_date, end_date);
}
function getEventsFromCal(name, start, end) {
var cal = CalendarApp.getCalendarsByName(name)[0];
if (cal) {
return cal.getEvents(start, end);
} else {
Logger.log("カレンダーが見つかりませんでした: " + name);
}
}
function formatDateStr(d){
Logger.log(d);
return d.getFullYear() + ("0" + (d.getMonth() + 1)).slice(-2) + ("0" + d.getDate()).slice(-2);
}
function sendToMyself(email_address, gym_name, content, start_date, end_date) {
var startDateStr = formatDateStr(start_date);
var endDateStr = formatDateStr(end_date);
var fileName = gym_name + "_weekly_stats" + "_" + startDateStr + "_" + endDateStr
GmailApp.createDraft(email_address, fileName, content).send();
}
function createEmailLine(i, event, gym_name){
var title = event.getTitle();
var startIdx = title.indexOf("]"); // parse event title
var endIdx = title.indexOf("@");
var realTitle = title.slice(startIdx + 1, endIdx);
var date = event.getStartTime();
var dateStr = date.toLocaleDateString();
var str = (i+1) + ") " + dateStr + " - " + realTitle + "、" + gym_name + "に行ったね"
return str
}
function createEmailBody(events, gym_name) {
// loop through all events
if (events.length > 0) {
var body = "";
for (var i = 0; i < events.length; i++) {
var event = events[i];
var str = createEmailLine(i, event, gym_name);
if (i < events.length - 1) {
body += str + "\r\n";
}
else {
body += str;
}
}
return body;
} else {
return gym_name + "に行ってないじゃん";
}
}
Reference
이 문제에 관하여(Google 캘린더를 집계하여 이번 주에 얼마나 체육관에 갔는지 알려주는 Slack 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y26805/items/7451d721cd116b699752
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
테스트시는 main() 함수를 실행해, Trigger 설정을 포함해 실장할 때는 init()를 실행.
cal_name
, gym_name
, slack_email
를 적절히 바꾸십시오function init(){
// Trigger every week
ScriptApp.newTrigger('main').timeBased().everyWeeks(1).onWeekDay(ScriptApp.WeekDay.FRIDAY).atHour(10).create();
}
function main() {
var cal_name = "Feelcycle";
var gym_name = "Feelcycle";
var slack_email = "[email protected]";
var end_date = new Date();
var start_date = new Date(end_date.getTime());
start_date.setDate(start_date.getDate() - 6); // one week from now
events = getEventsFromCal(cal_name, start_date, end_date);
Logger.log("Fetched " + events.length + " events");
content = createEmailBody(events, gym_name);
Logger.log("content " + content);
sendToMyself(slack_email, gym_name, content, start_date, end_date);
}
function getEventsFromCal(name, start, end) {
var cal = CalendarApp.getCalendarsByName(name)[0];
if (cal) {
return cal.getEvents(start, end);
} else {
Logger.log("カレンダーが見つかりませんでした: " + name);
}
}
function formatDateStr(d){
Logger.log(d);
return d.getFullYear() + ("0" + (d.getMonth() + 1)).slice(-2) + ("0" + d.getDate()).slice(-2);
}
function sendToMyself(email_address, gym_name, content, start_date, end_date) {
var startDateStr = formatDateStr(start_date);
var endDateStr = formatDateStr(end_date);
var fileName = gym_name + "_weekly_stats" + "_" + startDateStr + "_" + endDateStr
GmailApp.createDraft(email_address, fileName, content).send();
}
function createEmailLine(i, event, gym_name){
var title = event.getTitle();
var startIdx = title.indexOf("]"); // parse event title
var endIdx = title.indexOf("@");
var realTitle = title.slice(startIdx + 1, endIdx);
var date = event.getStartTime();
var dateStr = date.toLocaleDateString();
var str = (i+1) + ") " + dateStr + " - " + realTitle + "、" + gym_name + "に行ったね"
return str
}
function createEmailBody(events, gym_name) {
// loop through all events
if (events.length > 0) {
var body = "";
for (var i = 0; i < events.length; i++) {
var event = events[i];
var str = createEmailLine(i, event, gym_name);
if (i < events.length - 1) {
body += str + "\r\n";
}
else {
body += str;
}
}
return body;
} else {
return gym_name + "に行ってないじゃん";
}
}
Reference
이 문제에 관하여(Google 캘린더를 집계하여 이번 주에 얼마나 체육관에 갔는지 알려주는 Slack 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y26805/items/7451d721cd116b699752텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)