본문 바로가기
컴퓨터/Python

파이썬으로 주식 현재가 알려주는 슬랙 (slack) 채팅 봇 만들기

by 날아라키위새 2021. 8. 20.
반응형

 

예전에 작성한 파이썬으로 슬랙 (Slack) 채팅 봇 만들기에서

슬랙 챗 봇을 만드는 방법을 설명했다.

 

거기에 몇 가지 기능을 추가하여

정해진 시간마다 슬랙 채널에 주식 현재가를 알려주는 챗 봇을 만들어보았다.

 

주식 현재가 알려주는 슬랙 챗 봇 만들기

코드를 대충 설명하자면

stockList에 적혀있는 주식 코드를 가지고 

다음 금융에서 데이터를 받아 현재가를 슬랙 채널에 정각마다 알려주는 코드이다.

(다음 금융 웹사이트가 변경되면 작동하지 않을 수 있다. 혹시 작동 안 하는 경우 댓글 남겨주시면 수정하겠습니다.)

 

현재가 외에도 jsonObj에서 받아올 수 있는 다른 정보를 추가로 출력받을 수 있으며

if t_now.minute == 0 and (0 <= t_now.second <= 5):

이 부분을 수정하면 다른 원하는 시간에 현재가를 받을 수 있다.

 

주의할 점

먼저, 아래의 코드에서

 

myToken = "xoxb-123456789-123456789-AD5XG9T9leCA0yRN2fVxVzJ0" 의 토큰과

post_message(myToken, "#채널이름", strbuf) 의 #채널이름은 

본인 것으로 알맞게 바꿔준다.

 

stockList = ['A005930', 'A034220', 'A035720']

이 부분을 본인이 현재가를 받고자 하는 주식 종목코드로 바꿔준다.

 

파이썬 코드

import requests
from datetime import datetime
import pytz
import time
import sys


KST = pytz.timezone('Asia/Seoul')


def get_curprice(code):
    url = 'https://finance.daum.net/api/quotes/' + code + '?summary=false&changeStatistics=true'
    headers = {
                'Referer': 'http://finance.daum.net',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    jsonObj = response.json()
    curPrice = jsonObj['tradePrice']
    stockName = jsonObj['name']
    changePrice = jsonObj['changePrice']
    dbgout(f'`{str(stockName)} ({code}) - 현재가: {str(curPrice)}원 [{str(changePrice)}원]`')


# slack 챗 봇
def post_message(token, channel, text):
    response = requests.post("https://slack.com/api/chat.postMessage",
                             headers={"Authorization": "Bearer " + token},
                             data={"channel": channel, "text": text}
                             )
    print(response)


# slack 토큰
myToken = "xoxb-123456789-123456789-AD5XG9T9leCA0yRN2fVxVzJ0"


# message로 받은 인자를 파이썬 쉘과 슬랙 #채널이름 에 동시에 출력한다
def dbgout(message):
    print(datetime.now().strftime('[%m/%d %H:%M:%S]'), message)
    strbuf = datetime.now().strftime('[%m/%d %H:%M:%S] ') + message
    post_message(myToken, "#채널이름", strbuf)


if __name__ == '__main__':
    try:
        stockList = ['A005930', 'A034220', 'A035720']
        while True:
            t_now = datetime.now(KST)
            t_9 = t_now.replace(hour=9, minute=0, second=0, microsecond=0)
            t_15_30 = t_now.replace(hour=15, minute=30, second=0, microsecond=0)
            today = datetime.today().weekday()
            if today == 5 or today == 6:  # 토요일이나 일요일이면 자동 종료
                dbgout('`오늘은 주말입니다. 프로그램 종료!`')
                sys.exit(0)
            if t_9 < t_now < t_15_30:
                if t_now.minute == 0 and (0 <= t_now.second <= 5):
                    for code in stockList:
                        get_curprice(code)
                    time.sleep(5)
                    sys.exit(0)
            if t_15_30 < t_now:
                sys.exit(0)
    except Exception as ex:
        dbgout('`에러발생 - ' + str(ex) + '`')

 

코드를 실행하면 아래와 같은 알림을 정해진 시간마다 받을 수 있다.

 

 

꿀팁

윈도우 스케줄러를 사용하여 매일 8시 50분에 작동하도록 설정해놓으면 편하다.

 

끝!

 

반응형

댓글