試してみたブログ

AI関連・iPhone/Pixelなどのガジェット・音声入力・サーマルプリンタなど興味をある事をどんどん試してみた際の記録

Obsidianに前日完了したTodoistのタスクを取得する

背景

  • Obsidianにいろいろ記録したい
  • 自動でTodoistの内容であれば記録できそう
  • Pythonで取得するようにした

試してみた

  • TodoistのAPIを使って取得する
  • Obsidian側からではなく、ファイルに出力するようにした
import os
from datetime import datetime, timedelta
import requests

# === 設定 ===========================================
API_TOKEN = "XXXXX"  # ★← ここに自身のトークンを入力
DIRECTORY = "XXXXXX"
# ====================================================

# 昨日の日付取得
yesterday = datetime.now() - timedelta(days=1)
date_str = yesterday.strftime('%Y-%m-%d')

# ファイルパス構築
filename = f"{date_str}.md"
filepath = os.path.join(DIRECTORY, filename)

# Todoist APIから完了タスク取得
headers = {
    "Authorization": f"Bearer {API_TOKEN}"
}
params = {
    "since": yesterday.replace(hour=0, minute=0, second=0).isoformat(),
    "until": yesterday.replace(hour=23, minute=59, second=59).isoformat()
}
response = requests.get(
    "https://api.todoist.com/sync/v9/completed/get_all",
    headers=headers,
    params=params
)

# API エラーハンドリング
if response.status_code != 200:
    print("❌ Todoist APIの呼び出しに失敗しました:", response.text)
    exit(1)

completed_items = response.json().get("items", [])

# 追記するテキスト構成
lines = ["\n# Todoistでの完了項目\n"]

if completed_items:
    for item in completed_items:
        lines.append(f"- {item.get('content', '(内容なし)')}")
else:
    lines.append("- 完了タスクはありません。")

append_text = "\n".join(lines) + "\n"

# ディレクトリがなければ作成
if not os.path.exists(DIRECTORY):
    os.makedirs(DIRECTORY)

# ファイルが存在しない場合は新規作成(初期コンテンツ含む)
if not os.path.exists(filepath):
    with open(filepath, "w", encoding="utf-8") as f:
        f.write(append_text)
    print(f"✅ ファイルが存在しなかったため新規作成しました: {filepath}")
else:
    # ファイルがある場合は末尾に追記
    with open(filepath, "a", encoding="utf-8") as f:
        f.write(append_text)
    print(f"✅ 既存ファイルの末尾に追記しました: {filepath}")
  • 毎日実行する必要があるが、とりあえずは試して価値がでそうであれば続けてみる