🙄

TodoistのAPI v9に対応したライブラリを使ってタスクの日付と優先度を変更する

2022/12/06に公開

TodoistのAPIがv9になって、v8が使えなくなりました。pyTodoistもそのうち対応するんだと思いますが、自作のスクリプトをすぐに対応させたかったのでTodoist公式ライブラリのtodoist-api-pythonを使って作り直すことにしました。なお、todoist-pythonは終了のようです。

APIも含め開発者向けのページはDeveloping with Todoist – Guides | Todoist Developerにあります。

やりたいこと

  • 特定のプロジェクトに属するタスクの優先度と日付を変更したい

Alexaを使ってTodoタスクを追加できるようにしているのですが、優先度や日付がデフォルトのまま登録されるので、これを自動で変更したい(というかv8でやっていた)のです。

やっていること

REST APIのサンプルが参考になりますというかそれぞれほぼそのままです。

  • まず全部のプロジェクトを取得し
  • 希望するプロジェクトを探してプロジェクトIDを保存しておき
  • 全部のタスクを取得し
  • 希望するプロジェクトに属する(プロジェクトIDが合致する)タスクを探し
  • 優先度と日付を再設定する

という流れです。

また、datetimeで取得できる今日の日付をそのままTodoistに渡せないので、文字列に変換しています。
sysへのパスを追加していますが、たぶん環境ごとに違うと思うので各自変えてください。

コード

import sys
sys.path.append('/opt/homebrew/lib/python3.9/site-packages')
import datetime

from todoist_api_python.api import TodoistAPI

api = TodoistAPI("***your Todoist API key***")

# 今日の日付を文字列に変換(そのままだとJSONに入らないので)
str_today = str(datetime.date.today())

# プロジェクト一覧を取得
try:
    projects = api.get_projects()
except Exception as error:
    print(error)

# プロジェクト一覧から特定のプロジェクトのIDを探して保存
for project in projects:
    if project.name == "Alexa ToDo リスト" :
        project_ID_ToDo = project.id
    elif project.name == "Alexa の買い物リスト" :
        project_ID_Buy = project.id


# タスク一覧を取得
try:
    tasks = api.get_tasks()
except Exception as error:
    print(error)

# タスク一覧から目的のプロジェクトに属するタスクの日付と優先度を変更
# 優先度は最高が4、最低が1
for task in tasks:
    if task.project_id ==  project_ID_Buy:
#        print("Buy",task.content,task.id,task.priority,task.due.date)
        try:
            is_success = api.update_task(task_id=task.id,priority = 4,due_date = str_today)
            print(is_success)
        except Exception as error:
            print(error)

    elif task.project_id ==  project_ID_ToDo:
#        print("ToDo",task.content,task.id,task.priority,task.due.date)
        try:
            is_success = api.update_task(task_id=task.id,priority = 3,due_date = str_today)
            print(is_success)
        except Exception as error:
            print(error)

Discussion