0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでTodoist APIにアクセスしてタスクを取得する方法

Posted at

Google Apps Script(GAS)を使ってTodoist APIにアクセスし、タスクの取得を行う方法をご紹介します。REST APIとSync APIを使用し、それぞれからタスクを取得するサンプルコードです。

スクリプトプロパティにAPIトークンを設定

まず、Todoist APIを使用するためには、APIトークンが必要です。スクリプトプロパティにトークンを保存しておきましょう。

// Todoist API トークンの取得
const TOKEN = PropertiesService.getScriptProperties().getProperty('TODOIST_API_TOKEN');

トークンの確認

次に、APIトークンが存在するか確認する内部関数を定義します。

// APIトークンの存在を確認する関数(内部関数)
function _checkToken() {
  if (!TOKEN) {
    throw new Error('API Token is not set. Please set TODOIST_API_TOKEN in Script Properties.');
  }
}

共通オプションの設定

APIへのリクエストの際に使用する共通オプションを設定する関数です。methodを引数として受け取り、リクエストの種類(GETやPOSTなど)に応じたオプションを返します。

// 共通のオプション設定関数(内部関数)
function _getCommonOptions(method) {
  return {
    'method': method,
    'headers': {
      'Authorization': 'Bearer ' + TOKEN,
    }
  };
}

Todoist APIへのリクエスト関数

Todoist APIへリクエストを送信する共通関数です。POSTリクエストの場合は、リクエストボディとしてpayloadを指定し、JSON形式で送信します。また、POSTの際には一意のリクエストIDをヘッダーに追加します。

// Todoist APIへの共通リクエスト関数(内部関数)
function _fetchFromTodoistAPI(url, method, payload = null) {
  _checkToken(); // トークンの確認

  const options = _getCommonOptions(method);
  
  // POSTリクエストの場合、payloadを設定
  if (payload) {
    options.payload = JSON.stringify(payload);
    options.headers['Content-Type'] = 'application/json'; // JSONデータとして送信
  }
  
  // X-Request-Id を POST のみで追加
  if (method === 'post') {
    options.headers['X-Request-Id'] = Utilities.getUuid(); // 一意のリクエストIDを生成
  }

  try {
    const response = UrlFetchApp.fetch(url, options);

    if (![200, 204].includes(response.getResponseCode())) {
      throw new Error(`Failed to perform ${method.toUpperCase()} request: ${response.getResponseCode()}`);
    }

    return response.getContentText() ? JSON.parse(response.getContentText()) : null; // 応答があれば解析
  } catch (error) {
    Logger.log(`Error in ${method.toUpperCase()} request: ` + error.message);
    Logger.log(error.stack); // スタックトレースをログに出力
    return null;
  }
}

REST APIから全タスクを取得

TodoistのREST APIを使用して全タスクを取得する関数です。この関数では、GETリクエストを使用してタスクを取得します。

// REST APIから全タスクを取得する関数
function getAllTasksFromREST() {
  const url = 'https://api.todoist.com/rest/v2/tasks';
  return _fetchFromTodoistAPI(url, 'get') || [];
}

Sync APIから全タスクを取得

TodoistのSync APIを使用して全タスクを取得する関数です。Sync APIは全リソースを同期するため、全てのタスク情報を取得することが可能です。

// Sync APIからタスクを取得する関数
function getTasksFromSync() {
  const url = "https://api.todoist.com/sync/v9/sync";
  const payload = {
    'sync_token': '*',  // 全タスクを取得
    'resource_types': '["items"]'
  };
  const result = _fetchFromTodoistAPI(url, 'post', payload);
  return result ? result.items : [];
}

まとめ

このコードでは、TodoistのAPIを用いてタスクを取得する方法を示しました。REST APIは基本的なタスク情報の取得に使用でき、Sync APIはより多くの情報を一度に取得できる強力な方法です。

APIトークンはスクリプトプロパティで管理し、セキュリティを確保しながらGASで簡単にTodoistのデータを操作できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?