コードはこちらに置きました todoist/todoist_random_scheduler.ipynb at master · akiphumi/todoist
パソコンに Python 環境を用意しなくても Colab 上で動きます。 token を自身のものに書き換えてください。
# API token は Settting の Interations で確認 token = '0123456789abcdef0123456789abcdef01234567'
以下のコードで同期したあと、 api.state['labels']
とか api.state['items']
で必要な情報にアクセスします。
api = TodoistAPI(token) api.sync()
タスクの数がよほど大きくない限り、同期制限には引っかからないと思いますが、同期制限をかけてくれるデコレータをみかけたので、せっかくなので入れ込みました。
# The rate limited version of the sync function @rate_limit(0.8) # 50/60 = 0.833... def rate_limited_commit(*args): # print("Syncing...") return commit(*args)
同期したいラベルを指定して、Daily Goal の数だけランダムピックアップして、今日のタスクに更新します。
items = [] # 同期したいラベルを指定 key = 'next' for item in api.state['items']: if labels.get(key) in item['labels']: items.append(item['id']) daily_goals = random.sample(items, api.state['user']['daily_goal'])
下記の同期制限なしのコードは iOS の Pythonista アプリでも動作します。
import random import time from todoist.api import TodoistAPI from tqdm import tqdm token = '0123456789abcdef0123456789abcdef01234567' api = TodoistAPI(token) api.sync() labels = {} for lable in api.state['labels']: labels.setdefault(lable['name'], lable['id']) print(labels) items = [] key = 'next' for item in api.state['items']: if labels.get(key) in item['labels']: items.append(item['id']) print(items) daily_goals = random.sample(items, api.state['user']['daily_goal']) print(daily_goals) for item in tqdm(api.state['items']): if item['id'] in daily_goals: item.update(due={'string': 'today'}) api.commit()