概要
スプレッドシートでボタンを押すと、Googleカレンダーの1週間の予定をTrelloに流し込む機能を作りました。
Googleスプレッドシート からボタンを押すことで起動する仕組みになっています。
この記事は自分の備忘録も兼ねて書きました。
なぜ作ったか
個人の予定をGoogleカレンダーで管理していたが、それをタスクとしてチームのtrelloにも登録する必要があったので作りました。
予定を流し込むために必要なもの
Google カレンダーID
Trello APIキー
Trello トークン
Trello リストID
これらは以下で取得していきます。
カレンダーIDの取得
Googleカレンダーを開き、「オーバーフローメニュー」→「設定と共有」を押します。
設定画面が開き、中にカレンダーIDが書いてあります。
Trello APIキーの取得
Trelloにログインした状態でhttps://trello.com/1/appKey/generateを開くと、開発者向けAPIキーを取得することができます。
Trelloトークンの取得
https://trello.com/1/authorize?key=APIキー&name=&expiration=never&response_type=token&scope=read,write
を開くと、トークンを取得できます。
TrelloリストIDの取得
TrelloボードIDを取得し、それを使用してTrelloリストIDを取得します。
まず、Trelloのプロフィール画面からユーザー名を取得します。
取得したユーザー名、APIキー、トークンを使用し、以下のようにAPIを叩くことで、ボードIDを取得できます。
$ curl "https://trello.com/1/members/ユーザー名/boards?key=APIキー&token=トークン&fields=name"
カレンダーの予定を流し込みたいボードIDを使用し、以下のようにAPIを叩くことで、リストIDを取得できます。
$ curl "https://trello.com/1/boards/ボードID/lists?key=APIキー&token=トークン&fields=name"
スプレッドシートからGASを作成
スプレッドシートにGoogle カレンダーID、APIキー、トークン、リストIDを記入します。
Googleスプレッドシートを開き、ツールから「スクリプトエディタ」を開きます。
以下を記述します。
function getCalendarEvents() {
let sheet = SpreadsheetApp.getActiveSheet();
const CALENDAR_ID = sheet.getRange("2", "2").getValue();
const TRELLO_KEY = sheet.getRange("3", "2").getValue();
const TRELLO_TOKEN = sheet.getRange("4", "2").getValue();
const TRELLO_LIST_ID = sheet.getRange("5", "2").getValue();
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
// 期間
let startTime = new Date();
var endTime = new Date();
endTime.setDate(endTime.getDate() + 7);
const events = calendar.getEvents(startTime, endTime);
//APIを叩き、カレンダーの情報を流し込みます。
for(const event of events){
var url = `https://trello.com/1/cards?key=${TRELLO_KEY}&token=${TRELLO_TOKEN}&idList=${TRELLO_LIST_ID}&name=${event.getTitle()}`;
var headers = {
"Accept": "application/json",
"Content-type": "application/json"
}
var options = {
"method": "post",
"headers": headers
};
UrlFetchApp.fetch(url, options);
}
}
実行するために、スプレッドシート内に図形を配置し、右クリックでスクリプトの割り当てをします。ここで「getCalendarEvents」を入力することで作成したコードを実行することができます。