NotionとRescueTimeをn8nで1日1回連携する
October 21, 2023
n8nを使ってNotionとRescueTimeを連携するメモ
使用例: RescueTime の Daily summary で Notion プロパティを Update する
毎日 Notion database item を schedule で作って日記を書いている。 日々の生産性を振り返るために導入している RescueTime の Productivity スコアを日記ページのプロパティに 1 日 1 回反映している。 以前は Zapier で実装していたが、今回 n8n 移行を行った。
前提
- Notion の Diary は Template のスケジュール機能で毎日 0 時に新しいレコードが作成される
- RescueTime は設定したタイムゾーンの 00:01 AM に前日分レポートが利用可能になる
- n8n は Schedule Trigger を使って実行
n8n の設定
ポイント
- 日次の処理とはいえ、マニュアルのテストも行うので念のため日付をフォーマットして使用
- Notion API の query がなんかあんまり意図通りの挙動をしないので、API で 2 件取れることを許容する
- 日付でマージ
- API リクエストはざっくり行い、Filter で欲しい物だけに絞るゆるふわ運用
- id のようなどちらのデータにも存在するプロパティは Merge ノードで上書きされてしまう可能性があるので、順番に注意する
処理の流れ
- Schedule Trigger を実行
- Schedule Trigger の timestamp から 1 日前の時間を計算
- timestamp から ISO date にフォーマット
- フォーマットした日付で RescueTime API を実行
- Notion API は ISO date 指定して取得できないので、更に 1 日前の日付を作って日付のレンジでデータを取得
- 多めに取れてしまった場合はフォーマット済みの日付を使って 1 件に絞る
- Notion, RescueTime のデータをマージ(順番注意)
- Notion database item を更新
n8n には日付計算用のノードがあるので積極的に使う。 Zapier では RescueTime 用の Integration があるが、n8n では無いので普通に API を叩いてしまう。むしろ柔軟に処理できてよい。 API 実行して上手くデータが取れるかどうかは API 次第なので、Filter を使うなどしてデータを整形しておくと扱うデータが最小限になる(執筆中に思いついた)。 今回は Notion database item を Update するので、Input 1 を RescueTime にして Notion を Input 2 にすることで、id は Notion の id が保持されるようにする。
終わりに
Zapier だと Notion Integration が独自実装されているが、その結果特殊仕様になってしまっていて使いづらかった。具体的には取得できる Notion のレコードが「直近更新されたレコード」になる仕様があり、特定の日の生産性スコアが別の日のレコードに反映されてしまうなどしていた。 n8n はエンジニアフレンドリー度が高いが、その分柔軟に処理できるし OSS なのでソフトウェアの品質も高い印象。
そろそろセルフホスティングを検討していきたい。