todoistのAPIを用いることでプログラムを通じて操作をすることが可能。
※開発者向けドキュメントはこちら
今回はこちらのAPIを用いて日付を指定してタスクを追加するサンプロをこちらに書き残しておく
トークン発行は下記から行える。
https://todoist.com/prefs/integrations
目次
- 目次
- cURLを用いてタスクを追加する方法
- JavaScript SDKを用いてタスクを追加するサンプル
- SDKを使わないで日付指定タスクを追加するサンプル
- AWS lambdaで動かすためのサンプル
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については以前整理したポストがあるので、一応そちらも貼っておく。
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がサポートされたようで、そちらを試してみたかったというのが理由)
コードは下記においています。
プロジェクトをクローンして、
yarn build
することで生成されるzipファイルをlambdaにアップロードすることで利用可能。
APIトークンや追加するタスクについては環境変数から設定するようにしたので、AWS lambdaのダッシュボード上で設定してから動かします。
サンプルは以上です。