Todoistは、Todoリスト作成としてかなり使いやすいツールですが、無料ではデータ出力などアウトプット面の機能は充実していません。
データを出力したい場合は他の機能と連携するかAPIを使う必要があります。
本記事はTodoist+PythonでAPIを操作してスプレッドシートにタスク出力する処理を紹介する記事です。
具体的には以下の2点について説明します。
・【Python+Todoist】スプレッドシート出力に必要な処理
・【Python+Todoist】スプレッドシート出力実装例
目次
【Python+Todoist】スプレッドシート出力に必要な処理
Todoistのタスクをスプレッドシートに出力するために必要な処理は以下の2つです。
・Todoistの予定を取得する
・Pythonでスプレッドシートにデータを出力する
Todoistの予定を取得する
Todoistのタスクを取得するために必要な準備は以下の3点です。
・TodoistのAPIキーを取得
・TodoistのAPI用ライブラリをインストール
・タスク取得処理を作成
手順の詳細については「「todoist-python」ライブラリでタスクを取得する方法」をお読みください。
Pythonでスプレッドシートにデータを出力する
スプレッドシートにデータを出力するために必要な準備は以下の3点です。
・GoogleのAPIキーの取得
・ライブラリをインストール
・スプレッドシートを出力する処理を作成
Todoist APIの手順とほぼ同じですが、GoogleのAPI取得は少し面倒です。
手順の詳細については「SlackbotでSpreadsheetsに書き込む方法〜PythonでのBot開発〜」をお読みください。
【Python+Todoist】スプレッドシート出力実装例
今回はTodoistタスクの以下の内容を出力する処理を作成します。
出力する情報:今日の予定
・1列目:プロジェクト名
・2列目:タスク名
・3列目:タスクの状況。終わっていたら「済み」を入れる
1カラム目にプロジェクト名はタスクテーブルにはないので親テーブルから取得する必要があります。
Todoist自作モジュールにget_project_name()というメソッドを用意したのでこちらで呼び出せばOKです。
2カラム目のタスク名はタスクテーブルの'content'に格納されています。
3カラム目には、タスクの状態を入れます。
完了済みなら「済み」、終わっていない場合は空欄にします。
完了状態はテーブルの'checked'に格納されていますが、繰り返しのタスクは完全に完了するまで'checked'が入りません。
繰り返しのタスクかどうかはタスクテーブルの['due']['is_recurring']に格納されています。
判定例は以下の通り。
1 2 3 4 5 | date = ''2019-11-04'' if item['due']['is_recurring'] and date not in item['due']['date']: checked = '済み' else: checked = '' |
上記例ではitem['due']['date']に日付が含められていない場合は済みにします。
実装例は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # ライブラリ設定 import gspread import os from oauth2client.service_account import ServiceAccountCredentials # Todoist自作モジュール読み込み from TodoistApiController import TodoistItems # Googleアクセス用のパラメータ設定 scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name('client_secrets.json', scope) gc = gspread.authorize(credentials) wks = gc.open('テスト').sheet1 # Todoistのパラメータ設定 t = TodoistItems(os.environ['TODOIST_API_TOKEN']) items = t.find_by_date('2019/11/04', False) i = 1 # タスクの数だけループ for item in items: # プロジェクト名出力 wks.update_cell(i, 1, t.get_project_name(item)) # タスク名出力 wks.update_cell(i, 2, item['content']) # v8以降のデータかチェック key_check_due = t.key_check(item, 'due') # 取得したタスクを表示 if item['checked']: checked = '済み' else: # 繰り返しのタスクをチェック。(次の予定が今日以外ならチェック済みにする) if key_check_due: if item['due']['is_recurring'] and date.replace('/', '-') not in item['due']['date']: checked = '済み' else: checked = '' else: checked = '' # チェック済み出力 wks.update_cell(i, 3, checked) i = i+1 |
※上記コード単体では動作しないので「TodoistのAPIで今日の予定を確認する〜PythonでTodoistを管理〜」のTodoistモジュールも合わせて実装してください。
終わりに
Todoist単体ではデータを出力する機能がありませんので、今回紹介した例のようにAPIを使って出力する必要があります。
今回はタスク名やプロジェクト名のみでしたが、タスクテーブルには期限や日付などの情報も格納されているのでそれらの情報をスプレッドシートに出力することも可能です。
上記コードが動作できたら他の値の出力についても試してみてください。
Todoist+Pythonまとめ>>Todoist+Pythonの活用方法まとめ