0

Notion API と PHP を使用して Notion データベースにクエリを実行しようとしています。問題なく API に接続できますが、POST リクエストが無視されているようで、まったく役に立たないデータを取得するだけです。

この POST リクエストに関する Notion の API ドキュメント ページ ( https://developers.notion.com/reference/post-database-query#post-database-query-filter ) には、ペイロードが次のように表示される必要があると記載されています。

{
  "property": "Landmark",
  "text": {
    "contains": "Bridge"
  }
}

現在、PUT を実行するための私のコードは次のようになります。

//connection information
$databaseId = "zzz";
$url = "https://api.notion.com/v1/databases/$databaseId/query"; //api endpoint
$token = 'zzx';
$version = '2021-08-16';

//post data
$data_array =
[
  "property"=>"DataElement",
  "title"=>["equals"=>"bigHouse"]
];

$data = json_encode($data_array);

//intialize cURL
$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
//below is for posting
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token,
  'Notion-Version: '.$version));

$resp = curl_exec($ch);

if($e = curl_error($ch))
{
    echo $e;
} else
{
    $decoded = json_decode($resp, true);
  var_dump($decoded);
}

//file_put_contents('test.json',json_encode($decoded, JSON_PRETTY_PRINT));

echo "<br>".$data;

curl_close($ch);

?>

セキュリティ上の理由から接続情報を削除しましたが、そこに問題はありません。POST リクエストからすべての JSON データを取得していますが、ペイロードに一致するデータのみを取得しようとしています。echo や var_dump などのコードの最後の部分はテスト用です。$data をエコーすると、次のようになります。

{"property":"DataElement","title":{"equals":"bigHouse"}}

これは、フォーマットされている場合、Notion の API が必要とするものです。「DataElement」と呼ばれ、タイプが「Title」の Notion データベースの最初の列を検索しようとしています。

どんな支援も非常に役に立ちます。ありがとうございました!

4

1 に答える 1