카카오톡봇 + 외부API(2)

Kyoungchan Cho·2023년 2월 6일
0
post-thumbnail

intro

Notion API를 활용하여 노션 페이지 안에 있는 DB Calander의 데이터를 불러와보자.

이후 휴대폰의 카카오톡과 연결한 node.js 환경의 remote-kakao 모듈에서 해당 코드를 서비스레이어에서 이용할 예정이다.

테스트 페이지 : https://lying-lettuce-69f.notion.site/db-test-6c0340b83e0b42e38987a4c26825bcf2

테스트 DB : https://lying-lettuce-69f.notion.site/87ab93bc89464be292a728085f4b29a7?v=4ca3f06c4f284732b96a3622158be05e


노션 API Key발급

https://developers.notion.com/docs/getting-started 접속
왼쪽 상단 View my intergrations로 들어가서
프라이빗 API 통합으로 선택하고 콘텐츠, 댓글, 사용자 기능은 모두 사용할 수 있게 설정한다.

공유하고자 하는 DB로 들어가서 (노션 페이지 안에 있는 DB를 ‘데이터베이스 보기’로 새창으로 열어줘야 한다.) 오른쪽 상단에서 토큰과 DB를 연결해주는 설정을 한다.


Notion API 연결

@notionhq/client 패키지 설치
npm i @notionhq/client

retrieve 메소드는 데이터베이스의 기본 개체를 확인할 수 있다.

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 콘솔 화면


query 방법은 DB의 원하는 프로퍼티의 접근이 가능하다.

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 콘솔 화면


query 메소드를 이용해서 금일 투두리스트를 쓴 사람의 작성시간과 리스트를 뽑아보자.

매일 투두리스트의 제목은 자기 이름으로 작성한다고 가정

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 콘솔화면

주의

  • 데이터베이스 ID의 경우 노션 페이지가 아닌 DB를 새창으로 열고 url중 ?v 앞부분에 해당하는 부분이다.

마무리

Notion DB API를 활용해서 데이터를 불러오고 원하는 로직을 구성해서 remote-kakao로 카카오톡을 전송할 예정이다.


참고)
https://developers.notion.com/reference/post-database-query

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글