[주식 데이터 자동 기록 기초] 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급 자격증 취득 순서 정리

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

유튜브 '나중에 볼 동영상' 10분만에 삭제, 스크립트 붙여넣기 오류 해결 방법