trelloの機能をGASで拡張する(trelloの毎日のタスクをevernoteに保存する)

いままで,タスク管理をevernoteで行っていました.
ちょっと友人からTrelloを紹介されて使って毎日います.
どのくらいのタスクをこなしているのかがいまいち可視化できていないため,evernoteに戻そうかと..
しかし,もう自分で作ったほうが早いと思い作りました!!(前置きが長いですね(笑))

実現したこと

evernoteのスクショ(実際のノート)

f:id:ka1357amnbpdr:20200119033259p:plain
実際のevernoteで作られたノート

実装内容

  1. trelloからアーカイブをしたものを取得
  2. アーカイブされたものから最終更新が前日のものだけを取得
  3. メールの内容をhtml記述で変数に入れていく.
    1. 実行したタスク
    2. 実行した時刻
  4. GmailApp.sendEmailでevernoteの転送メールに送信(3の内容がnullの時はbodyを表示)

trelloのapi取得・evernoteの転送メール取得

trello apiの取得

https://trello.com/app-key ここから,手動でトークンを生成します.

evernoteの転送メールの取得

help.evernote.com

取得したいボードidをメモする

f:id:ka1357amnbpdr:20200123161926p:plain (このボードはtrelloの日本語コミュニティーです.公開されているので,質問などができるみたいです)

このボードのボードid:"iuVU7Osk"になります. 自分のボードにアクセスして,urlの中にあるものから探します.

GASで毎日実行されるように設定

www.pnkts.net

コード

config.gs

key = "自分のkey";
token = "自分のtoken";
board_id = 'boardのid';

trello.gs

//変数定義
var count ={
      all_count: 0,
      private_count:0,
      peoples_count:0,
      team_count:0
     };
     
 //  昨日を日本時間で取得
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() -1 );
//タスクの内容
var body = '';

//ここまで

function get_my_task() {
    //それぞれのboardのurl
    var url = [
      'https://api.trello.com/1/boards/'+ private_board_id +'/cards/closed?key='+key+'&token='+token,
      'https://api.trello.com/1/boards/'+ peoples_board_id +'/cards/closed?key='+key+'&token='+token,
      'https://api.trello.com/1/boards/'+ team_development +'/cards/closed?key='+key+'&token='+token
    ];

   
    
    for(var i = 0;i<url.length;i++){
        //  get private trello board
        //  リクエスト情報を入れる
        var json = JSON.parse(UrlFetchApp.fetch(url[i],{'method':'get'}).getContentText());
        //それぞれのタスクにh1でタイトルをつけていく
        if(i == 0) body += "<h1>privateタスク</h1>";
        else if(i == 1) body += "<h1>peoplesタスク</h1>";
        else if(i == 2) body += "<h1>teamタスク</h1>";

        //  本文の中身を作成する
        for(var j = 0;j<json.length;j++){
          //  最終更新した時刻を取得
          var last_active_date = new Date(Date.parse(json[j].dateLastActivity));
        //日本時間に調節する
          last_active_date.setHours(last_active_date.getHours() + 9);
          var d = last_active_date.getDate();
          var m = last_active_date.getMonth();
          var date ="実行時刻:"+ last_active_date.getHours() +"h" + last_active_date.getMinutes() + "m";
          //更新日が昨日のものだけを取得する
          if(d == yesterday.getDate() && m == yesterday.getMonth()){
            count['all_count'] += 1;
            body += "<li>"+json[j].name +"(" + date +") "+"[" + last_active_date+"]"+ "</li>";
          }
        }
        if(i == 0){
          console.log("完了チェックリストの追加");
          add_action_log();
        }
    };
    
    console.log(body);
    task_number = count['all_count'];
    return body;
}

function add_action_log(){
  var actions = 'updateCheckItemStateOnCard'
  var action_private_url = 'https://api.trello.com/1/boards/'+private_board_id+'?actions='+actions+'&boardStars=none&cards=none&card_pluginData=false&checklists=none&customFields=false&fields=none&lists=none&members=none&memberships=none&membersInvited=none&membersInvited_fields=all&pluginData=false&organization=false&organization_pluginData=false&myPrefs=false&tags=false&key='+key+'&token='+token;
  var action_json = JSON.parse(UrlFetchApp.fetch(action_private_url,{'method':'get'}));
  for(var k = 0;k<action_json.actions.length;k++){
    var last_action_date = new Date(Date.parse(action_json.actions[k].date));
    var date = "実行時間:" + last_action_date.getHours() + "h" + last_action_date.getMinutes() + "m";
    last_action_date.setMonth(last_action_date.getHours() + 9);
    var action_d = last_action_date.getDate();
    if(action_d == yesterday){
      body += "<li>"+action_json.actions[k].data.card.name + "[" + action_json.actions[k].data.checkItem.name + "]" + "(" + date +")</li>";
      count['all_count'] += 1;
    }
  }
  return body;
}

main.gas

function myFunction() {
  var content = get_my_task();
  
  var date = new Date();
  var title = date.getFullYear() + "年" + date.getMonth() + 1 +"月" + date.getDate()  - 1 +"日したこと(" + task_number +")"+"@ToDo";
  console.log(title);
  GmailApp.sendEmail(
    'evernoteの転送先メールアドレス', 
    title, 
    '完了タスクがありません',
    {
      htmlBody:content
    }
  );
}

参考サイト

その他,多数のサイトからヒントを得ました

https://www.excite.co.jp/news/article/Cobs_1872840/?p=5www.excite.co.jp

tonari-it.com

tech.nikkeibp.co.jp