BookmarkBlock: NotionRubyMapping 解説 (11)

はじめに

NotionRubyMapping 解説の第11回目です。昨日、append_block_children メソッドを解説したので、これからは様々なブロックを追加していきます。今日の作業ページはこちらです。

hkob.notion.site

あらかじめページを取得しておきます。

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 1

BookmarkBlock は UrlCaptionBaseBlock の子クラスであり、caption がオプションで設定できます。

irb(main):004> page.append_block_children BookmarkBlock.new("https://www.google.com/", caption: "Google 検索")
=> NotionRubyMapping::BookmarkBlock-60abde6ace3546608d042fffb6c38524

結果は以下のようになりました。

BookmarkBlock 2

Notion API の制限

Notion のアプリから同じように URL を設定してブックマークを設定してみます。アプリから実行した場合には、このように OG 画像が挿入されたり、概要が挿入されたりしています。一方で、Notion API から作成したブックマークにはこれらが入っていません。今後説明する EmbedBlock などでも同じような問題が発生するのですが、Notion API から生成されたブロックは権限などの問題からプレビューなどは作成されません。この辺りに制限があることは知っておいた方がよいです。

BookmarkBlock 3

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

以下のように追加されます。

BookmarkBlock 4

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 が書きかわっていることがわかります。

BookmarkBlock 5

キャプションの追加

ついでに後からキャプションを追加してみます。

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 6

おわりに

今回は BookmarkBlock を追加してみました。親は UrlCaptionBaseBlock となっていますが、今後紹介する共通の親をもつクラスは今回の BookmarkBlock とほぼ同じ機能を持つことになります。

BookmarkBlock のマニュアルはこちら。

BookmarkBlock

NotionRubyMapping解説