[주식 데이터 자동 기록 기초] EP03. 노션 API 연동 및 데이터베이스 자동 수신 환경 구축

목차


지난 EP01에서 자동화 프로그램이 구글 블로그에 직접 글을 쓸 수 있도록 마스터키를 확보하는 기초 공사를 마쳤고, EP02에서는 야후 파이낸스 실시간 주가를 스마트폰 텔레그램 알림으로 전송하는 자동 비서를 구축했다. 이번 EP03은 이 시리즈의 핵심으로, 수집한 주가 데이터들을 노션 표(데이터베이스)에 차곡차곡 누적 보관하는 자동화 시스템을 완성할 차례다.


1. 준비

(1) 노션 시크릿 토큰(API 키)

파이썬이 내 노션 계정에 안전하게 접속할 수 있도록 문을 열어주는 일종의 '비밀번호'다. 오늘 자동화 코드를 구동하려면 이 마스터키가 필요하다.


(2) 이전 시리즈 연동 환경 확인

이 프로젝트는 야후 파이낸스, 텔레그램, 노션을 파이썬으로 연결하는 시리즈다. 1편의 구글 블로거 연동과 2편의 주가 수집 및 텔레그램 테스트가 완료되어야 오늘 다룰 3편 코드를 에러 없이 실행할 수 있다. 선행 작업이 누락되었거나 초보자라면 아래 이전 글을 통해 필요사항을 먼저 구축해야 한다.


2. 노션 데이터베이스ID 추출 및 API 연동

파이썬 코드를 만들면 파이썬 내에서 결과물을 전송받는게 아니라 노션으로 전송받게 하려고 한다. 데이터를 노션으로 자동 저장하면 불필요한 에너지 소모를 줄일 수 있다. 

이렇게 노션으로 전송받으려면 해당 페이지에 정확한 공간(표)에 넣으라고 지정을 해줘야 한다. 이 지정 공간을 데이터베이스 아이디라고 하는데 어렵게 생각할 필요없이 노션에 자료를 제공받을 페이지 상단의 웹 주소같은 주소라고 보면 된다. 이 주소를 명령에 넣어주어야 노션의 지정된 공간으로 데이터가 자동 수신된다.


노션 페이지 지정

(3) 노션에서 새로운 페이지를 만든다.

(4) 만들어진 빈 페이지에 '/데이터베이스-인라인'이라고 입력 해 새로운 표를 만든다. 

(5) 이름 칸을 종목명으로 수정한다.

(6) 그 우측의 + 버튼을 눌러 새로운 속성을 추가한다. 속성 종류는 반드시 '숫자'를 선택하고, 컬럼 제목은 '현재가'로 변경해 준다.

⚠️ 노션 표의 '현재가' 속성 유형을 '숫자'로 맞추지 않으면 400 에러가 발생한다. 여기서 많이 헤맸으니 속성 종류를 꼭 확인하자.


(7) 노션 페이지 우측 상단 메뉴(···)연결을 누른 뒤, 위 1번에서 준비해 둔 본인의 API 봇 이름을 찾아 클릭한다. 


노션 API 연동 설정

(8) '이 페이지에 (본인 API 봇 이름) 추가'라는 제목의 팝업창이 뜨면 아래 파란색 '페이지 추가' 버튼을 클릭한다.


노션 데이터베이스 ID 추출

(9) 노션 페이지 본문에서 만든 표(현재가, 종목명이 적힌 표) 내부에 마우스를 올린다.

(10) 표 우측 상단 파란 '새로 만들기' 버튼 근처에 양방향 화살표 모양의 ⤢ 아이콘(전체 페이지로 열기)을 클릭한다. 

🚨 주의 : 표 우측 상단 ⤢ 아이콘(전체 페이지로 열기)을 안 누르고 주소를 따면 무조건 400 에러가 뜬다. 꼭 독립 창으로 크게 열어놓고 주소를 추출해야 진짜 ID가 복사되므로 주의하자!


(11) 표가 화면 전체를 채우는 독립된 창으로 변다.

(10) 이 상태에서 브라우저 맨 위 주소창주소를 복사한다.

https://www.notion.so/3641f26401d4805a885ffa892a75f32b?v=3641f26401d4806b9ba3000c4462c75d

위 예시에서 https://www.notion.so/ ➡ 이 부분 뒤, ? 앞 문자+숫자 조합 총 32자리 '3641f26401d4805a885ffa892a75f32b' 문자 부분이 노션의 데이터 베이스 ID이다. 이 32자리 문자를 잘 저장해두자. 이 데이터베이스ID가 있어야 해당 페이지로 데이터가 자동 수신이 된다. 


3. 야후 파이낸스 X 노션 연동 파이썬 코드 작성

이전 글들에서 설치했던 것들을 통해 이제 야후 파이낸스의 주가 데이터를 노션으로 자동 전송해주는 코드를 넣어야 한다. 위 1번에서 준비하라고 했던 노션의 토큰(API 키) 여기에서 필요하다.

(12) VS Code 프로그램을 열자. 왼쪽 상단 메뉴의 'File' ➡ 'New File..'을 클릭한다.

(13) 상단 빈칸에 'notion_stock.py'라고 입력 후 엔터를 누르면 자동으로 'blog_bot' 폴더의 저장 루트로 열린다. 파일형식이 'All Files' 로 되어 있는지 확인 후 아래 'Create File' 버튼을 클릭해 저장한다.

