やりたいこと
Todoistにタスクを自分で追加すると,勝手にタスク名に絵文字をつけてくれる
→ なんか見やすい!!!
どうすればできる?
下図のような処理のフローで実現する!
準備すること
Python 依存環境
python==3.7.4
todoist-python==8.1.1
Python スクリプト
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import re
import todoist
# 前回のタスク情報のキャッシュがある場合,キャッシュを削除.
if os.path.exists(r"~/.todoist-sync/"):
print("===== Deleting cache ...")
os.rmdir("~/.todoist-sync/")
# APIキーを環境変数から取得.
print("===== Sync my todoist data ...")
api_key = os.environ.get("TODOIST_API_TOKEN")
# Todoistのサーバーデータをローカルに同期.
api = todoist.TodoistAPI(api_key)
api.sync()
# 全タスク情報を取得.
tasks_all_list = [item.data for item in api.state["items"]]
# 絵文字に置換する言葉と対応する絵文字のディクショナリ.
wordspattern_and_emoji_dict = {
r"[Rr]eply|[Mm]ail" : "✉",
r"[Cc]ancel|[Uu]nsubscribe" : "❌",
r"[Cc]heck|[Ee]xpire" : "⚠",
r"[Hh]ospital" : "🏥",
r"[Bb]arber" : "💈",
r"[Mm]ovie|[Cc]inema" : "🎥",
r"[Dd]inner|[Ll]unch|[Bb]reakfast" : "🍽",
r"[Bb]uy|[Oo]rder" : "🛒",
r"[Mm]eeting" : "🤝",
r"[Ww]atch" : "📺"
}
print("===== Renaming tasks ...")
for task in tasks_all_list:
# タスク名とタスクIDを抽出.
task_name = task["content"]
task_id = task["id"]
for word, emoji in wordspattern_and_emoji_dict.items():
if re.search(word, task_name):
# 絵文字置換対象のタスク名であった場合
if re.search(r"^[\w\[]", task_name):
# 文頭が絵文字ではない場合
task_name_replaced = f"{emoji} {task_name}"
print(
f" *** Replaced:\n"
f" {task_name}\n"
f" -> {task_name_replaced}\n"
)
# タスク名を絵文字置換後のものにアップデート
api.items.update(task_id, content=task_name_replaced)
break
# 変更内容をサーバーに反映
api.commit()
注意点
- Todoistで一回Syncすると
~/.todoist-sync/
ディレクトリにキャッシュが保存される.
そして,Syncすると上記キャッシュファイルからの差分を取得する.
本スクリプトでは毎回全タスクを取得したいため,最初にキャッシュを削除している. - Todoistサーバーに反映させるためには,スクリプトの最後に
api.commit()
をする必要がある. - 置換文字のディクショナリは,上から順番に探索してマッチしたら置換して
break
するため,優先的に置換したい絵文字はディクショナリの上位に配置する必要あり.