はじめに
Notion Tips の第83回目はこのブログへのリンクを毎日自動的に設定するスクリプトの作成です。ずっとやろうと思っていたのですが、20日ほど溜め込んでしまっていました。まず、これまでの不足分を自動登録した後で、毎日自動追加する仕組みを作成してみたいと思います。本日はまず一件の登録からスタートします。
Notion Tips の連載まとめページ
Notion Tips の連載まとめページはこちらからアクセスできます。 Notion Tips | Notion
この記事執筆時点ではこんな感じで最後の更新は 8月23日でした。手動で毎日更新するのは莫迦らしいので、なんとか少しでも自動化したいです。
最初の 8月23日の行の内容を確認しようと NotionRubyMapping で読み込んだところ、以下のようにエラーになってしまいました。link_mention という新しいメンションタイプが用意されたようで、NotionRubyMapping では展開できませんでした。これについては後日対応することにします。新しい型ができたとしても、ドキュメント化はされていませんし、create や update などはすぐにはできなそうなので、取り急ぎリンクテキストのものを作成してみます。
8月24日分をテキストリンクで追加してみました。
この中身を確認してみます。
1件のみ手動登録
まず親のページを取得します。
page = block.parent => NotionRubyMapping::Page-545bd67d60aa4e18bd3be43c117908e5
一番先頭の「記事一覧」というパラグラフブロックを取得します。
top_block = page.children.first => NotionRubyMapping::ParagraphBlock-ac939bb491794c5b82747900cafe447b
このトップブロックの下に上に書かれたような箇条書きブロックを作成します。日付の Mention object は以下のように作成できます。
date = "2024-08-25" => "2024-08-25" mo = MentionObject.new "start" => date, "plain_text" => date => #<NotionRubyMapping::MentionObject:0x000000012ba95868
さらに次のリンク付きテキストを作成します。
url = "https://hkob.hatenablog.com/entry/2024/08/25/050000" => "https://hkob.hatenablog.com/entry/2024/08/25/050000" lt = TextObject.new url => #<NotionRubyMapping::TextObject:0x000000012beb3210 ... lt.href = url => "https://hkob.hatenablog.com/entry/2024/08/25/050000"
これらを要素にもつ BulletedListItemBlock を作成します。
bi = BulletedListItemBlock.new [mo, " ", lt] => NotionRubyMapping::BulletedListItemBlock-
ここで、page に対して top_block の下に追加してみます。ここで再度 link_mention エラーが出てしまいました。これは append_block_children の結果として戻ってきたページを再度 page に代入する処理がなされるのですが、そこでページ内に含まれる link_mention を扱ってしまうからです。
page.append_block_children bi, after: top_block /Users/hkob/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0/gems/notion_ruby_mapping-0.8.7/lib/notion_ruby_mapping/blocks/base.rb:142:in `append_block_children': {"object"=>"error", "status"=>400, "code"=>"validation_error", "message"=>"body failed validation: body.after should be a valid uuid or `undefined`, instead was `\"#<NotionRubyMapping::ParagraphBlock:0x00000001033b9940...`.", "request_id"=>"5d204424-00b7-43f6-a649-6a4a9b81e1ec"} (StandardError) from (irb):28:in `<main>' from <internal:kernel>:187:in `loop' from /Users/hkob/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0/gems/irb-1.14.0/exe/irb:9:in `<top (required)>' from /Users/hkob/.rbenv/versions/3.3.4/bin/irb:25:in `load' from /Users/hkob/.rbenv/versions/3.3.4/bin/irb:25:in `<main>' irb(main):029> page.append_block_children bi, after: top_block.id /Users/hkob/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0/gems/notion_ruby_mapping-0.8.7/lib/notion_ruby_mapping/objects/rich_text_object.rb:49:in `create_from_json': Unknown mention type: link_mention (StandardError)
確認するとページにブロックは正しく追加されていました。この先の自動化に進むためには、やはり NotionRubyMapping を更新しなければいけないようです。
おわりに
今回は、Notion Tips の紹介ページの自動化のために、ひとまず一行だけリンクを追加してみました。ただし、NotionRubyMapping の更新をしないと先に進めないようなので、明日から NotionRubyMapping のアップデートを進めていくことにします。