Last active
November 3, 2021 15:09
-
-
Save tanabee/6d42e416c7beef8ecd7288b8b0332edb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## アジェンダ | |
1. 議題1 ( @who N分 ) | |
## 議事内容 | |
### 議題1 | |
## 決定事項 | |
* | |
## アクション | |
* | |
##日時 | |
[[DATE]] [[DURATION]] | |
## 出席者(敬称略) | |
* [ ] @oukayuka | |
* [ ] @norifumi | |
* [ ] @HikaruTayama | |
* [ ] @tanabee |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* docId: Google Docs の ID | |
* name: カレンダーに登録されている定例の名前 | |
* slackUrl: incoming webhook の URL | |
*/ | |
var mtgs = [ | |
{ | |
docId: '', | |
name: '', | |
slackUrl: '' | |
} | |
]; | |
// 数字を二桁の文字列に修正 | |
function toDoubleDigit(num) { | |
if (num < 10) { | |
return '0' + num; | |
} else { | |
return String(num); | |
} | |
} | |
// Date を HH:mm 形式の文字列に変換 | |
function getTimeFormatted(date) { | |
return date.getHours() + ':' + toDoubleDigit(date.getMinutes()); | |
} | |
// CalendarEvent から日付を YYYY/mm/dd 形式で取得 | |
function getDateFormatted(calendarEvent) { | |
return calendarEvent.getStartTime().toLocaleString().split(' ')[0]; | |
} | |
// CalendarEvent から開始・終了時間の文字列を得る | |
function getDuration(calendarEvent) { | |
return getTimeFormatted(calendarEvent.getStartTime()) + ' - ' + getTimeFormatted(calendarEvent.getEndTime()); | |
} | |
// Qiita:Team に投稿する | |
function postArticle(article) { | |
var url = 'http://globis.qiita.com/api/v2/items'; | |
var token = 'Qiita:Team API トークン'; | |
var data = { | |
"body": article.body, | |
"coediting": true, | |
"tags": [ | |
{ | |
"name": "議事録" | |
} | |
], | |
"title": article.title | |
}; | |
var payload = JSON.stringify(data); | |
var res = UrlFetchApp.fetch(url, { | |
method: 'POST', | |
headers: { | |
"Content-Type": 'application/json', | |
Authorization: 'Bearer ' + token | |
}, | |
payload: payload | |
}); | |
var content = JSON.parse(res.getContentText("UTF-8")); | |
return content.url; | |
} | |
// Qiita の記事作成 | |
function makeArticle(calendarEvent, docId) { | |
var doc = DocumentApp.openById(docId); | |
var title = doc.getName().replace('[[DATE]]', getDateFormatted(calendarEvent)); | |
var body = doc.getBody() | |
.getText() | |
.replace('[[DATE]]', getDateFormatted(calendarEvent)) | |
.replace('[[DURATION]]', getDuration(calendarEvent)); | |
return { | |
title: title, | |
body: body | |
}; | |
} | |
// カレンダーの説明文の先頭に URL 追記 | |
function updateCalendarDescription(url, event) { | |
var description = event.getDescription(); | |
description = 'アジェンダ&議事録\n' + url + '\n\n' + description; | |
event.setDescription(description); | |
} | |
// Slack に POST | |
function postSlack(name, slackUrl, qiitaUrl) { | |
var body = { | |
text: '「' + name + '」のアジェンダ&議事録はこちらです :bow: ' + qiitaUrl | |
}; | |
var payload = JSON.stringify(body); | |
var res = UrlFetchApp.fetch(slackUrl, { | |
method: 'POST', | |
headers: { | |
"Content-Type": 'application/json' | |
}, | |
payload: payload | |
}); | |
} | |
// 実行関数 | |
function main() { | |
var now = new Date(); | |
var end = new Date(now.getTime() + (7 * 24 * 60 * 60 * 1000)); | |
mtgs.forEach(function (mtg) { | |
var event = CalendarApp.getDefaultCalendar().getEvents(now, end, {search: mtg.name})[0]; | |
if (event === undefined) return; | |
var article = makeArticle(event, mtg.docId); | |
var url = postArticle(article); | |
updateCalendarDescription(url, event); | |
postSlack(mtg.name, mtg.slackUrl, url); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment