주식 다트 공시 + 휴대폰 텔레그램으로 자동 수신 시스템 구축 첫 걸음, 다트 API, 토큰, 구글 코랩 활용

목차

- 의도 : 내가 설정한 종목 중 다트에 새로운 공시가 뜨면 나의 텔레그램으로 즉시 알림을 받기 위함이다.

- 경로 : 다트 공시 → 구글 코랩 → 텔레그램 전송

- 이후 계획 : 컴퓨터를 24시간 가동할 수 없어 구글 코랩을 사용할 예정인데 코랩도 브라우저를 닫거나 일정 시간이 지나면 끊길 수 있다. 그래서 깃허브를 이용할 예정인데 이 부분은 글이 너무 길어지니 다음 글에 테스트해보는 과정을 남길 예정이다.

아래 과정에서는 다트의 API 인증키, 텔레그램 API 토큰, 텔레그램 고유번호(chat ID)를 알아낸 뒤 구글 코랩에 코드를 입력해 실제 다트 공시 링크가 내 텔레그램으로 전송되는지 테스트한다.

1. Open DART 'API 인증키' 발급받기 (무료)

(1) 다트 사이트에 접속한다.

(2) 왼쪽 상단 '인증키 신청/관리' 메뉴를 클릭한다.

(3) 왼쪽 아래 '인증키 신청' 버튼을 클릭한다.

(4) 동의 체크 / 사용자 구분 : 개인 / 이메일, 비번을 입력한다.

(5) API사용환경 : 모두 / API사용용도 : 개인 투자 분석 및 파이썬 공부용 / 확인 URL : 나의 블로그 주소 기입 → 등록 버튼을 클릭한다.

(6) 기재한 이메일을 확인해 금융감독원에서 보낸 이메일을 열어 '인증링크'를 클릭한다.

(7) 다트 사이트에서 상단 '인증키 신청/관리' 클릭 → 페이지에서 '상태-승인'으로 되어 있는지 확인 → 왼쪽 '오픈API 이용현황' 메뉴 클릭 → API Key를 확인하면 된다.

API 인증키는 외부에 공개하지 않고 따로 저장해두자. 뒤에서 구글 코랩 코드에 입력해야 한다.

2. 텔레그램을 통한 알림 설정 (무료)

(1) 텔레그램 앱 상단 돋보기 아이콘을 누른다.

(2) '@BotFather'를 입력한 후 검색되는 파란색 체크 표시가 되어 있는 공식계정 '@BotFather'를 선택한다.

(3) 하단 'Start Bot' 버튼을 누른다.

(4) 채팅창에 '/newbot'을 입력한다.

한글 이름 정하기

(5) 아래와 같은 문장이 뜨면 봇 이름을 정해서 입력한다. 한글로 해도 된다.

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

영어 이름 정하기

(6) 아래와 같은 문장이 뜨면 영어 아이디를 만들어 입력한다. 타인과 중복되면 사용할 수 없고, 이름은 bot으로 끝나야 한다.

Good. Now let's choose a username for your bot. It must end in `bot`.

텔레그램 API 토큰 부여받아 따로 저장해두기

Done! Congratulations on your new bot.으로 시작하는 문장이 나오면 봇 생성에 성공한 것이다.

문장을 자세히 들여다보면 중간쯤에 'Use this token to access the HTTP API:'라는 문장 아래 숫자+영문 조합이 보인다.

이게 바로 텔레그램 API 토큰이다. 이 부분을 잘 복사해 저장해둔다.

이 토큰도 비밀번호와 같은 정보이므로 블로그나 공개된 코드에 그대로 올리지 않는다.

나의 고유번호(chat ID) 확인, 저장하기

(7) 텔레그램 상단 돋보기 아이콘이 있는 검색창에 '@userinfobot'을 입력한다.

(8) 첫 번째로 뜨는 'User Info • Get ID • IDbot'을 누른다. (아이디 : @userinfobot). 많은 게 뜨니 좀 당황스러울 수 있다.

(9) 하단 'Start Bot'이나 '시작' 버튼을 누른다.

(10) id 뒤에 숫자가 보인다. 이 숫자들을 복사해 저장해둔다.

🚨 텔레그램 채팅방 열어두기

이 부분에서 나는 실제로 오류가 계속 났다. 채팅방을 미리 열어두지 않으면 구글 코랩에서 텔레그램으로 자료가 전송되지 않을 수 있다. 정보를 받을 텔레그램 채팅방을 먼저 열어두자.

(11) 위 (6)번에서 만들어둔 영어 이름으로 검색해서 채팅방을 열고 우측 하단 '시작' 버튼을 누른 후 아무 말이나 입력해놓자. 이렇게 하면 채팅방이 만들어진 것이다.

※ 2026년 10월 현재, ChatGPT와 다시 작업한다면

이 글을 작성할 당시에는 필요한 정보를 하나씩 알아보고, 제미나이에게 물어보면서 코드를 받아 구글 코랩에 직접 붙여넣고 테스트했다. 오류가 나면 다시 상황을 설명하고 다음 방법을 물어보는 식이었다.

지금 다시 작업한다면 DART 인증키나 텔레그램 봇 토큰처럼 내 계정에서 직접 발급받아야 하는 정보는 여전히 내가 준비해야 한다. 하지만 이후 어떤 공시를 어떤 형태로 텔레그램에 받고 싶은지 설명하면 코드 작성과 수정, 오류 원인을 확인하는 작업은 ChatGPT와 함께 훨씬 빠르게 진행할 수 있을 것 같다.