notion_stock.py

(14) VS Code 프로그램 상단에 'notion_stock.py' 창이 새로 만들어졌다.

(15) 1행 : 아래 코드를 복사해 본인의 노션 토큰과 데이터베이스 ID를 입력한 후 1행 붙여넣기 한다. 

NOTION_TOKEN = "여기에_노션_시크릿_토큰_입력"

DATABASE_ID = "여기에_노션_데이터베이스_ID_입력"

import requests
import yfinance as yf

# 1. 고정 마스터키 설정 (본인의 키값으로 대체)
NOTION_TOKEN = "여기에_노션_시크릿_토큰_입력"
DATABASE_ID = "여기에_노션_데이터베이스_ID_입력"

# 2. 야후 파이낸스 주가 수집 (예시: 삼성전자)
ticker_symbol = "005930.KS"
stock = yf.Ticker(ticker_symbol)
current_price = stock.history(period="1d")["Close"].iloc[-1]
stock_name = "삼성전자"

# 3. 노션 API 수신 규격(JSON) 조립
headers = {
    "Authorization": f"Bearer {NOTION_TOKEN}",
    "Content-Type": "application/json",
    "Notion-Version": "2022-06-28",
}

payload = {
    "parent": {"database_id": DATABASE_ID},
    "properties": {
        "종목명": {"title": [{"text": {"content": stock_name}}]},
        "현재가": {"number": int(current_price)},
    },
}

# 4. 노션 데이터베이스로 데이터 송신 및 결과 확인
url = "https://api.notion.com/v1/pages"
response = requests.post(url, headers=headers, json=payload)

if response.status_code == 200:
    print(f"🚀 [{stock_name}] 노션 데이터베이스 자동 기록 성공!")
else:
    print(f"❌ 기록 실패 코드: {response.status_code}")
    print(response.text)

 (16) VS Code 프로그램의 notion_stock.py 탭이 활성화된 상태에서 Ctrl + S를 눌러 저장한다.

💡 VS Code 파일 저장 상태 확인 팁

  • 저장 상태 확인 : 현재 notion_stock.py 탭 옆에 동그라미(●) 표시가 되어 있으면 저장 전이라는 표시이다. 동그라미가 X 표시로 변경되었으면 저장 완료라는 표시이다.

(17) 이전 에피소드 1, 에피소드 2를 따라해봤다면 'blog_bot' 폴더를 알것이다. 이 'blog_bot' 폴더 안에 'notion_stock.py'라는 파일이 새로 저장되어 있음을 확인 할 수 있다.


4. 파이썬 코드에 마스터키 입력 및 최종 실행

(18) 다시 VS Code 프로그램으로 돌아와서, 아까 2번 단계에서 생성해 두었던 notion_stock.py 라는 이름의 창을 활성화한다.

(19) VS Code 하단의 터미널(Terminal) 창아래 명령어를 복사해 붙여넣기하고 엔터를 누른다. (만약 터미널 창이 안 보인다면 상단 메뉴의 'Terminal' ➡ 'New Terminal'을 클릭해 열어준다.)

python notion_stock.py

(20) 잠시 후 터미널 창에 아래와 같은 문구가 뜨면 성공이다.

🚀 [삼성전자] 노션 데이터베이스 자동 기록 성공! ➡ 성공이다!


(21) 노션에서 연동시킨 페이지로 들어가보자. 만들어 놓은 표에 아래와 같이 자동 입력이 되어 있다.

삼성전자, 281000 ➡ 성공이다!


오늘은 파이썬을 활용해 실시간 주가 데이터를 노션 데이터베이스에 자동으로 기록하는 환경을 구축했다. 다음 편에서는 오픈다트(OpenDART) API를 연동하여 실시간 공시 데이터를 추출하고 노션에 자동으로 수신하는 과정을 다룰 예정이다.

📦 함께 보면 좋은 글 : 파이썬 주식 데이터 자동 기록 기초 시리즈

파이썬과 깃허브 액션을 활용하여 주식 및 공시 데이터를 자동으로 수집하고 관리하는 시리즈다.
기초 환경 세팅부터 노션 연동, 최종 무인 배포까지 단계별로 구성했다.

🔗 [1편] 구글 블로그(Blogger) API 설정 및 연동 환경 구축 🔗 [2편] 야후 파이낸스 주가 및 다트(DART) 공시 텔레그램 알림 연동
📍 [3편] 노션 API 연동 및 데이터베이스 구축 (현재 글)
🔒 [4편] 오픈다트 API 연동 및 실시간 데이터 추출 (예정) 🔒 [5편] 노션 데이터 활용 구글 블로그 자동 발행 (예정) 🔒 [6편] 깃허브 액션 24시간 무인 자동화 배포 (예정)

 #주식자동화 #파이썬 #노션API #노션데이터베이스 #주식데이터자동기록 #야후파이낸스 #VSCode

댓글

이 블로그의 인기 게시물

학점은행제 아동학 학사 학위 신청 방법, 보육교사 2급 자격증 취득 순서 정리

블로그 작성 시간을 줄이자. 크롬 다크리더 사용 글자색이 회색으로 보이는 방법 해결

다트 공시, 깃허브 액션으로 내 휴대폰 텔레그램으로 실시간 자동 알림 받기 - EP01