LoginSignup
1
1

More than 3 years have passed since last update.

Todoistのタスク名に,内容に応じて自動的に絵文字を追加する (例: Buy milk → 🛒 Buy milk)

Posted at

やりたいこと

Todoistにタスクを自分で追加すると,勝手にタスク名に絵文字をつけてくれる
なんか見やすい!!!

wanttodo

どうすればできる?

下図のような処理のフローで実現する!

flow

準備すること

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するため,優先的に置換したい絵文字はディクショナリの上位に配置する必要あり.
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1