0

我正在尝试使用 Notion API 和 PHP 查询概念数据库。我能够连接到 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”的概念数据库的第一列

任何帮助都会非常有帮助。谢谢!

4

1 回答 1

1

过滤器需要在filter参数中。

$data_array =
['filter' => 
    [
      "property"=>"DataElement",
      "title"=>["equals"=>"bigHouse"]
    ]
];

请参阅https://developers.notion.com/reference/post-database-query

于 2021-11-17T16:39:05.550 回答