Notion Tips 連載まとめの自動追記 その2: Notion Tips (85)

はじめに

Notion Tips の第85回目は一昨日の説明の続きです。無事 NotionRubyMapping のアップデートができたので、作業を再開します。

昨日までのリンクを一括作成

前回、1日分のリンクが作成できたので、その続きのリンクを一括作成してしまいます。作業を箇条書きで示していきます。

  • page を取得します。
page = Page.find "https://www.notion.so/hkob/Notion-Tips-545bd67d60aa4e18bd3be43c117908e5"
=> NotionRubyMapping::Page-545bd67d60aa4e18bd3be43c117908e5
  • Top block を取得します。
top_block = page.children.first
=> NotionRubyMapping::ParagraphBlock-ac939bb491794c5b82747900cafe447b
  • date を取得します。
require "date"
  • 8/26 から今日までのリンクを追加します。一昨日の処理を繰り返しただけです。
(Date.new(2024, 8, 26) .. Date.today).each do |date|
  ds = date.to_s
  mo = MentionObject.new "start" => ds, "plain_text" => ds
  url = "https://hkob.hatenablog.com/entry/#{ds.gsub "-", "/"}/050000"
  lt = TextObject.new url
  lt.href = url
  bi = BulletedListItemBlock.new [mo, " ", lt]
  page.append_block_children bi, after: top_block.id
end

これで無事にリンクが生成されました。

作成されたリンク

あとは手動になりますが、全てメンションリンクに変更しました。リンクをコピーして貼り付け直すだけなので、これはそれほど大変ではありません。

メンションリンクに変更

自動生成スクリプトの作成

この作業を毎日自動で実行するスクリプトとして作成しようと思います。スクリプトは以下のようになりました。

#! /usr/bin/env ruby

require "date"
require "notion_ruby_mapping"
include NotionRubyMapping
NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] }

page = Page.find "https://www.notion.so/hkob/Notion-Tips-545bd67d60aa4e18bd3be43c117908e5"
top_block = page.children.first
date = Date.today
ds = date.to_s
mo = MentionObject.new "start" => ds, "plain_text" => ds
url = "https://hkob.hatenablog.com/entry/#{ds.gsub "-", "/"}/050000"
lt = TextObject.new url
lt.href = url
bi = BulletedListItemBlock.new [mo, " ", lt]
page.append_block_children bi, after: top_block.id

やっていることは同じですね。これを $HOME/bin/add_blog_link.rb として保存しました。実行属性をつけて、試しに実行してみました。

chmod +x $HOME/bin/add_blog_link.rb
add_blog_link.rb

これを cron で実行できるようにしました。crontab -e で編集します。1日1回実行している calendar_to_sprint.rb と同様に1日1回だけ実行するようにしています。これは1日起動し続けている研究室のマシンで実施しています。

5 5 * * * /bin/bash -c 'export PATH=/opt/homebrew/bin:$PATH; eval "$(rbenv init -)"; env NOTION_API_KEY=NotionのAPI_KEY ruby $HOME/bin/add_blog_link.rb' > cron.log
13 8 * * * /bin/bash -c 'export PATH=/opt/homebrew/bin:$PATH; eval "$(rbenv init -)"; env NOTION_API_KEY=NotionのAPI_KEY ruby $HOME/bin/calendar_to_sprint.rb' > cron.log

おわりに

今回は、Notion Tips の紹介ページの自動化ができました。明日の5時5分にこのブログ記事のリンクが追加されていれば成功です。うまくいくといいのですが。