Notion API

Last edited
Last updated October 14, 2023
Pages
Tags
🛠
笔记会过时,请依照官方文档为准:Notion开发者文档

API 能做什么

Notion 提供的 API 比较大方,基本能读写 Notion 所有数据了。一来你可以用 API 衔接外部程序,二来你可以用 API 直接把 Notion 作为 PaaS,直接构建应用程序。Notion 官方把调用 API 的程序称为集成 Integration。

申请 Token

Token 分为两种,一种是公共 Public,一种是内部 Internal。前者通常用于构建应用程序,分享给别人使用,后者通常只在自己的工作流中使用。两者在使用上没有任何区别,除了它们本身获取的方法。在开发阶段,可以先使用 Internal Integration API,等开发完成,再编写获取 Public 部分的代码。
My integrations | Notion Developers 页面中,申请一个 Internal Token,把它保存起来,之后所有的 API 调用都需要使用。下文用 NOTION_API_KEY 指代。

创建数据库

Notion 中有两种数据,一是页面 Page,另一种是数据库 Database。不过一般作为程序入口的,通常是用数据库。先创建一个空白页面,在页面中选择 “Table”,在弹出的 ”Select data source” 中选择 “Create a new database”。(如果选择已经存在的数据库的话,这个新建数据库就是一个链接数据库 Linked database,API 是无法对其进行操作的。)
到此还没结束,在数据库的页面点击右上角三个点,选择 ”add connection”,可以找到你刚才申请 Token 时创建的 Integration,选择它,这样,API 才有权限访问到数据库。
然后,查看浏览器的地址栏,它类似:
https://www.notion.so/node/f79e136f6b7c4xxxxxxx?v=4b7eexxx ^^^^^^^^^^^^^^^^^^^^
上面下标的这一段为新建数据库的 id,将它保存起来,之后操作数据库都需要使用它。下文用 databaseId 指代

检索数据库

POST https://api.notion.com/v1/databases/{databaseId}/query
参考官方的格式:
curl -X POST https://api.notion.com/v1/databases/2f26ee68df304251aad48ddc420cba3d/query \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' -H "Content-Type: application/json" \ -H "Notion-Version: 2022-06-28" \ --data '{ "filter": { "property": "Last ordered", "date": { "past_week": {} } }, "sorts": [{ "timestamp": "created_time", "direction": "descending" }] }'
如果发送的数据为空,即 {} ,不使用 filter 则返回所有内容。
  • 可以直接发 {} 过去获取所有内容