チャットワークからGoogleカレンダーの登録を行う
16903 ワード
前提
会議などの連絡はチャットだけじゃなくてカレンダーにも登録しておいてほしいと言われたことありませんか。
またはその逆。その他にはカレンダーを登録する時、登録する人のメールアドレスを毎回検索するのも面倒ですよね。
できること
チャットワークで以下のテンプレートに沿った発言を行うと、その発言をトリガーとしてカレンダー登録を行います。
[info][title]今月末の予算について[/title]■参加予定メンバー
[To:1956584] AAA[To:1956582] BBB
■日時
2017/9/26 10:00 ~ 10:30
■場所
ほげほげ
■備考
http://www.hogehogeeeeeeeeeeeeeeeeeeeeee.co.jp
[/info]
準備
- A列に名前、B列にチャットワークID、C列にメールアドレスを記載したスプレッドシートを用意する
- そのスプレッドシートのシート名を「メールリスト」にする
- 下のソースコードを5分単位で実行する
-
サンプル
名前
チャットワークID
メールアドレス
AAA
To:1956584
[email protected]
BBB
To:1956582
[email protected]
ソースコード
function SetGoogleCalendar()
{
// チャットワークから発言を取得するためのデータを設定
var params = {
headers: {
"X-ChatWorkToken": "チャットワークのトークンID"
},
method: "get",
};
var url = "https://api.chatwork.com/v2/rooms/" + "該当の発言が行われるルームID" + "/messages";
var response = UrlFetchApp.fetch(url, params);
// 取得する発言がなかったら何も行わない
if (response == "") {
return 0;
}
// JSONにデータを直す
var jsonList = JSON.parse(response.getContentText("UTF-8"));
// チャット1件、1件ずつに分けて処理を行う
for each(json in jsonList) {
// チャット本文の中身を今回使う内容に合わせて分割する
json = json["body"].replace(/\r?\n/g, "");
json = json.replace("[info][title]", "[")
.replace("[/title]", "]")
.replace("■日時", "][")
.replace("■場所", "][")
.replace("■備考", "][")
.replace("[/info]", "]");
json = json.match(/\[.+?\]/g)
.toString()
.replace(/\[/g, "")
.replace(/\]/g, "");
var text = json.split(",");
// 参加メンバーのカレンダーにもスケジュールを登録するためにスプレと連携してメールアドレスを取得する
var menberNum = 0;
var members = [];
while (true) {
if (text[1 + menberNum].match(/To:/)) {
members.push(GetMailAddress(text[1 + menberNum]));
menberNum++;
} else {
break;
}
}
// カンレダーに登録するための内容に分割する
var date = text[1 + menberNum].split("~");
var startDay = date[0].split(" ");
// カンレダーへチャットワークの内容を登録する
createEvent(text[0], startDay[0], startDay[1], date[1], text[2 + menberNum], text[3 + menberNum], members);
}
}
function GetMailAddress(userId)
{
var url = "スプレッドシートのURL";
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheet = spreadsheet.getSheetByName("メールリスト");
//シートの最終行番号、最終列番号を取得
var startRow = 1;
var startColumn = 1;
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
// シートの縦横すべてを取得
var sheetData = sheet.getSheetValues(startRow, startColumn, lastRow, lastColumn);
for (var i = 0; i < lastRow; i++) {
if (sheetData[i][1] == userId) {
return sheetData[i][2];
}
}
return null;
}
function createEvent(title, day, startTime, endTime, location, agenda, members)
{
var memberList = "";
for each(member in members){
memberList += member + ",";
}
var calendar = CalendarApp.getCalendarById('カレンダー登録者のメールアドレス');
calendar.createEvent(title,
new Date(day + " " + startTime),
new Date(day + " " + endTime),
{
description: agenda,
location: location,
guests: memberList
}
);
}
参考
- チャットワークAPI
- Apps Script
- GASでSpreadsheetを操作する自分的ベストプラクティス
- 【保存版】Google Apps Scriptリファレンス~キーワード別インデックス
- Google Apps Script リファレンス
サンプル
名前 | チャットワークID | メールアドレス |
---|---|---|
AAA | To:1956584 | [email protected] |
BBB | To:1956582 | [email protected] |
function SetGoogleCalendar()
{
// チャットワークから発言を取得するためのデータを設定
var params = {
headers: {
"X-ChatWorkToken": "チャットワークのトークンID"
},
method: "get",
};
var url = "https://api.chatwork.com/v2/rooms/" + "該当の発言が行われるルームID" + "/messages";
var response = UrlFetchApp.fetch(url, params);
// 取得する発言がなかったら何も行わない
if (response == "") {
return 0;
}
// JSONにデータを直す
var jsonList = JSON.parse(response.getContentText("UTF-8"));
// チャット1件、1件ずつに分けて処理を行う
for each(json in jsonList) {
// チャット本文の中身を今回使う内容に合わせて分割する
json = json["body"].replace(/\r?\n/g, "");
json = json.replace("[info][title]", "[")
.replace("[/title]", "]")
.replace("■日時", "][")
.replace("■場所", "][")
.replace("■備考", "][")
.replace("[/info]", "]");
json = json.match(/\[.+?\]/g)
.toString()
.replace(/\[/g, "")
.replace(/\]/g, "");
var text = json.split(",");
// 参加メンバーのカレンダーにもスケジュールを登録するためにスプレと連携してメールアドレスを取得する
var menberNum = 0;
var members = [];
while (true) {
if (text[1 + menberNum].match(/To:/)) {
members.push(GetMailAddress(text[1 + menberNum]));
menberNum++;
} else {
break;
}
}
// カンレダーに登録するための内容に分割する
var date = text[1 + menberNum].split("~");
var startDay = date[0].split(" ");
// カンレダーへチャットワークの内容を登録する
createEvent(text[0], startDay[0], startDay[1], date[1], text[2 + menberNum], text[3 + menberNum], members);
}
}
function GetMailAddress(userId)
{
var url = "スプレッドシートのURL";
var spreadsheet = SpreadsheetApp.openByUrl(url);
var sheet = spreadsheet.getSheetByName("メールリスト");
//シートの最終行番号、最終列番号を取得
var startRow = 1;
var startColumn = 1;
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
// シートの縦横すべてを取得
var sheetData = sheet.getSheetValues(startRow, startColumn, lastRow, lastColumn);
for (var i = 0; i < lastRow; i++) {
if (sheetData[i][1] == userId) {
return sheetData[i][2];
}
}
return null;
}
function createEvent(title, day, startTime, endTime, location, agenda, members)
{
var memberList = "";
for each(member in members){
memberList += member + ",";
}
var calendar = CalendarApp.getCalendarById('カレンダー登録者のメールアドレス');
calendar.createEvent(title,
new Date(day + " " + startTime),
new Date(day + " " + endTime),
{
description: agenda,
location: location,
guests: memberList
}
);
}
参考
- チャットワークAPI
- Apps Script
- GASでSpreadsheetを操作する自分的ベストプラクティス
- 【保存版】Google Apps Scriptリファレンス~キーワード別インデックス
- Google Apps Script リファレンス
Author And Source
この問題について(チャットワークからGoogleカレンダーの登録を行う), 我々は、より多くの情報をここで見つけました https://qiita.com/yunomi/items/642781edc9bda427deb0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .