Notion API的使用详解(实现database、page、block的新增与查询)
作者:hangge | 2024-12-17 08:35
Notion 不仅仅是一款云笔记软件,而是一个集文档编辑、任务管理、数据库、知识库、团队协作等多功能于一身的综合性工具。并且随着 Notion API 的发布,我们可以实现更多高级的自定义集成,例如自动更新任务、从外部数据源同步信息等。本文将通过样例演示如何使用 Notion API。







(2)比如我这里使用 Postman 进行接口调用测试,那么 Header 设置如下。


(4)即可获取到该数据表的信息:
(2)请求消息体内容格式如下,注意 database_id 替换成我们数据表的 id:
(3)执行完毕后,可以看到 Notion 这边已经出现了这条记录。
(2)接口返回的数据如下:


(4)接口返回的数据如下:


(4)返回的数据结构如下:


(4)返回的数据结构如下:
一、准备工作
1,API 接口说明
Notion API 遵循 RESTful 设计风格,所有涉及数据的内容,无论是请求体还是响应体,都以 JSON 的形式呈现,十分优雅。 Notion 当前支持的所有 API 接口可以在 Notion 开发者网站(点击访问)中查看。
(1)数据表 Database
- 获取指定数据表的字段等信息
- 过滤、排序后输出指定数据表的内容
- 查询所有允许操作的数据表
(2)页面 Page
- 获取指定页面中各字段的值
- 创建新页面
- 更新指定页面中各字段的值
(3)块 Block
- 列举指定页面中的所有块
- 在指定页面中创建新的块
(4)用户 User
- 查看指定用户的信息
- 查看工作区中所有用户的信息(包括机器人)
(5)搜索 Search
- 在有权限的范围内执行全局搜索
2,创建 Notion 机器人
我们在使用 Notion API 时,并不是以“账户”身份登录,来操作所有的数据表;而是通过创建一个个的机器人(称为 integration),每个机器人分别来完成不同的事务,并根据每个机器人所需涉及的数据表,分别对每个机器人进行访问授权。
(1)首先我们访问 Notion 机器人管理页面(点击访问),点击“New integration”按钮开始创建一个机器人:

(2)接着只需要填入机器人名字(比如我这里叫 test),然后点击“Submit”就可以快速创建一个机器人。

(3)提交后,系统会给出一个复杂的密钥,点击 Show 记录可以查看明文内容。这个需要记住,我们后面调用 API 接口时需要用到。密钥可以随时在机器人管理页面中查看。

3,邀请机器人
(1)我们需要在 Notion 中将机器人邀请至指定数据表(Database)中,机器人才有该数据表的操作权限。这里我创建一个名叫“API测试”的页面。

(2)接着我们为这个页面创建一个 database:

(3)为方便后面演示,我们给创建的数据表又增加了“URL”和“图标”两个属性字段:

(4)最后,我们点击右上角的“...”在显示的菜单中选择“Add connections”,然后找到我们创建的 test 机器人,点击它就可以将其邀请进来了。

二、接口调用样例
1,请求头设置
(1)后面所有的请求都要设置请求头,具体内容如下:
"Authorization": "机器人密钥", "Notion-Version": "Notion 版本"
(2)比如我这里使用 Postman 进行接口调用测试,那么 Header 设置如下。
提示:其中 Notion 版本设置 2022-06-28 即可,如果后续官方发布新版本,可以更新对应版本号。
2,获取数据表信息
(1)要获取指定数据表信息,我们需要先找到该数据表的 id。打开我们前面创建的数据表页面,点击右上角的“Share”按钮,然后点击弹出框“Copy link”按钮。

(2)这时数据表链接就辅助到剪贴板中了,我们粘贴出来可以看到中间那一部分编码就是数据表的 id 了:

