Chatworks APIでタスクをGoogleTaskにコピーする


こんなもんQiitaの有志たちが先に投稿しまくっとるわ!と思いつつも学習メモとして投げておきます。

Chatworkからタスクを取得

chatwork.gs
function GetCWTasks() {
  // プロパティ値取得
  const token = PropertiesService.getScriptProperties().getProperty('CW_TOKEN');

  // パラメータセット
  var params = {
    headers : {"X-ChatWorkToken" : token},
    method : "get"
  };

  // 自分の情報を取得する
  var url = "https://api.chatwork.com/v2/my/status";

  // JSON形式で取得
  var strRespons = UrlFetchApp.fetch(url, params);
  var json = JSON.parse(strRespons.getContentText());

  // エラーのある場合
  if (json['errors']){
    Logger.log("ChatWorkタスクの取得に失敗しました。");
    return null;
  }

  // 未完タスクがある場合
  if (json['mytask_num'] > 0){

    // タスク一覧
    url = "https://api.chatwork.com/v2/my/tasks";

    // JSON取得
    strRespons = UrlFetchApp.fetch(url, params);
    json = JSON.parse(strRespons.getContentText());

    // タスク取得
    return json;
  }

  return null;
}

トークンはプロジェクトのプロパティに書き込んであるのでそれを取得するようにしてます。
トークンの発行方法については公式のドキュメントにあるのでそちらを参照。

Googleタスクに追加

function AddGoogleTask(task) {
  //UNIXTime(秒)->Date(ミリ秒)変換
  var limitDate = new Date(task['limit_time'] * 1000);

  var task = {
    title: task['room']['name'],
    notes: task['body'],
    due: Utilities.formatDate(limitDate, "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'") 
  };

  // Googleタスク登録
  var taskListId = PropertiesService.getScriptProperties().getProperty('LIST_ID');
  var res = Tasks.Tasks.insert(task, taskListId);

  if (res.id != null){
    Logger.log("TaskID: " + res.id);
  } else {
    Logger.log("タスク書き込みエラー");
  }
}

GASエディタのメニューのリソース>Googleの拡張サービスから「Tasks API」を有効にしておきます。
Chatworks側で取れる日付がUNIX時間なのでGoogleTaskに合わせてISO 8601形式に変換して登録する必要があります。
エラー処理は適当です…

問題が発生

なんとChatwork側で期限時間を指定してるのに…GoogleTaskには設定する場所がない!
よくみたらGoogleTask側には開始時間の設定項目がありますが、
Chatworkのタスクの時間は期限なので意味合いが異なりますね…
(こういうの作る前に気づくべきなのに~~!)

あとは書き込み済みのChatworkタスクのIDをスプレッドシートに書き込んで保存しておくような仕組みも必要ですが、
時間はとりあえず置いといてタスクを一箇所に収集しておきたい方にはいいかもしれません。

…さて自分のタスク管理はどうしようかな。