Search

Notion Workspace API 사용하기

아래 내용들에 대한 Vue와 ts를 사용한 예시 코드입니다.

WorkSpace와 연결하기

workspace에 접속을 한 뒤 해당 워크스페이스와 Integrations를 연결해줘야 합니다.
1.
우측 상단 버튼을 눌러주도록 합니다.
2.
연결에서 연결 추가를 클릭 한 뒤 기존에 만들었던 Integrations를 검색해서 추가해주도록 합니다.
3.
연결 완료 시 아래 이미지와 같이 연결에 항목이 추가됩니다.

Table을 통해서 Database 만들기

노션에서 테이블 생성을 할 시 아래와 같이 데이터베이스를 만들 수 있습니다.
해당 테이블은 index를 추가하거나 삭제할수도 있으며 추후 API를 통해 검색이 가능합니다.

API 호출 하기

Notion API는 다양한 영역으로 나눠서 Notion의 정보를 가져오도록 하고있습니다.
1.
Database
2.
Page
3.
Block
4.
Comments
5.
Users
6.
Search
또한 공식문서에서 JS와 Shell 버전 예시 두가지가 제공되고 있습니다.

Object 리턴 값

{ "object": "page" // page, block, comment 등, "id": "7a793800-3e55-4d5e-8009-2261de026179", // id "parent": { // 출처 "type": "page_id", "page_id": "5c6a2821-6bb1-4a7e-b6e1-c50111515c3d" }, "discussion_id": "f4be6752-a539-4da2-a8a9-c3953e13bc0b", "created_time": "2022-07-15T21:17:00.000Z", "last_edited_time": "2022-07-15T21:17:00.000Z", "created_by": { "object": "user", "id": "e450a39e-9051-4d36-bc4e-8581611fc592" }, "heading_2": [ // 엔터가 나오기 전까지 블록 // page의 경우 properites가 나옴 // comments의 경우 rich_text가 바로 나옴 "rich_text": [{ // 한 줄에도 여러 속성이 나올 수 있으므로 array로 넘어옴 "type": "text", "text": { "content": "Hello world", "link": null }, "annotations": { // text 속성값으로 css값 "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, // 회색 바탕에 빨간 글씨 (ctrl + e) "color": "default" // notion에서 사용하는 정해진 색 }, "plain_text": "Hello world", "href": null }] ] }
JavaScript
복사
Notion API는 서버에서만 사용하도록 설계되어져 있습니다.

Database

database를 호출하기 위해서는 우선 토큰 값들을 가져와야 합니다.
1.
secrets Token : Integrations 설정 페이지에서 가져올 수 잇습니다.
2.
Database Id : Table페이지에서 공유하기를 누르면 URL이 복사되는데 https://notion.so/databaseId ?v=… 이 나오게 됩니다. 해당 URL에서 database ID라고 적힌 부분이 Id값입니다.
값을 호출할 때 Notion에서 제공하는 라이브러리를 사용할 수도, API를 날릴 수도 있습니다.

Database Query

원하는 값을 가져오기 위해 filtersort 두가지를 쿼리에서 제공하고 있습니다.
import { Client } from '@notionhq/client'; const notion = new Client({auth: process.env.NOTION_KEY}); const databaseId = process.env.NOTION_DATABASE_LIST_ID; (async () => const response = await notion.databases.query({ database_id: databaseId, filter: { propery: 'title', title: { equals: '제목입니다' } }, sorts: [ { timestamp: 'created_time', direction: 'descending', }, ], }))();
JavaScript
복사
title을 기준으로 리스트 불러오기
이외에도
database 생성
database 업데이트
database 가져오기
API가 존재합니다.

Page

Notion의 글은 크게 2가지 영역으로 나뉘어져 있습니다.
API를 통해서 페이지를 호출할 시 page properties만 호출되어서 속성과 제목 값들을 알 수 있습니다.
const { Client } = require('@notionhq/client'); const notion = new Client({auth: process.env.NOTION_KEY}); (async () => { // page id를 가져오기 위한 database 호출 const response = await notion.databases.query({ database_id: databaseId, filter: { property: 'title', title: { equals: title, }, }, }); const pageId = response.results[0].id; const page = await notion.pages.retrieve({ page_id: pageId, }); })();
JavaScript
복사
page 가져오기
page 생성
page 업데이트
page 속성 가져오기
API가 존재합니다.

Blocks

Page와 유사하지만 Page호출의 경우 properity만 넘어왔다면 block은 content의 내용이 넘어옵니다.
const { Client } = require('@notionhq/client'); const notion = new Client({auth: process.env.NOTION_KEY}); (async () => { // page id를 가져오기 위한 database 호출 const response = await notion.databases.query({ database_id: databaseId, filter: { property: 'title', title: { equals: title, }, }, }); const pageId = response.results[0].id; const block = await notion.blocks.children.list({ block_id: pageId, }); })();
JavaScript
복사
block 가져오기
block 생성
block 업데이트
block의 chlidren 호출하기
삭제하기
children 추가하기
API가 존재합니다.

Comments

Comments는 Notion Page나 Block에 달아 놓은 댓글을 가져오며, 초기 Integrates에서 설정해둔 기능들을 따라갑니다.
const { Client } = require('@notionhq/client'); const notion = new Client({ auth: process.env.NOTION_API_KEY }); (async () => { const response = await notion.databases.query({ database_id: databaseId, filter: { property: 'title', title: { equals: title, }, }, }); const pageId = response.results[0].id; const response = await notion.comments.list({ block_id: pageId }); console.log(response); })();
JavaScript
복사
Comment 생성
Comment 가져오기
API가 존재합니다.

Users

유저의 정보를 가져오는 API입니다.
Use 1명의 정보가져오기
워크스페이스의 모든 유저 정보 가져오기
봇 사용자 검색
API가 존재합니다.

Search

공유되는 모든 페이지, DB, 하위페이지, 하위 DB를 검색합니다. 이는 DB나 페이지 쿼리를 사용하는 경우에 가장 정확한 값을 얻을 수 있습니다.
정보 찾기
API가 존재합니다.