Notionのタスク 一覧でタスクがDoneになったときに完了日付を自動入力する【Notion,Python,GitHub Actions】

はじめに

最近 Notionを使ってタスク管理を再度始めました(昔やっていたのですが、飽きてしまっていて)
しかし タスクがいつ完了したものなのか後から確認するためには、日付を入力してカレンダーから見る必要があります。
この日付入力が少しめんどくさいので、自動化しました。

成果物

コードや 実際に動いている スクリプト :

github.com

実装簡易説明

細かい部分の詳細はRepositoryもしくは以下の参考にしたサイトを確認してください。   実装時に時間がかかった部分のみ記載しておきます。

Notion DB 取得時に query Filter

Notion のDBからデータを取得する際にすべて取得してもいいのですが、重たくなる・一括で取得できる数に制限という問題のため Queryでフィルターをかけてなるべく必要なデータだけ取得していきます。

公式 API DOcumentに フィルターの書き方があるので、こちらを参考にしています。

developers.notion.com

フィルターを書く際に 期限は select 型にしているため、一致しているかどうか( equals )で判別することができます。 しかし、日付( 'date' )は nullなどがないため is_empty で判定をしています。

                "filter": {
                    "and": [
                        {
                            "property": "期限",
                            "select": {
                                "equals": 'Done'
                            }
                        },
                        {
                            "property": "日付",
                            "date": {
                                "is_empty": True
                            }
                        }

                    ]
                }

フィルターはほかにも書き方があるため、必要に応じて変更していくといいかと思います。

developers.notion.com

GitHub Actionsから環境変数を読み込む

GitHub Actionsをpublic Repositoryで呼び出しているため、スクリプトにハードコーディングすることができません。 そのため、環境変数を使っていきたいと思います。

yml ファイルに以下のように設定すると スクリプト側から 呼ぶことができます。

      - name: Run script
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          PRIVATE_DB: ${{ secrets.PRIVATE_DB }}
          WORK_DB: ${{ secrets.WORK_DB }}

この際に GitHub 側に sercret keyで事前に登録しておく必要があります。

参考にさせていただいたサイト qiita.com

Notionのpage Property(date) の更新

地味に詰まったところで、data を更新するときには object 型を入れないといけないみたいです。(公式ドキュメントより)

今回は starttime_zone をオブジェクト側で指定していきます。 data 型のオブジェクト内容は PostManなどで以下のように確認できます。

                    "date": {
                        "start": "2022-05-02",
                        "end": null,
                        "time_zone": null
                    }

その他参考サイト

developers.notion.com