(3)我们使用 Get 请求方式调用如下接口,其中 url 尾部部分替换成我们的数据表 id:
https://api.notion.com/v1/databases/3373319ed396420bacd781e88cdba4b1
(4)即可获取到该数据表的信息:
{
"object": "database",
"id": "3373319e-d396-420b-acd7-81e38cdba4b1",
"cover": null,
"icon": null,
"created_time": "2024-01-09T01:19:00.000Z",
"created_by": {
"object": "user",
"id": "e994e7e3-a70b-478f-9c41-2da941dd3238"
},
"last_edited_by": {
"object": "user",
"id": "e994e7e3-a70b-478f-9c41-2da941dd3238"
},
"last_edited_time": "2024-01-09T02:08:00.000Z",
"title": [
{
"type": "text",
"text": {
"content": "API 测试",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "API 测试",
"href": null
}
],
"description": [],
"is_inline": false,
"properties": {
"图片": {
"id": "%3AikN",
"name": "图片",
"type": "files",
"files": {}
},
"Tags": {
"id": "UQ%5Ck",
"name": "Tags",
"type": "multi_select",
"multi_select": {
"options": []
}
},
"URL": {
"id": "wAWl",
"name": "URL",
"type": "url",
"url": {}
},
"Name": {
"id": "title",
"name": "Name",
"type": "title",
"title": {}
}
},
"parent": {
"type": "workspace",
"workspace": true
},
"url": "https://www.notion.so/3373319ed396420bacd781e38cdba4b1",
"public_url": null,
"archived": false,
"developer_survey": "https://notionup.typeform.com/to/bllBsoI4?utm_source=postman",
"request_id": "0403b98d-975b-445a-a663-427256c95ea7"
}
3,在指定数据表下添加新页面记录
(1)要新增一个页面记录的话需要使用 Post 请求方式调用如下接口:
https://api.notion.com/v1/pages
(2)请求消息体内容格式如下,注意 database_id 替换成我们数据表的 id:
{
"parent": {
"database_id": "3373319ed396420bacd781e38cdba4b1"
},
"properties": {
"Name": {
"title": [
{
"type": "text",
"text": {
"content": "这是一篇测试文章"
}
}
]
},
"Tags": {
"multi_select": [
{
"name": "测试"
},
{
"name": "技术"
}
]
},
"URL": {
"url": "https://www.hangge.com"
},
"图片": {
"files": [
{
"external": {
"url": "https://www.hangge.com/blog/images/logo.png"
},
"name": "hangge.com",
"type": "external"
}
]
}
},
"children": [
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "这个是文章里面的第一段内容."
}
}
]
}
},
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "第二段内容是一个链接",
"link": {
"type": "url",
"url": "https://twitter.com/NotionAPI"
}
}
}
]
}
},
{
"object": "block",
"type": "image",
"image": {
"type": "external",
"external": {
"url": "https://www.hangge.com/blog/images/logo.png"
}
}
}
]
}
(3)执行完毕后,可以看到 Notion 这边已经出现了这条记录。

4,获取所有页面记录列表(搜索记录)
(1)使用 Post 请求方式调用如下接口可以获取所有的页面记录列表,如果需要添加查询条件可以在消息体中设置筛选条件:
https://api.notion.com/v1/search
(2)接口返回的数据如下:

5,获取指定页面的信息
(1)要获取指定页面信息,我们需要先找到该页面的 id。打开我们前面新增的页面,点击右上角的“Share”按钮,然后点击弹出框“Copy link”按钮。

(2)这时页面链接就辅助到剪贴板中了,我们粘贴出来可以看到中间那一部分编码就是页面的 id 了:

(3)我们使用 Get 请求方式调用如下接口,其中 url 尾部部分替换成我们的页面 id:
https://api.notion.com/v1/pages/1663661c0fdc4585916e78532277c946
(4)接口返回的数据如下:

6,获取指定页面的内容
(1)要获取指定页面的内容(即页面内部的 block 以及 block 内容),我们需要先找到该页面的 id。打开我们前面新增的页面,点击右上角的“Share”按钮,然后点击弹出框“Copy link”按钮。

(2)这时页面链接就辅助到剪贴板中了,我们粘贴出来可以看到中间那一部分编码就是页面的 id 了:

