Log.d(myLife);

プログラミングを中心に趣味など。

【GAS】Trelloで日報記録

会社で書いている日報とは別に、個人で日報(日記)として毎日記録をつけています。 記録先としてはDay oneなどの日記アプリではなく、Googleカレンダーを利用しています。

定期的な予定として1日の終わりに日報記入の時間を入れています。


予定画面


予定詳細画面

説明欄に日報の内容を記入していきます。 今はそのまま平文を記入していますが、markdown形式で書いておいて、Trelloに登録した時にMarkdownが反映されるかも試してみたいです。


実装

TrelloからBoardId, ListId, LabelIdを取得するコードは割愛。 一点、躓いたポイントとしては、Trelloからの返却値がJSONであることを忘れていて、なかなか出力できないなというケアレスミスが発生。

下記のコードに加えて、GASのトリガーで日記記入の翌日に起動するように設定すればOK

Code

Trello操作関連

var prop = PropertiesService.getSctiptProperties().getProperties();
var key = prop.TRELLO_KEY;
var token = prop.TRELLO_TOKEN;
var username = prop.TRELLO_USER;
var baseURL = 'https://trello.com/1/';

// リスト追加関数
function addList(payload) {
  var boardId = 'id';
  var url = baseUrl + '/boards/' + boardId + '/lists/?key=' + key + '&token=' + token;
  var options = {
    'method' : 'post',
    'muteHttpExceptions' : true,
    'payload' : payload
  }
  var result = UrlFetchApp.fetch(url, options);
  return result;
}

// カード追加関数
function addCard(payload) {
  var url = baseUrl + '/cards/?key=' + key + '&token=' + token;
  var options = {
    'method' : 'post',
    'muteHttpExceptions' : true,
    'payload' : payload
  }
  UrlFetchApp.fetch(url, options);
}

AddTrello.gs

function addTrello() {
    var cal = CalendarApp.getCalendarById('id');
    
    var yest = new Date();
    yest.setDate(yest.getDate() - 1);
    var option = {
        search : '日報'
    };
    var events = cal.getEventsForDay(yest, option);
    var result = new Array();
    for (var i in events) {
        var title = events[i].getTitle();
        var desc = events[i].getDescription();
        if (title === '日報') {
            result = [yest, desc];
        }
    }
    
    var ss = SpreadsheetApp.openById('id').getSheetByName('name');
    // crD = currentDay, crM = currentMonth
    var crD = yest.getDate();
    var crM = yest.getMonth() + 1;
    // ssM = SpreadSheetMonth(命名は適当。スプレッドシートにMMを記録) 
    var ssM = sh.getRange('B1').getValue();
    
    if (crM == ssM + 1) {
        if (crD == 1) {
            var payload = {
                'name' : crM + '月',
                'pos' : 'top'
            }
            
            var res = addList(payload);
            var text = JSON.parse(res);
            
            // 現在の月, TrelloのリストIdを更新
            sh.getRange('B1').setValue(crM);
            sh.getRange('D1').setValue(text.id);
            
            // 更新記録としてスプレッドシートに残しておく用
            var array = [crM, text.id]
            sh.appendRow(array);
        }
    }
    
    if (result.length !== 2) return;
    if (result[1] == "") {
        var value = '日報が書かれていません';
        result.splice(1, 1, value);
    }
    
    // リストにカードを追加
    var cardTitle = Utilities.formatDate(result[0], 'Asia/Tokyo', 'MM/dd') + " " + title;
    var caedDesc = result[1];
    var listId = sh.getRange('D1').getValue();
    ver payload2 = {
        'name' : cardTitle,
        'desc' : cardDesc,
        'due' : '',
        'idList' : listId,
        'urlSource' : ''
    }
    
    addCard(payload2);
}