はじめに
NotionRubyMapping 解説の第11回目です。昨日、append_block_children
メソッドを解説したので、これからは様々なブロックを追加していきます。今日の作業ページはこちらです。
あらかじめページを取得しておきます。
irb(main):002> page = Page.find "https://hkob.notion.site/BookmarkBlock-11-57b37679adb54f17911959410a88c7a7?pvs =4" => NotionRubyMapping::Page-57b37679adb54f17911959410a88c7a7
BookmarkBlock
BookmarkBlock はブックマークを保持するブロックです。 最も簡単なものは URL だけを渡すだけです。
irb(main):003> page.append_block_children BookmarkBlock.new("https://hkob.hatenablog.com/") => NotionRubyMapping::BookmarkBlock-f037db79c9fe4412ad43de3fd77c5fe6
実行した結果以下のようなブックマークが用意されました。
BookmarkBlock は UrlCaptionBaseBlock の子クラスであり、caption がオプションで設定できます。
irb(main):004> page.append_block_children BookmarkBlock.new("https://www.google.com/", caption: "Google 検索") => NotionRubyMapping::BookmarkBlock-60abde6ace3546608d042fffb6c38524
結果は以下のようになりました。
Notion API の制限
Notion のアプリから同じように URL を設定してブックマークを設定してみます。アプリから実行した場合には、このように OG 画像が挿入されたり、概要が挿入されたりしています。一方で、Notion API から作成したブックマークにはこれらが入っていません。今後説明する EmbedBlock などでも同じような問題が発生するのですが、Notion API から生成されたブロックは権限などの問題からプレビューなどは作成されません。この辺りに制限があることは知っておいた方がよいです。
URL の更新
append_block_children では追加したブロックが返却されるので、それを bb として保存しておきます。
irb(main):007> bb = page.append_block_children BookmarkBlock.new("https://hkob.hatenablog.com/entry/2024/03/04/ 050000") => NotionRubyMapping::BookmarkBlock-eb48029260f141dda6fd08dd838172d2
以下のように追加されます。
bb はブロックを指しているので、この url を変更して保存します。
irb(main):008> bb.url = "https://hkob.hatenablog.com/entry/2024/03/03/050000" => "https://hkob.hatenablog.com/entry/2024/03/03/050000" irb(main):009> bb.save => NotionRubyMapping::BookmarkBlock-eb48029260f141dda6fd08dd838172d2
URL が変更されたので、ブックマーク先の URL が書きかわっていることがわかります。
キャプションの追加
ついでに後からキャプションを追加してみます。
irb(main):011> bb.caption << "一昨日のブログ記事" => #<NotionRubyMapping::TextObject:0x000000011f89d670 @options={"plain_text"=>"一昨日のブログ記事"}, @text="一昨日のブログ記事", @type="text", @will_update=false> irb(main):012> bb.save => NotionRubyMapping::BookmarkBlock-eb48029260f141dda6fd08dd838172d2
キャプションが追加されていることがわかります。
おわりに
今回は BookmarkBlock を追加してみました。親は UrlCaptionBaseBlock となっていますが、今後紹介する共通の親をもつクラスは今回の BookmarkBlock とほぼ同じ機能を持つことになります。
BookmarkBlock のマニュアルはこちら。