Skip to content

Instantly share code, notes, and snippets.

@hedgejanuary
Last active February 26, 2020 12:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hedgejanuary/a76c2e04253d901547c5e1c5dc012674 to your computer and use it in GitHub Desktop.
Save hedgejanuary/a76c2e04253d901547c5e1c5dc012674 to your computer and use it in GitHub Desktop.
Google Calendar から今後7日間の予定を取得し、MS Teamsのスケジュール用チャンネルに投稿する。
//スケジュールアシスタントが今後7日間の予定を投稿してくれる
function GoogleCalToMSTeams() {
var list = '';
var calEvents = '';
var calendarInUse = [
// 使用するカレンダーのアドレスとそのラベリング
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■XXX\'s schedule\n'],
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■Out of office (staff)\n'],
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■XXX events\n'],
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■XXX Office events\n'],
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■Due dates\n'],
['xxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', '\n##■Office closing dates\n']
];
// 登録されたイベントをカレンダーごとにリストアップ
for (var i = 0; i < calendarInUse.length; i++) {
calEvents = listUpEvents(calendarInUse[i][0]);
if (calEvents) {
list += calendarInUse[i][1] + calEvents + '\n';
}
}
if (list) {
var payload = {
"text": "Hi, here's the latest schedule for the next 7 days. \n" + " \n" + list + " \n" + "\n###Abbreviations: \n" + "* BT = Business trip \n* OOO = Out of office",
}
postTeams(payload);
}
}
//1週間の予定をリストアップ
function listUpEvents(cal_id) {
var list = '';
var cal = CalendarApp.getCalendarById(cal_id);
var calEvents = '';
//1週間分の予定を確認
var now = new Date();
var end = new Date(now.getTime() + (7 * 24 * 60 * 60 * 1000)); // 1週間後
var events = cal.getEvents(now, end);
for (var i = 0; i < events.length; i++) {
if (events[i].isAllDayEvent()) {
var startDate = new Date(events[i].getStartTime());
var endDate = new Date(events[i].getEndTime() - (1 * 24 * 60 * 60 * 1000));
if ((endDate - startDate) / (24 * 60 * 60 * 1000) < 2) {
calEvents += Utilities.formatDate(events[i].getStartTime(), "GMT+0900", "dd MMM ");
} else {
calEvents += Utilities.formatDate(events[i].getStartTime(), "GMT+0900", "dd MMM ");
calEvents += Utilities.formatDate(endDate, "GMT+0900", "- dd MMM ");
}
} else {
calEvents += Utilities.formatDate(events[i].getStartTime(), "GMT+0900", "dd MMM HH:mm");
calEvents += Utilities.formatDate(events[i].getEndTime(), "GMT+0900", "-HH:mm ");
}
calEvents += events[i].getTitle();
list += calEvents + " \n";
}
return list;
}
//MS Teamsへポスト
function postTeams(payload) {
// POSTオプション
var options = {
"method": 'POST',
"payload": JSON.stringify(payload)
}
// アクセス先
var url = "XXXXXXXXXXXXXXXXXXXXX"; //WebHook URL
// POSTリクエスト
var response = UrlFetchApp.fetch(url, options);
// HTML結果を取得(引数のcharsetは設定したほうが良い)
var content = response.getContentText('UTF-8');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment