Todoistは、Todoリスト作成としてかなり使いやすいツールですが、無料ではデータ出力などアウトプット面の機能は充実していません。
データを出力したい場合は他の機能と連携するかAPIを使う必要があります。
本記事はTodoist+PythonでAPIを操作してCSVファイルにタスク出力する処理を紹介する記事です。
具体的には以下の2点について説明します。
・【Python+Todoist】CSVファイル出力に必要な処理
・【Python+Todoist】CSVファイル出力実装例
目次
【Python+Todoist】CSVファイル出力に必要な処理
TodoistのタスクをCSVファイルに出力するために必要な処理は以下の2つです。
・Todoistの予定を取得する
・PythonでCSVファイルにデータを書き込む
Todoistの予定を取得する
Todoistのタスクを取得するために必要な準備は以下の3点です。
・TodoistのAPIキーを取得
・TodoistのAPI用ライブラリをインストール
・タスク取得処理を作成
手順の詳細については「「todoist-python」ライブラリでタスクを取得する方法」をお読みください。
PythonでCSVファイルにデータを書き込む
CSVファイルにデータを書き込む方法がありますが、今回は「csv」ライブラリを使用します。
CSVファイルに書き込む手順は以下の4つです。
・ファイルを開く
・テキストデータを2次元配列に格納
・CSVファイルに書き込む
・ファイルを閉じる
上記手順をソースコードにすると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import csv text = [["あいうえお", "かきくけこ"],["さしすせそ", "たちつてど"]] #書き込む文字列 path = 'sample/test.csv' # 書き込むファイルのパス mode = 'w' # ファイルを開く target_file = open(path, mode, encoding="utf_8") # ファイルオブジェクトのデータをCSVファイル形式で読み込む dataWriter = csv.writer(target_file, lineterminator='n') # CSVファイルに書き込む dataWriter.writerows(text) # ファイルを閉じる target_file.close() |
上記コードを実行すると以下のようになります。
あいうえお | かきくけこ |
さしすせそ | たちつてと |
※CSVファイルをカンマ区切りで開いた場合
CSVライブラリの具体的な使い方については「PythonでCSVファイルに書き込む方法」をお読みください。
【Python+Todoist】CSVファイル出力実装例
今回はTodoistタスクの以下の内容を出力する処理を作成します。
出力する情報:今日の予定
・1列目:プロジェクト名
・2列目:タスク名
・3列目:タスクの状況。終わっていたら「済み」を入れる
◆出力例
プロジェクト,タスク名,タスクの状態
インボックス,テスト2,
インボックス,テスト3,
インボックス,テスト1,済み
一行目は各カラムの説明の行です。
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 44 | # ライブラリ設定 import os import csv # Todoist自作モジュール読み込み from TodoistApiController import TodoistItems path = 'task.csv' # 書き込むファイルのパス mode = 'w' output = [['プロジェクト', 'タスク名', 'タスクの状態']] i = 1 for item in items: # プロジェクト名 text_line = [t.get_project_name(item)] text_line.append(item['content']) 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 = '' text_line.append(checked) output.append(text_line) i = i+1 # CSVファイルに書き込む処理 # ファイルを開く target_file = open(path, mode, encoding="utf_8") # ファイルオブジェクトのデータをCSVファイル形式で読み込む dataWriter = csv.writer(target_file, lineterminator='n') # CSVファイルに書き込む dataWriter.writerows(output) # ファイルを閉じる target_file.close() |
※上記コード単体では動作しないので「TodoistのAPIで今日の予定を確認する〜PythonでTodoistを管理〜」のTodoistモジュールも合わせて実装してください。
◆実行結果
task.csvの出力内容
プロジェクト | タスク名 | タスクの状態 |
インボックス | テスト2 | |
インボックス | テスト3 | |
インボックス | テスト1 | 済み |
※CSVファイルをカンマ区切りで開いた場合
終わりに
Todoist単体ではデータを出力する機能がありませんので、今回紹介した例のようにAPIを使って出力する必要があります。
今回はタスク名やプロジェクト名のみでしたが、タスクテーブルには期限や日付などの情報も格納されているのでそれらの情報をCSVファイルに出力することも可能です。
上記コードが動作できたら他の値の出力についても試してみてください。
関連記事>>【Python+Todoist】スプレッドシートにタスクを出力する
Todoist+Pythonまとめ>>Todoist+Pythonの活用方法まとめ