Python で Todoist の「今日のタスク」を取得し、プロジェクトごとに表示する

以前、Python で Todoist の「今日のタスク」を取得・表示するスクリプトを紹介しましたが、今回はそれのバージョンアップです。

前回の記事では「今日のタスク」を一括表示していましたが、今回のプログラムでは Todoist のプロジェクトごとに表示するようになっています。

ご参考まで。

2023/01/17 追記

いつのまにか Todoist 公式 の Python API が刷新されていました。
(プロジェクトやタスクが辞書型ではなくクラス型に変更されていました)
https://developer.todoist.com/rest/v2/?python#overview

下記に新しいコードを貼り付けましたので参考にしてください。

#This code displays "today's tasks" by project. 
import todoist
import datetime

def GetTodaysTasks(items):
    tasks = []
    now = datetime.datetime.now()
    search_date_str = now.strftime('%Y-%m-%d')
    
    for item in items:
        due = item['due']
        if due is not None:
            if due['date'] == search_date_str:
                tasks.append(item)
    
    return tasks

def GetProjectDict(projects):
    dict = {}
    for prj in projects:
        dict[prj['id']] = prj['name']
    return dict

def PrintTasksByProject(tasks, project_dict):
    for k, v in project_dict.items():
        items = []
        for task in tasks:
            if (task['project_id']==k and task['checked']==0):
                items.append(task['content'])

        if len(items)>0:
            print('* '+v)
            for item in items:
                print(item)
            print('')

    
if __name__=='__main__':

    api = todoist.TodoistAPI('your token')
    response = api.sync()
    items = api.state['items']
    projects = api.state['projects']
    
    todays_tasks = GetTodaysTasks(items)
    project_dict = GetProjectDict(projects)
    PrintTasksByProject(todays_tasks, project_dict)
#This code displays "today's tasks" by project. 
from todoist_api_python.api import TodoistAPI
import datetime

def GetTodaysTasks(items):
    tasks = []
    now = datetime.datetime.now()
    search_date_str = now.strftime('%Y-%m-%d')
    
    for item in items:
        due = item.due
        if due is not None:
            if due.date == search_date_str:
                tasks.append(item)
    
    return tasks

def GetProjectDict(projects):
    dict = {}
    for prj in projects:
        dict[prj.id] = prj.name
    return dict

def PrintTasksByProject(tasks, project_dict):
    for k, v in project_dict.items():
        items = []
        for task in tasks:
            if (task.project_id==k and task.is_completed==False):
                items.append(task.content)

        if len(items)>0:
            print('* '+v)
            for item in items:
                print(item)
            print('')

    
if __name__=='__main__':

    api = TodoistAPI('Your Token')
    #response = api.sync()
    items = api.get_tasks()
    projects = api.get_projects()
    
    todays_tasks = GetTodaysTasks(items)
    project_dict = GetProjectDict(projects)
    PrintTasksByProject(todays_tasks, project_dict)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次