(3)我们使用 Get 请求方式调用如下接口,注意替换 url 中的页面 id 部分内容:
https://api.notion.com/v1/blocks/1663661c0fdc4585916e78532277c946/children
(4)返回的数据结构如下:
{
"object": "list",
"results": [
{
"object": "block",
"id": "d8146fef-b36f-48ec-8339-912b3d517fa9",
"parent": {
"type": "page_id",
"page_id": "1663661c-0fdc-4585-916e-78532277c946"
},
"created_time": "2024-01-09T02:17:00.000Z",
"last_edited_time": "2024-01-09T02:17:00.000Z",
"created_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"last_edited_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"has_children": false,
"archived": false,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "这个是文章里面的第一段内容.",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "这个是文章里面的第一段内容.",
"href": null
}
],
"color": "default"
}
},
{
"object": "block",
"id": "76bcf2be-58a6-43aa-9d61-33968bb87fa9",
"parent": {
"type": "page_id",
"page_id": "1663661c-0fdc-4585-916e-78532277c946"
},
"created_time": "2024-01-09T02:17:00.000Z",
"last_edited_time": "2024-01-09T02:17:00.000Z",
"created_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"last_edited_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"has_children": false,
"archived": false,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "第二段内容是一个链接",
"link": {
"url": "https://twitter.com/NotionAPI"
}
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "第二段内容是一个链接",
"href": "https://twitter.com/NotionAPI"
}
],
"color": "default"
}
},
{
"object": "block",
"id": "06a969e9-917c-4d52-9a21-0bc05ce49620",
"parent": {
"type": "page_id",
"page_id": "1663661c-0fdc-4585-916e-78532277c946"
},
"created_time": "2024-01-09T02:17:00.000Z",
"last_edited_time": "2024-01-09T02:17:00.000Z",
"created_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"last_edited_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"has_children": false,
"archived": false,
"type": "image",
"image": {
"caption": [],
"type": "external",
"external": {
"url": "https://www.hangge.com/blog/images/logo.png"
}
}
}
],
"next_cursor": null,
"has_more": false,
"type": "block",
"block": {},
"developer_survey": "https://notionup.typeform.com/to/bllBsoI4?utm_source=postman",
"request_id": "3b612674-3e30-4c6d-91f0-475096bdbf78"
}
7,获取指定 block 的内容
(1)要获取指定 block 的内容,我们需要先找到该 block 的 id。打开我们前面新增的页面,然后在目标 block 上点击右键,然后点击弹出菜单的“Copy link to block”菜单项。

(2)这时带有 block 编码信息的页面链接就复制到剪贴板中了,我们粘贴出来可以看到末尾那一部分编码就是 block 的 id 了:

(3)我们使用 Get 请求方式调用如下接口,注意替换 url 中的页 block id 部分内容:
https://api.notion.com/v1/blocks/76bcf2be58a643aa9d6133968bb87fa9
(4)返回的数据结构如下:
{
"object": "block",
"id": "76bcf2be-58a6-43aa-9d61-33968bb87fa9",
"parent": {
"type": "page_id",
"page_id": "1663661c-0fdc-4585-916e-78532277c946"
},
"created_time": "2024-01-09T02:17:00.000Z",
"last_edited_time": "2024-01-09T02:17:00.000Z",
"created_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"last_edited_by": {
"object": "user",
"id": "724293c3-bf16-44db-ba57-3552b31766c0"
},
"has_children": false,
"archived": false,
"type": "paragraph",
"paragraph": {
"rich_text": [
{
"type": "text",
"text": {
"content": "第二段内容是一个链接",
"link": {
"url": "https://twitter.com/NotionAPI"
}
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "第二段内容是一个链接",
"href": "https://twitter.com/NotionAPI"
}
],
"color": "default"
},
"developer_survey": "https://notionup.typeform.com/to/bllBsoI4?utm_source=postman",
"request_id": "9e819883-13a2-4e7a-9f3a-be20aa154a6b"
}
附:Postman 接口合集文件
(1)下面是我在 Postman 配置的所有接口:
(2)大家有需要的话将其解压导入 Postman 中即可使用:
全部评论(0)