다트 공시, 깃허브 액션으로 실시간 자동 알림 받기 (텔레그램 봇 설정 및 연동 편) - EP02
깃허브의 사용 목적은 24시간 가동하려는 용도로 다트와 텔레그램의 중간 역할을 하는 것이다. 지난 에피소드 01의 글에서는 원하는 종목의 다트 공시를 깃허브 내에서 수신이 가능한지 테스트를 하는 과정으로 글을 마쳤다. 이번 글은 '다트 공시, 깃허브 액션으로 내 휴대폰 텔레그램으로 실시간 자동 알림 받기 - EP01'의 연장선으로 다트의 공시를 깃허브를 거쳐 텔레그램으로 수신받을 수 있게 자동화시켜 놓는 과정을 담았다.
원활한 자동화 구축을 위해 1편의 기초 설정을 먼저 완료해 주세요.
🔗 다트 공시, 깃허브 액션으로 내 휴대폰 텔레그램으로 실시간 자동 알림 받기 - EP011. 준비사항
이번 과정에서는 텔레그램 봇 토큰과 Chat ID가 필요하다. 텔레그램 관련 준비사항은 다트 공시나 야후 파이낸스 지표 수치, 한경 리포트의 정보를 나의 휴대폰으로 수신하려면 필요하니 만들어야 한다.
이전 글에 텔레그램에서 봇 토큰과 Chat ID를 발급받는 과정을 남겨놓았으므로 해당 글을 참고해 만들면 된다.
📡 아직 텔레그램 봇 토큰과 Chat ID가 없으신가요?
다트와 깃허브로 보낸 정보를 수신하려면 텔레그램 전용 봇(Bot)과 chat ID가 필요합니다.
아래 버튼을 클릭해 이전 글의 과정을 참고해 준비하시기 바랍니다.
2. 깃허브 시크릿에 텔레그램 봇 토큰과 Chat ID 등록하기
지난 글 '다트 공시, 깃허브 액션으로 내 휴대폰 텔레그램으로 실시간 자동 알림 받기 - EP01'에서도 보안을 위해 다트 API 인증키를 보관해 코드에 직접적인 인증키가 들어가지 않게 하는 과정을 거쳤다. 이번에도 텔레그램 봇 토큰과 Chat ID를 보안을 위해 저장한다.
* 번거롭지만 텔레그램 봇 토큰과 Chat ID를 하나씩 따로 등록해놓아야 한다. 두 번의 등록 과정을 거친다.
깃허브 시크릿에 텔레그램 봇 토큰 등록 하기
(1) 상단의 에피소드 01에서 만든 저장소 이름을 클릭한다.
(2) 상단 우측 'Settings' 메뉴를 클릭한다.
(3) 왼쪽 메뉴에서 'Secrets and variables' ➡ 'Actions'을 클릭한다.
(4) 오른쪽에 있는 초록색 'New repository secret' 버튼을 클릭한다.
(5) 'Name *' ➡ TELEGRAM_BOT_TOKEN 이라고 입력한다.
(6) 'Secret *' 이라고 이름 지어진 칸에 봇 토큰을 붙여넣기 한다.
(7) 아래 초록색 'Add secret' 버튼을 클릭한다.
Repository secrets이라고 이름지어진 아래 칸에 보면 2개의 이름이 확인된다.
🔒DART_API_KEY 🔒TELEGRAM_BOT_TOKEN
깃허브 시크릿에 텔레그램 Chat ID 등록 하기
(8) 'Repository secrets' 옆에 초록색 'New repository secret' 버튼을 클릭한다.
(9) 'Name *' ➡ TELEGRAM_CHAT_ID 라고 입력한다.
(10) 'Secret *' 이라고 이름 지어진 칸에 텔레그램 Chat ID 숫자들을 붙여넣기 한다.
(11) 아래 초록색 'Add secret' 버튼을 클릭한다.
Repository secrets이라고 이름지어진 아래 칸에 보면 총 3개의 이름이 확인된다.
🔒DART_API_KEY 🔒TELEGRAM_BOT_TOKEN 🔒TELEGRAM_CHAT_ID
3. 텔레그램 수신 코드 넣기
깃허브 내에서 수신이 잘 되는지 확인했으니 이제 텔레그램으로 다트 공시 정보가 잘 수신되도록 코드를 변경해 업로드 해야 하는 과정이 남았다.
** 텔레그램에 봇 토큰과 Chat ID로 아무말이라도 남겨놓은 상태의 열어놓은 채팅방이 있어야 한다.
깃허브 main.py 코드 수정
(12) 좌측 최상단 만들어둔 '저장소 이름'을 클릭해 해당 저장소로 이동한다.
(13) 목록 중 'main.py' 파일 이름을 클릭 한다.
(14) 우측 상단 연필 모양의 아이콘을 클릭한다.
(15) 기존에 있던 코드를 모두 삭제한다.
(16) 삭제 한 바로 그 공간에 아래 코드를 복사해 붙여넣기 한다.
import requests
import os
# 깃허브 Secrets에서 정보 가져오기
MY_DART_KEY = os.environ.get('DART_API_KEY')
TELEGRAM_TOKEN = os.environ.get('TELEGRAM_BOT_TOKEN')
TELEGRAM_ID = os.environ.get('TELEGRAM_CHAT_ID')
# 정찰 대상 설정 (예: 삼성전자)
STOCK_CODE = "005930"
STOCK_NAME = "삼성전자"
def send_telegram_message(message):
"""텔레그램으로 메시지 발송"""
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
payload = {
'chat_id': TELEGRAM_ID,
'text': message,
'parse_mode': 'HTML'
}
try:
requests.post(url, data=payload)
print("📢 [전송 완료] 텔레그램으로 보고를 마쳤습니다.")
except Exception as e:
print(f"🚨 [전송 실패] 텔레그램 발송 오류: {e}")
def check_disclosure():
print(f"📡 [시스템 가동] {STOCK_NAME} 실시간 공시 정찰 시작.")
url = f"https://opendart.fss.or.kr/api/list.json?crtfc_key={MY_DART_KEY}&corp_code={STOCK_CODE}&bgn_de=20240101&page_count=5"
try:
response = requests.get(url)
data = response.json()
if data['status'] == '000':
report_list = data['list']
latest = report_list[0]
report_msg = (
f"<b>[실시간 공시 보고]</b>\n\n"
f"🏢 종목: {STOCK_NAME}\n"
f"📄 공시명: {latest['report_nm']}\n"
f"📅 접수일: {latest['rcept_dt']}\n"
f"🔗 <a href='https://dart.fss.or.kr/dsaf001/main.do?rcpNo={latest['rcept_no']}'>공시 상세보기</a>"
)
send_telegram_message(report_msg)
else:
print(f"❌ 데이터 수신 실패: {data['message']}")
except Exception as e:
print(f"🚨 시스템 오류: {e}")
if __name__ == "__main__":
check_disclosure()
저장
(17) 상단 우측의 초록색 'Commit changes...' 버튼을 클릭한다.
(18) 팝업창이 뜨면 하단 'Commit changes' 버튼을 클릭한다.
이 다음 상황이 텔레그램으로 다트 공시 내용이 수신되어야 하는데 실패해서 헤맸었다.
* 여기서 헤맸는데 깃허브 시크릿에 저장해둔 탤래그램 봇 토큰과 Chat ID를 연결해 주는 작업을 거쳐야 했다. 이 글이 체혐한것을 기록하는 글이라 좀 미흡하긴 하다.
탤래그램 봇 토큰, Chat ID를 연결
(19) 상단 메뉴 중 '< > Code' 메뉴를 클릭한다.
(20) .github/workflows 폴더 클릭 ➡ 'main.yml' 파일을 클릭한다.
(21) 우측 상단 연필 모양의 아이콘을 클릭한다. 수정하려는 것이다.
(22) 기존 코드를 삭제하고 아래 코드를 복사, 붙여넣기해서 교체한다. (설명이 어려워서 그냥 통째로 넣게 했다.)
** 여기서 주의 할게 있는데 들여쓰기를 잘 해야 한다. 잘 못 되었다면 빨간 밑줄이 생길것이다. 빨간 밑줄이 생기지 않아야 한다.
name: DART Disclosure Radar on: schedule: - cron: '0 0-9 * * 1-5' workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.9' - name: Install dependencies run: | pip install -r requirements.txt - name: Run script env: DART_API_KEY: ${{ secrets.DART_API_KEY }} TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} run: | python main.py
(23) 우측 상단의 초록색 'Commit Changes' 버튼을 클릭한다.
(24) 팝업창이 뜨면 하단 'Commit changes' 버튼을 클릭한다.
(25) 상단 메뉴 중 'Actions'을 클릭한다.
수동실행으로 수신 여부 테스트
(26) 왼쪽 메뉴 중 'DART Disclosure Radar'를 클릭한다.
(27) 우측 버튼 'Run workflow'를 클릭 ➡ 아래 초록색 Run workflow 버튼 클릭한다.
(28) 텔레그램 대화창을 확인한다.
필자의 텔레그램 대화창에 아래와 같은 정보가 수신 되었다.
[실시간 공시 보고]
🏢 종목: 삼성전자
📄 공시명: 임원ㆍ주요주주특정증권등소유상황보고서
📅 접수일: 20260513
🔗 공시 상세보기 (https://dart.fss.or.kr/dsaf001/main.do?rcpNo=20260513000081)
이렇게 텔레그램으로 다트 공시 정보의 내용이 도착하다면 성공이다.
파이썬으로 다트 공시 노션으로 자동 알림 받기
파이썬으로 자동 수집한 투자 데이터(DART 공시, 텔레그램 뉴스)를
노션 페이지에 실시간으로 전송 및 자동 기록하기 위한 기초 단계
댓글
댓글 쓰기