Notion API를 활용하여 노션 페이지 안에 있는 DB Calander의 데이터를 불러와보자.
이후 휴대폰의 카카오톡과 연결한 node.js 환경의 remote-kakao 모듈에서 해당 코드를 서비스레이어에서 이용할 예정이다.
테스트 페이지 : https://lying-lettuce-69f.notion.site/db-test-6c0340b83e0b42e38987a4c26825bcf2
https://developers.notion.com/docs/getting-started 접속
왼쪽 상단 View my intergrations로 들어가서
프라이빗 API 통합으로 선택하고 콘텐츠, 댓글, 사용자 기능은 모두 사용할 수 있게 설정한다.
공유하고자 하는 DB로 들어가서 (노션 페이지 안에 있는 DB를 ‘데이터베이스 보기’로 새창으로 열어줘야 한다.) 오른쪽 상단에서 토큰과 DB를 연결해주는 설정을 한다.
@notionhq/client
패키지 설치
npm i @notionhq/client
const { Client } = require('@notionhq/client');
const notion = new Client({
auth: '발급받은 프라이빗 토큰',
});
const database_id = '87ab93bc89464be292a728085f4b29a7';
const getResponse = async () => {
const response = await notion.databases.retrieve({
database_id: database_id,
});
return response
};
(async () => {
const response = await getResponse();
console.log(response);
})();
response 콘솔 화면
const getResults = async () => {
const payload = {
path: `databases/${database_id}/query`,
method: 'POST',
};
const { results } = await notion.request(payload);
return results;
};
(async () => {
const results = await getResults();
console.log(results[0].properties['이름']);
})();
results 콘솔 화면
매일 투두리스트의 제목은 자기 이름으로 작성한다고 가정
const getListTodoWriters = async () => {
const payload = {
path: `databases/${database_id}/query`,
method: 'POST',
};
const { results } = await notion.request(payload);
//노션의 게시글 작성 시간 포맷을 맞추기 위해
const getTodayInNotionFormat = () => {
let today = new Date();
return (
today.getFullYear() +
'-' +
(today.getMonth() + 1 > 9
? (today.getMonth() + 1).toString()
: '0' + (today.getMonth() + 1)) +
'-' +
(today.getDate() > 9
? today.getDate().toString()
: '0' + today.getDate().toString())
);
};
const today = getTodayInNotionFormat();
const listOfTodayTodoWriters = results
.filter((data) => today === data.properties['날짜'].date.start)
.map((data) => {
const name = data.properties['이름'].title[0].text.content;
const link = data.url;
const created_time = new Date(Date.parse(data.created_time)).getHours();
return `${name}(${created_time}시): ${link}`;
});
return listOfTodayTodoWriters;
};
(async () => {
const todoWriters = await getListTodoWriters();
console.log(todoWriters);
})();
todoWriter 콘솔화면
Notion DB API를 활용해서 데이터를 불러오고 원하는 로직을 구성해서 remote-kakao로 카카오톡을 전송할 예정이다.
참고)
https://developers.notion.com/reference/post-database-query