filter_equals: NotionRubyMapping 解説 (55)

はじめに

NotionRubyMapping 解説の第55回目です。今日は等価であることを確認するはに filter_equals をそれぞれのプロパティで確認してみます。まず、以前使っていたデータベースを取得します。

parent

irb(main):002> db = Database.find "https://www.notion.so/hkob/cad035c49e5346e783
31cb5d05cbc754?v=a03e96ed79ad4d35808e7a08583396a0&pvs=4"
=> NotionRubyMapping::Database-cad035c49e5346e78331cb5d05cbc754

query_database のみ

まず何もフィルタをかけないデータベースの検索で件数が3件になることを確認します。

irb(main):003> db.query_database.count
=> 3

filter_equals

ここから各プロパティに対して、filter_equals でフィルタリングをしてみます。最初は CheckboxProperty です。New title のページだけチェックがついているので、1件のみになっています。

irb(main):007> dps = db.properties
=> PropertyCache
irb(main):008> db.query_database(dps["Check box"].filter_equals true).count
=> 1

ほとんどのプロパティは単に一致を確認するだけなので、一気に実行してみます。

irb(main):009> db.query_database(dps["Email"].filter_equals "abc@example.com").count
=> 1
irb(main):010> db.query_database(dps["Number"].filter_equals 3.14159).count
=> 1
irb(main):011> db.query_database(dps["PhoneNumber"].filter_equals "080-XXXX-YYYY").count
=> 1
irb(main):012> db.query_database(dps["RichText"].filter_equals "Sample text").co
unt
=> 1
irb(main):013> db.query_database(dps["Select"].filter_equals "Fukuoka").count
=> 1
irb(main):014> db.query_database(dps["Url"].filter_equals "https://hkob.notion.site").count
=> 1
irb(main):015> db.query_database(dps["Status"].filter_equals "完了").count
=> 1

日付の一致

今回、Date は以下のように設定されています。ここで時間を含まない 4月3日で検索してみます。時間での検索はタイムゾーン情報があるのですが、日付はタイムゾーンの情報がなくUTCのタイムゾーンにおける日付の比較になってしまいます。

Date Property

そこで、NotionRubyMapping では以下のような payload を作成しています。日付の比較の際に JST の 0:00 から 23:59 までの範囲に入っているものを検索するということです。

irb(main):022> print db.query_database(dps["Date"].filter_equals(Date.new(2024, 4, 3)), dry_run: true)
#!/bin/sh
curl -X POST 'https://api.notion.com/v1/databases/cad035c49e5346e78331cb5d05cbc754/query' \
  -H 'Notion-Version: 2022-06-28' \
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \
  -H 'Content-Type: application/json' \
  --data '{"filter":{"and":[{"property":"Date","date":{"after":"2024-04-03T00:00:00+09:00"}},{"property":"Date","date":{"before":"2024-04-03T23:59:59+09:00"}}]},"page_size":100}'=> nil

実際に検索してみると以下のように正しく取得できています。

irb(main):023> db.query_database(dps["Date"].filter_equals Date.new(2024, 4, 3)).count
=> 1

おわりに

今日は、一致で比較する filter_equals を解説しました。Date に対する filter_equals だけは内部で範囲の比較に変換する処理をしています。

CheckboxProperty のマニュアルはこちらです。その他のプロパティもここから見てください。

CheckboxProperty

NotionRubyMapping解説