반응형
예전에 작성한 파이썬으로 슬랙 (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분에 작동하도록 설정해놓으면 편하다.
끝!
반응형
'컴퓨터 > Python' 카테고리의 다른 글
파이썬으로 폴더에 있는 모든 엑셀파일 특정 행열 한 번에 합치는 방법 (2) | 2021.09.07 |
---|---|
특정 폴더에 있는 모든 엑셀파일 한 번에 합치는 방법 (파이썬) (4) | 2021.07.21 |
파이썬으로 히스토그램 그리기 (0) | 2021.06.28 |
파이썬으로 박스플롯 (box plot - 상자그림) 그리기 (0) | 2021.06.27 |
파이썬 (Python) 리스트에서 리스트 더하기 빼기 (0) | 2021.06.25 |
댓글