Skip to content

Instantly share code, notes, and snippets.

@tanabee
Last active November 3, 2021 15:09
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tanabee/6d42e416c7beef8ecd7288b8b0332edb to your computer and use it in GitHub Desktop.
Save tanabee/6d42e416c7beef8ecd7288b8b0332edb to your computer and use it in GitHub Desktop.
## アジェンダ
1. 議題1 ( @who N分 )
## 議事内容
### 議題1
## 決定事項
*
## アクション
*
##日時
[[DATE]] [[DURATION]]
## 出席者(敬称略)
* [ ] @oukayuka
* [ ] @norifumi
* [ ] @HikaruTayama
* [ ] @tanabee
/**
* 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