Google 캘린더에 등록되어 있는 예정을 전날 밤에 리마인드해 주는 라인 Bot 작성해 보았다!
Google 캘린더의 내일 일정을 알려주는 LINE을 만들려고했습니다.
대체로 3시간 정도로 완성했다.
한 곳에서 막힌 곳이 있기 때문에 거기가 없으면 더 빨랐을 것입니다 ...
기능 소개
Google 캘린더에 등록되어 있는 예정을 전날 밤 LINE에서 알려 주는 LINE Notify.
개발 경위
평소, 예정의 관리를 Google 캘린더로 하고 있지만, 곤란한 것에, 잊는다, 원래 보는 것이 귀찮게 생각되어 왔다…
다만, 예정을 푹 빠뜨리면 선방에 무례하므로, 어쨌든 피해야 한다…
거기서, 매일 밤 내일의 예정을 알려 주는 LINE bot를 실장하면, 좋은 것이라고 생각해 개발했다.
엄밀히 말하면 Line bot가 아니라 LINE Notify였습니다.
만들기
①LINE notify의 등록.
Line Notify는 이쪽으로부터
로그인하면 마이페이지에서 어디에 알려줄지(개발자 본인의 LINE인지 그룹인지)를 선택한다.
토큰이 발행되기 때문에 이것을 메모 메모.
②GAS 스크립트 작성
그런 다음 Google 앱 스크립트 스크립트를 작성하는 작업.
스프레드시트 메뉴 > 도구 > 스크립트 <>로 이동
여기!
음, 이번에 구현하는 두 가지 기능
곧, [a]의 기능으로부터 실장해 간다.
Google 캘린더의 콘텐츠를 스프레드시트에 출력하려면 캘린더 설정에서 캘린더 ID를 확인하세요.
function calendar() {
//1 スプレッドシートを読み込む
var sp =SpreadsheetApp.getActiveSheet();
//2 カレンダーをIDで読み込む
var cal=CalendarApp.getCalendarById( '*自分のカレンダーID*' );
//3 カレンダーのイベントの期間を指定
var date = new Date();
var today = new Date(date.getFullYear(),date.getMonth(),date.getDate()+1,0,0);
var endday = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1,23,59);
var event = cal.getEvents(today,endday);
sp.clear();
//4 イベントをスプレッドシートへ書き出す
for(var i=1;i<event.length+1; i++){
sp.getRange('a'+i).setValue(event[i-1].getTitle()); //イベントタイトル
sp.getRange('b'+i).setValue(event[i-1].getStartTime()); //イベント開始時刻
sp.getRange('c'+i).setValue(event[i-1].getEndTime()); //イベント終了時刻
}
};
다음으로②의 실장.
이쪽은, 특별히 문제 없다…
function postContent() {
var sheet =SpreadsheetApp.getActiveSheet();
var LastRow = sheet.getLastRow();
var content = "\nこんばんにゃ\n定時なので明日の予定をお知らせするぞ~\n\n";
if (LastRow === 0) {
content +="明日の予定はなし\n有意義に過ごせ!\n\n"
}
else {
for (var n=1;n<=LastRow;n++){
var title=sheet.getRange(n, 1).getValue();
var start=sheet.getRange(n, 2).getValue();
var end=sheet.getRange(n, 3).getValue();
var schedule = title + ": \n"+start+"から"+end+"まで\n\n";
content +=schedule
}
}
content += "\n以上";
sendPostContent(content);
}
function sendPostContent(content) {
var token = ['*Line Notifyのアクセストークン*'];
var options = {
"method": "post",
"payload" : {"message": content },
"headers": {"Authorization": "Bearer " + token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
이제 라인에 전달한 결과!
뭐야? 날짜와 시간을 알 수 없습니다!
영어 버전이 아니야 www
당연하지만 이것을 일본어판으로 바꾸고 싶다!
거기서, 여러가지 격투했다…
스프레드시트의 표시 형식을 변경해 보거나 출력 형식을 변경해 보거나…etc
결국, LINE에 둔 본문의 표시 형식을 바꾸면 올 오케이였다!
Utilities.formatDate()라는 함수가 아무래도 있다고 하는 정보를 얻었으므로, 즉시 구현!
var jst_start = Utilities.formatDate(start,"JST","yyyy年M月d日 H時m分");
var jst_end = Utilities.formatDate(end,"JST","yyyy年M月d日 H時m分");
이런 느낌.
결국 이뤄졌다고 하는 것이, 이하의 녀석.
function postContent() {
var sheet =SpreadsheetApp.getActiveSheet();
var LastRow = sheet.getLastRow();
var content = "\nこんばんにゃ\n定時なので明日の予定をお知らせするぞ~\n\n";
if (LastRow === 0) {
content +="明日の予定はなし\n有意義に過ごせ!\n\n"
}
else {
for (var n=1;n<=LastRow;n++){
var title=sheet.getRange(n, 1).getValue();
var start=sheet.getRange(n, 2).getValue();
var end=sheet.getRange(n, 3).getValue();
var jst_start = Utilities.formatDate(start,"JST","yyyy年M月d日 H時m分");
var jst_end = Utilities.formatDate(end,"JST","yyyy年M月d日 H時m分");
var schedule = title + ": \n"+jst_start+"から"+jst_end+"まで\n\n";
content +=schedule
}
}
content += "\n以上";
sendPostContent(content);
}
function sendPostContent(content) {
var token = ['*Line Notifyのアクセストークン*'];
var options = {
"method": "post",
"payload" : {"message": content },
"headers": {"Authorization": "Bearer " + token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
이것으로 일본어가 되었다! !
마지막으로 지금까지 쓴 2개의 함수를 각각 정시 실행하도록 설정해 버려!
이 시계 같은 놈을 눌러,
트리거 추가에서 함수 지정
(이번이라면 calender와 postContent)
이런 느낌으로 하면 OK!
calender를 먼저 정시 실행하도록 조심해! !
이상, Google 캘린더의 예정을 전날의 밤에 리마인드 해 주는 LINE Notify의 구현이었습니다!
피드백 기다리고 있습니다!
Reference
이 문제에 관하여(Google 캘린더에 등록되어 있는 예정을 전날 밤에 리마인드해 주는 라인 Bot 작성해 보았다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/macha_iriiida/items/bf987d158c9f6852878d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)