MENU

Notion APIで特定のデータベースアイテムをフィルタリングする方法

Notion APIを使って、データベースの特定のアイテムだけを抽出する方法について紹介します。データベース内のすべてのアイテムを取得するのではなく、特定の条件を満たすアイテムのみをフィルタリングして取得する方法を解説します。これにより、必要なデータのみを効率的に取得することが可能です。


1. Notion APIでの基本的なフィルタの設定

Notion APIでは、フィルタ機能を使ってデータベースの特定のプロパティに基づいたクエリを実行できます。例えば、以下のようなシナリオを考えます。

  • データベースには複数の「名前」と「ID」プロパティを持つアイテムが存在する。
  • 特定の名前やIDを持つアイテムだけを取得したい。

このようなケースでは、フィルタを使って取得するデータを絞り込むことで、データベースの効率的なアクセスが可能になります。

2. 基本構造

Notion APIのエンドポイント /v1/databases/{database_id}/query に対してPOSTリクエストを送信します。この際、リクエストボディにfilter条件を含めて、特定のプロパティでアイテムを絞り込みます。

以下に、特定の条件に基づいてデータを取得するコード例を示します。

import requests

def query_database_with_filter(db_id, filter_property, filter_value):
    """
    Notionデータベースをクエリし、指定したプロパティと値に基づいてフィルタリングされたアイテムのみを取得する関数。

    Parameters:
        db_id (str): NotionデータベースID
        filter_property (str): フィルタを適用するプロパティ名
        filter_value (str/int): プロパティのフィルタ値

    Returns:
        list: フィルタリングされたアイテムのリスト
    """
    url = f"https://api.notion.com/v1/databases/{db_id}/query"

    # フィルタ設定。プロパティのタイプに応じて条件を切り替え
    filter_conditions = {}
    if isinstance(filter_value, str):
        filter_conditions = {
            "property": filter_property,
            "title": {  # テキスト系のプロパティの場合
                "equals": filter_value
            }
        }
    elif isinstance(filter_value, int):
        filter_conditions = {
            "property": filter_property,
            "number": {  # 数値プロパティの場合
                "equals": filter_value
            }
        }

    payload = {
        "filter": filter_conditions
    }

    # リクエストの送信
    response = requests.post(url, headers=headers, json=payload)

    # レスポンスの処理
    if response.status_code == 200:
        data = response.json()
        return data['results']
    else:
        print(f"Error querying database: {response.status_code}, {response.text}")
        return []

# 使用例
filtered_items = query_database_with_filter("your_database_id", "ID", 8)
for item in filtered_items:
    print(item)

3. コードのポイント

  • filter_conditionsの設定
  • filter_conditionsをプロパティのタイプ(テキストまたは数値)に応じて設定します。
  • titleフィールドは、テキストプロパティ(例えば、名前)に対して利用され、numberフィールドは数値プロパティ(例えば、ID)に対して使用されます。
  • リクエストの送信
  • requests.postメソッドでNotion APIにPOSTリクエストを送信し、フィルタを適用したデータベースクエリを実行します。
  • リクエストが成功した場合、フィルタリングされたアイテムのリストを返します。エラーが発生した場合は、エラーメッセージが表示されます。

4. 利用例

上記のコードでは、query_database_with_filter関数を使用して、「ID」プロパティが8のアイテムを取得しています。これにより、データベース内の特定のデータを直接取得できます。

# 名前が「指定された名前」のエントリを取得
filtered_items = query_database_with_filter("your_database_id", "名前", "特定の名前")

# IDが8のエントリを取得
filtered_items = query_database_with_filter("your_database_id", "ID", 8)

まとめ

この方法を使うことで、Notionのデータベースから特定の条件に一致するアイテムのみを効率よく取得できます。フィルタ設定を柔軟に活用することで、データベースのクエリに対する自由度が向上します。

目次