T#

NotionとRescueTimeをn8nで1日1回連携する

October 21, 2023

n8nを使ってNotionとRescueTimeを連携するメモ

NotionとRescueTimeをn8nで1日1回連携する

使用例: RescueTime の Daily summary で Notion プロパティを Update する

毎日 Notion database item を schedule で作って日記を書いている。 日々の生産性を振り返るために導入している RescueTime の Productivity スコアを日記ページのプロパティに 1 日 1 回反映している。 以前は Zapier で実装していたが、今回 n8n 移行を行った。

Notion Diary
Notion Diary
RescueTime Report
RescueTime Report

前提

  1. Notion の Diary は Template のスケジュール機能で毎日 0 時に新しいレコードが作成される
  2. RescueTime は設定したタイムゾーンの 00:01 AM に前日分レポートが利用可能になる
  3. n8n は Schedule Trigger を使って実行

n8n の設定

n8n Flow
n8n Flow

ポイント

  1. 日次の処理とはいえ、マニュアルのテストも行うので念のため日付をフォーマットして使用
  2. Notion API の query がなんかあんまり意図通りの挙動をしないので、API で 2 件取れることを許容する
  3. 日付でマージ
  4. API リクエストはざっくり行い、Filter で欲しい物だけに絞るゆるふわ運用
  5. id のようなどちらのデータにも存在するプロパティは Merge ノードで上書きされてしまう可能性があるので、順番に注意する

処理の流れ

  1. Schedule Trigger を実行
  2. Schedule Trigger の timestamp から 1 日前の時間を計算
  3. timestamp から ISO date にフォーマット
  4. フォーマットした日付で RescueTime API を実行
  5. Notion API は ISO date 指定して取得できないので、更に 1 日前の日付を作って日付のレンジでデータを取得
  6. 多めに取れてしまった場合はフォーマット済みの日付を使って 1 件に絞る
  7. Notion, RescueTime のデータをマージ(順番注意)
  8. 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 なのでソフトウェアの品質も高い印象。

そろそろセルフホスティングを検討していきたい。

© 2023 Takashi Toyofuku All rights reserved.