2️⃣

S9. 共通オブジェクト要素+α

9.1 共通オブジェクトの分類

  • 共通オブジェクトを分類した図です。
    • graph LR A(Common Object) --> F(File) & E(Emoji) & P(Parent) & RT(Rich text) RT --> M(Mention) & T(Text) & EQ(Equation) M --> UM(User mentions) & PM(Page mentions) & DBM(Database mentions) & DM(Date mentions) & LP(Link preview mentions) & TM(Template mentions)

9.2 User Object

  • 以下のメソッドで bot ユーザを取得します。
    • bot = UserObject.find_me
  • Ruby オブジェクトに含まれている User object を JSON で表示してみます。
    • print JSON.pretty_generate(bot.json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      bot User object
  • 以下のメソッドで一般ユーザを取得します。
    • user = UserObject.all.select { |u| u.json["type"] == "person" }.first
  • Ruby オブジェクトに含まれている User object を JSON で表示してみます。
    • print JSON.pretty_generate(user.json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      normal User object
  • 取得した User object の id を記録してください。この user_id を13節で利用します。
    • 📝
      自分の User Object の id を記録します。"id": "この部分をコピー"のような形式の部分があるので、該当部分をコピーして、以下の欄に貼り付けておいてください。
      例: 2200a911-6a96-44bb-bd38-6bfb1e01b9f6
      user_id

9.3 File object

ここから下は 37 ページ以降で取得するオブジェクトのサンプルです。ここからそれぞれのブロックへのリンクをコピーしてください。
External file object
External file object
  • コールアウトブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      コールアウトブロックの URL
  • 以下のメソッドでコールアウトブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • コールアウトブロックに含まれている File object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["callout"]["icon"])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      File object
⚠️
補足説明
NotionRubyMapping は API アクセスの効率化のために、一度アクセスしたブロックに対する JSON は id と紐づけてキャッシュされます。このため、アイコンを変更して再度ブロックを取得しても、キャッシュからデータを取り出してしまい、Notion API にアクセスをしません。どうしても新しいデータをアクセスしたい場合には、以下のようにしてこのキャッシュをクリアしてください。
NotionCache.instance.clear_object_hash
NotionRubyMapping のキャッシュクリア

9.4 Emoji object

💡
Emoji Object
  • コールアウトブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      コールアウトブロックの URL
  • 以下のメソッドでコールアウトブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • コールアウトブロックに含まれている File object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["callout"]["icon"])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Emoji object

9.5 Parent object

  • 今取得したブロックの Parent object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["parent"])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Parent object

9.6 Rich text object

9.6.1 Text object

装飾なしボールドイタリックアンダーライン取り消し線コード赤字緑背景Google
  • テキストブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      テキストブロックの URL
  • 以下のメソッドでテキストブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • テキストブロックに含まれている最初(0番目)の Text object (装飾なし)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][0])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (装飾なし)
  • テキストブロックに含まれている1番目の Text object (ボールド)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][1]) # ボールド
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (ボールド)
  • テキストブロックに含まれている2番目の Text object (イタリック)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][2]) # イタリック
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (イタリック)
  • テキストブロックに含まれている3番目の Text object (アンダーライン)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][3]) # アンダーライン
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (アンダーライン)
  • テキストブロックに含まれている4番目の Text object (取り消し線)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][4]) # 取り消し線
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (取り消し線)
  • テキストブロックに含まれている5番目の Text object (コード)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][5]) # コード
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (コード)
  • テキストブロックに含まれている6番目の Text object (赤字)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][6]) # 赤字
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (赤字)
  • テキストブロックに含まれている7番目の Text object (緑背景)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][7]) # 緑背景
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (緑背景)
  • テキストブロックに含まれている8番目の Text object (Google)を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][8]) # リンクあり
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Text object (Google)

9.6.2 Equation object

  • 数式が書かれたテキストブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      テキストブロックの URL
  • 以下のメソッドでテキストブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • テキストブロックに含まれている Equation object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][0])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Equation object

9.6.3 Mention object

  • さまざまなメンションが書かれたテキストブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      テキストブロックの URL
  • 以下のメソッドでテキストブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • テキストブロックに含まれている最初(0番目)の User mentions object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][0])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      User mentions object
  • テキストブロックに含まれている1番目の Page mentions object を JSON で表示してみます。書籍に書かれている情報とタイトルなどの表記が若干異なる件はご了承ください。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][1])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Page mentions object
  • テキストブロックに含まれている2番目の Database mentions object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][2])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Page mentions object
  • テキストブロックに含まれている3番目の Date mentions object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][3])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Date mentions object
  • テキストブロックに含まれている4番目の Link preview mentions object を JSON で表示してみます。
    • print JSON.pretty_generate(b.json["paragraph"]["rich_text"][4])
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Date mentions object
  • テンプレートオブジェクトは作成時に Date mentions object や User mentions object に変換されてしまうので、ここでは NotionRubyMapping の機能で作成します。最初は @today に相当する Template mentions object です。
    • print JSON.pretty_generate(MentionObject.new("template_mention" => "today").property_values_json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Template mentions object (Today)
  • 次は @now に相当する Template mentions object です。
    • print JSON.pretty_generate(MentionObject.new("template_mention" => "now").property_values_json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Template mentions object (Today)
  • 最後は @me に相当する Template mentions object です。
    • print JSON.pretty_generate(MentionObject.new("template_mention" => "me").property_values_json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Template mentions object (Today)

9.7 Comment object

コメントが追加されたテキストブロック
  • コメントが追加されたテキストブロックに対して「ブロックへのリンクをコピー」とします。
    • 📝
      ブロックの URL を記載 例: https://www.notion.so/hkob/2-620dec0c29ca44e29b5a6f35eff516a2#38af0e9ad8e945abba63232ba5b23796
      テキストブロックの URL
  • 以下のメソッドでテキストブロックを取得します。
    • b = Block.find "コピーしたリンクをここに貼り付け"
  • ブロックから DiscussionThread object を取得します。
    • dt = b.comments.values.first
  • DiscussionThread object から Comment object を取得します。
    • comment = dt.comments.first
  • 取り出した Comment object を JSON で表示してみます。
    • print JSON.pretty_generate(comment.json)
  • 後で確認できるように出力された結果を保存しておきましょう。
    • 📝
      JSON 部分をコピー&貼り付け
      Comment object