UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#173 PHPとNotionのAPIで、Notion上の特定のデータベースの情報を取得

記入日:2023-06-30 編集日:2023-06-30

PHPとNotionのAPIで、Notion上の特定のデータベースの情報を取得する方法を解説してみようと思います。

この記事を読むと(約5分)
PHPとNotionのAPIで、Notion上の特定のデータベースの情報を取得する方法をイメージできます。

特定のデータベースの情報を取得

以下のコードは、PHPを使用してNotionのAPIを呼び出し、Notion上の特定のデータベースの情報を取得するためのものです。 以下に、コードの内容と概念的な内容を解説します。

 概念的な説明:

  1. cURLを使用して、HTTPリクエストを送信してAPIと通信します。cURLは、多くのプログラミング言語で利用可能なライブラリであり、HTTPリクエストを簡単に作成し送信できます。
  2. NotionのAPIを使用するためには、APIキーまたは認証トークンが必要です。このコードでは、AuthorizationヘッダーにBearerトークンを含めることで認証を行っています。
  3. NotionのAPIは、HTTPリクエストを送信して特定のエンドポイントにアクセスし、データベースの情報を取得します。エンドポイントは、APIのバージョン、データベースのIDなどを含むURLです。
  4. レスポンスはJSON形式で受け取られます。このコードでは、json_decode() 関数を使用してJSONをPHPのオブジェクトに変換しています。
  5. 取得したデータを処理して表示するために、オブジェクトのプロパティにアクセスします。レコードの各プロパティには、名前、タグ、数値などの情報が含まれます。

$curl = curl_init();

$query_var = [
];
$query = json_encode($query_var);


curl_setopt_array($curl, [
    CURLOPT_URL => "https://api.notion.com/v1/databases/XXXXXXXXXXX/query",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Notion-Version: 2022-06-28",
        "accept: application/json",
        'Authorization: Bearer ' . 'secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    ],
    CURLOPT_POSTFIELDS => $query
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $response = json_decode($response);

    $results = $response->results;

    foreach ($results as $record) {
        echo "ページID: " . $record->id . "<br>";
        echo "作成日時: " . $record->created_time . "<br>";
        echo "最終編集日時: " . $record->last_edited_time . "<br>";
        echo "作成者: " . $record->created_by->id . "<br>";
        echo "最終編集者: " . $record->last_edited_by->id . "<br>";

        // 名前の情報を表示
        $nameProperty = $record->properties->名前->title[0]->plain_text;
        echo "名前: " . $nameProperty . "<br>";

        // タグの情報を表示
        $tags = $record->properties->タグ->multi_select;
        echo "タグ: ";
        foreach ($tags as $tag) {
            echo $tag->name . " ";
        }
        echo "<br>";

        // 数値の情報を表示
        $numberProperty = $record->properties->数値->number;
        echo "数値: " . $numberProperty . "<br>";

        echo "<br>";
    }
}

 コードの説明:

  1. curl_init() 関数を使用して、cURLセッションを初期化します。
  2. json_encode() 関数を使用して、空のクエリ変数をJSON形式に変換します。
  3. curl_setopt_array() 関数を使用して、cURLオプションを設定します。これには、APIエンドポイントのURL、リクエストのタイムアウトやバージョン、HTTPヘッダー、認証トークンなどが含まれます。
  4. curl_exec() 関数を使用して、cURLリクエストを実行し、APIからのレスポンスを取得します。
  5. curl_error() 関数を使用して、エラーメッセージを取得します。
  6. cURLセッションを終了し、リソースを解放します。
  7. エラーチェックを行い、エラーがあれば表示します。
  8. レスポンスをJSON形式からデコードし、結果を処理します。各レコードに対して、ページID、作成日時、最終編集日時、作成者、最終編集者などの情報を表示します。


このコードを使用すると、Notionの特定のデータベースから取得した情報を処理し、表示することができます。具体的な情報の表示方法は以下の通りです:

  1. ページID ($record->id): レコードの一意の識別子であり、各ページに割り当てられています。
  2. 作成日時 ($record->created_time): レコードが作成された日時です。
  3. 最終編集日時 ($record->last_edited_time): レコードが最後に編集された日時です。
  4. 作成者 ($record->created_by->id): レコードを作成したユーザーの識別子です。
  5. 最終編集者 ($record->last_edited_by->id): レコードを最後に編集したユーザーの識別子です。
  6. 名前 ($record->properties->名前->title[0]->plain_text): レコードの「名前」というプロパティの値を表示します。このコードでは、プロパティがタイトル型であることを想定しています。
  7. タグ ($record->properties->タグ->multi_select): レコードの「タグ」というプロパティの値を表示します。このコードでは、プロパティが複数選択型であることを想定しています。タグは複数存在する可能性があるため、foreach ループを使用して各タグを表示します。
  8. 数値 ($record->properties->数値->number): レコードの「数値」というプロパティの値を表示します。

上記のコードは、NotionのAPIを使用して特定のデータベースの情報を取得し、取得した情報を処理して表示する一般的な手法を示しています。このコードを適切に使用するには、以下の点に注意する必要があります:

  1. XXXXXXXXXXX と 'secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXX' の部分は、実際のデータベースのIDと認証トークンに置き換える必要があります。これらの値は、Notionの開発者向けドキュメントから取得することができます。
  2. コード内の各プロパティ名 (名前、タグ、数値など) は、実際のデータベースのプロパティ名に合わせて変更する必要があります。


このコードを使用すると、NotionのデータベースをPHPで効果的に操作し、取得した情報を必要な形式で表示することができます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。