GoogleカレンダーにTrelloの特定のリストを同期したい。
私個人はTrello上にToday,Week,Monthといったリストを作ってタスクの管理を行っています。
しかし、チームではGoogleカレンダー上へ外出予定以外に社内作業のタスクなども登録しており、手動同期は手間がかかる上、登録していないとタスクの共有が行えない状況でした。
Todayリストを常に本日の予定として登録する。
幸い、TrelloにはAPIが存在し、GoogleAppScript経由で比較的簡単に同期出来そうです。
APIの取得は http://qiita.com/AKB428/items/a4a9ff2893affb20f99c を参考に行いました。
GASを色々調べながらゴリゴリ書いてみました。
// TrelloのAPIKey
var trelloKey = 'hogefugahogehogefugahoge';
// Trello連携用トークンID
var trelloToken = 'hogefugahoge';
// 取得対象のリストID
var trelloTodayList = 'hogefuga';
// Trelloユーザー名
var userName = 'hogehoge';
// 連携先GoogleカレンダーID
var gcalId = 'hoge@group.calendar.google.com';
// 連携時に削除キーにするDescription
var delDescription = 'Added by Trello'
function Trello2Gcal() {
// 当日日付
var d = new Date();
d.setHours(23);
d.setMinutes(59);
d.setSeconds(0);
// 前日日付
var yd = new Date();
yd.setDate(d.getDate() - 1);
yd.setHours(0);
yd.setMinutes(0);
yd.setSeconds(0);
// 本日+前日のTrello予定を初期化
deleteTrelloEvents(d);
deleteTrelloEvents(yd);
// Torelloから予定を取得
var listurl = 'https://trello.com/1/lists/' + trelloTodayList + '/cards?key=' + trelloKey + '&token=' + trelloToken + '&fields=name';
var todayTask = UrlFetchApp.fetch(listurl);
var tasks = JSON.parse(todayTask.getContentText());
for(var key in tasks){
Logger.log(d + ":" + tasks[key].name + ":" + tasks[key].id );
// Googleカレンダーへ投稿
var gcal = CalendarApp.getCalendarById(gcalId);
// Descriptionに削除用のキーを指定して登録
gcal.createEvent(tasks[key].name + " From Trello", d, d,{description:delDescription})
}
}
// Trello登録されたイベントを削除する。
function deleteTrelloEvents(dt){
Logger.log(dt);
var gcal = CalendarApp.getCalendarById(gcalId);
var events = gcal.getEventsForDay(dt);
for(var i=0; i < events.length; i++){
var dsc = events[i].getDescription();
if(dsc==delDescription){
events[i].deleteEvent()
}
}
}
あとはトリガーを15分~30分おきぐらいで走るようにしたらTrelloのリストが常に今日の予定として登録されるようになりました。
課題
- 日付、時刻指定がある場合にその指定通りに登録する。
- 現状は他の共有カレンダーを邪魔しないように23:59固定なので。
- Trello上のコメント等をDescriptionにうまく共有する。
- 週の予定をさらにうまいこと登録したい。