at backyard

Color my life with the chaos of trouble.

todoistのAPIを用いて日付を指定してタスクを追加するサンプル

todoistのAPIを用いることでプログラムを通じて操作をすることが可能。

※開発者向けドキュメントはこちら

developer.todoist.com

今回はこちらのAPIを用いて日付を指定してタスクを追加するサンプロをこちらに書き残しておく

なおAPIを操作するにはトークンを発行する必要がある。

トークン発行は下記から行える。

https://todoist.com/prefs/integrations

目次

cURLを用いてタスクを追加する方法

まずは cURL を用いたサンプルから

curl "https://api.todoist.com/rest/v1/tasks" \
    -X POST \
    --data '{"content": "{タスク内容}", "project_id": {プロジェクトID}, "due_date": {YYYY-MM-DD(例:2022-01-01)}}' \
    -H "Content-Type: application/json" \
    -H "X-Request-Id: $(uuidgen)" \
    -H "Authorization: Bearer {設定したtoken}"
  • content にタスクの内容を入力する
  • project_id に対象となるプロジェクトIDを入力する
    • なおこのプロジェクトIDは別途プロジェクトリストを取得するAPIを叩くことで確認可能。サンプルは後述する
  • due_data に指定した日付を入力する (なお、1月の場合などは 01 と書かないと invalid format というエラーが返ってくる)
  • Authorization: Bearer {設定したtoken} に取得したトークンを入力する

プロジェクトの一覧を取得するサンプル

上のAPIを叩く際に project_id が必要になるが、このIDは下記の方法でプロジェクトリストを取得することで確認可能。
(コードはドキュメントからの引用。0123456789abcdef0123456789 というのがトークン部分になるが、ここは取得したトークンに差し替えないと動かない)

curl -X GET \
  https://api.todoist.com/rest/v1/projects \
  -H "Authorization: Bearer 0123456789abcdef0123456789"

JavaScript SDKを用いてタスクを追加するサンプル

todoist APIを用いるためのSDKが用意されている。

下記でインストールして利用する。

yarn add @doist/todoist-api-typescript

日付指定タスクを追加するサンプルは下記。

import { TodoistApi } from '@doist/todoist-api-typescript'

const TOKEN = "取得したトークン";

const api = new TodoistApi(TOKEN);

const content = "牛乳を買う";
const projectId = "{追加したいプロジェクトID}";
const dueDate = "2022-02-20";

try {
  const task = await api.addTask({ content, projectId, dueDate });
  console.log({task});
} catch (err) {
  console.log({err});
}

なお、下記はNode.jsでsample.mjs というように mjs で作成している。そのためtop level awaitで書いている。
(普通にこの書き方で書くとエラーになる場合があるのでその場合は適宜変更してください)

なおtop level awaitについては以前整理したポストがあるので、一応そちらも貼っておく。

shinshin86.hateblo.jp

SDKを使わないで日付指定タスクを追加するサンプル

APIを用いてタスクを追加するだけならSDKを使わなくとも、そこまでコードを書くのは大変ではない。

下記はSDKを使わずに日付指定タスクを追加するサンプルとなる。
(なお、Node.jsで動かしているので node-fetch を別途インストールしている)

import fetch from "node-fetch";

const TOKEN = "{取得したトークン}";
const TASK_API_ENDPOINT = "https://api.todoist.com/rest/v1/tasks";

// task
const content = "牛乳を買う";
const projectId = "{プロジェクトID}";
const dueDate = "2022-02-20";

try {
  const response = await fetch(TASK_API_ENDPOINT, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({content, "project_id": projectId, "due_date": dueDate})
  });

  const json = await response.json();
  console.log({json});
} catch (err) {
  console.log({err});
}

こちらもtop level awaitを使っているので、環境によっては修正が必要。

AWS lambdaで動かすためのサンプル

上のサンプルをもとにAWS lambdaで動かすためのサンプルを作ってみた。
(AWS lambdaもtop level awaitがサポートされたようで、そちらを試してみたかったというのが理由)

コードは下記においています。

github.com

プロジェクトをクローンして、

yarn build

することで生成されるzipファイルをlambdaにアップロードすることで利用可能。

APIトークンや追加するタスクについては環境変数から設定するようにしたので、AWS lambdaのダッシュボード上で設定してから動かします。

サンプルは以上です。