아직 이 DART·텔레그램 작업을 현재의 ChatGPT와 처음부터 다시 맞춰본 것은 아니기 때문에 실제 작업량이 얼마나 줄어드는지는 직접 해봐야 알 것 같다. 다만 지금까지 다른 자동화 작업을 함께 해본 경험으로 보면, 내가 직접 해야 하는 계정 설정은 남더라도 코드를 만들고 수정하는 과정은 당시보다 상당히 줄일 수 있을 것으로 보인다.

3. 구글 코랩으로 텔레그램 알림 테스트

이 과정은 꼭 필요한 것은 아닌데 깃허브를 이용하기 전 내 휴대폰의 텔레그램으로 내가 원하는 정보가 도착하는지 한번 확인해보기 위함이 크다.

(1) 위 버튼을 클릭해 구글 코랩 사이트로 이동해 로그인한다.

(2) 왼쪽 상단 '파일' 메뉴 → 'Drive의 새 노트북'을 클릭하면 새로운 창이 나타난다.

(3) '코딩을 시작하거나 AI로 코드를 생성하세요'라는 박스 안에 아래 코드를 복사해 붙여넣는다.

!pip install opendartreader

(4) 붙여넣은 칸 왼쪽에 삼각형이 있는 동그라미가 있다. 그걸 클릭하자. 여러 문장이 뜬 후 맨 하단에 'successfully installed opendartreader'라는 문장이 보이면 성공이다.

(5) 위쪽에 '+코드' 메뉴를 클릭하자. 그러면 새 코드를 붙여넣을 칸이 아래 하나 더 생성된다.

(6) 이제 아래 코드 박스 내용을 복사해서 구글 코랩에 붙여넣는다. 수정할 부분은 YOUR_...라고 된 3곳이다.

* 아래 [여기]를 클릭하면 앞에서 해당 정보를 확인했던 부분으로 이동한다.

✅ DART 인증키 입력 : [여기]를 클릭해 (7)번에서 확인한 키를 넣는다.

✅ 텔레그램 토큰 입력 : [여기]를 클릭해 발급받은 토큰을 넣는다.

✅ 텔레그램 CHAT ID 입력 : [여기]를 클릭해 (10)번에서 확인한 숫자를 넣는다.

import OpenDartReader
import requests

# ==========================================
# 1. 개인 정보 설정 (이 부분을 본인의 정보로 수정하세요!)
# ==========================================
DART_API_KEY = 'YOUR_DART_API_KEY'
TELEGRAM_TOKEN = 'YOUR_TELEGRAM_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'

def test_dart_telegram():
    print("1. 📡 다트(DART) 서버 정밀 연결 중...")
    dart = OpenDartReader(DART_API_KEY)

    try:
        # ---------------------------------------------------------
        # [중요] 데이터 부하를 줄이기 위해 특정 종목(삼성전자) 1건만 조회합니다.
        # 테스트 단계에서는 서버에 무리를 주지 않는 것이 핵심입니다.
        # ---------------------------------------------------------
        target_stock = '삼성전자'
        print(f"2. 🔍 샘플 데이터({target_stock}) 추출 중...")

        # 2026년 1월 1일 이후의 공시 목록을 가져옵니다.
        df = dart.list(target_stock, start='20260101')

        if df is not None and len(df) > 0:
            # 가장 최신 공시 1건을 선택
            latest_report = df.iloc[0]
            rcept_no = latest_report['rcept_no']

            # 텔레그램으로 전송할 메시지 포맷
            message = (
                f"🚨 [초경량 연결 테스트 성공]\n"
                f"📦 종목: {latest_report['corp_name']}\n"
                f"📝 내용: {latest_report['report_nm']}\n"
                f"🔗 링크: https://dart.fss.or.kr/dsaf001/main.do?rcpNo={rcept_no}"
            )

            print("3. 📬 통신망 이상 무! 텔레그램 무전 송신 중...")
            url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
            requests.get(url, params={'chat_id': CHAT_ID, 'text': message})
            print(f"✅ [작전 완료] 텔레그램으로 성공 무전이 발송되었습니다.")

        else:
            print("🌑 공시 데이터를 찾을 수 없습니다. 종목명이나 날짜를 확인하세요.")

    except Exception as e:
        print(f"🚨 [비상] 통신 에러 발생: {e}")

# 테스트 실행
test_dart_telegram()

(7) 코랩에 위 코드를 붙여넣기가 끝났다면 왼쪽 상단에 동그라미 버튼을 클릭한다.

성공이라면 코랩에는 아래와 같은 문구가 나타난다.

1. 📡 다트(DART) 서버 정밀 연결 중...
2. 🔍 샘플 데이터(삼성전자) 추출 중...
3. 📤 통신망 이상 무! 텔레그램 송신 중...
✅ [작전 완료] 텔레그램 무전이 송신되었습니다.

성공이라면 텔레그램 대화방에는 아래와 같은 문구가 도착한다.

🚨 [초경량 연결 테스트 성공]
📦 종목: 삼성전자
📝 내용: 주식등의대량보유상황보고서(일반)
🔗 링크: https://dart.fss.or.kr/dsaf001/main.do?rcpNo=20260504000421

* 위 코드는 삼성전자의 공시 1건을 텔레그램 대화방에 링크로 보내주는 코드이다.

** 지금은 링크로 보내지지만 제미나이를 이용해 공시의 요약 기능을 추가해도 될 것 같다. 이와 관련된 것은 실험을 해보고 글을 따로 올릴 예정이다.

여기까지 텔레그램에 수신이 가능한지 구글 코랩으로 테스트를 잘 마쳤다.

 

댓글

이 블로그의 인기 게시물

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

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

주식 데이터 자동 기록 기초 EP01. 구글 클라우드 콘솔 설정 및 블로거 API 연동