はじめに
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分にこのブログ記事のリンクが追加されていれば成功です。うまくいくといいのですが。