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のデータを操作できます。