Allen's 데이터 맛집

[4] Python으로 카카오톡 메시지 보내기 본문

Project/주식 투자 자동화 트레이딩 봇

[4] Python으로 카카오톡 메시지 보내기

Allen93 2023. 7. 22. 21:27
앞서서 CREON PLUS 주식 프로그램과 연결을 확인하고 종목 정보를 구해 봤다면
다음은 카카오톡으로 메시지를 보내기 입니다

 

카카오톡

 

 

트레이딩봇은 원하는 알고리즘을 사용해서 그 알고리즘에 맞게 자동으로 사고 파는 것을 의미해요

저는 여기서 추가적으로, 주식 앱의 노예가 되고 싶지 않아, 자동으로 저에게 매수, 매매등의 정보를 카카오톡 메세지로 알려주는 카카오 챗봇을 만들고 싶었습니다.

 

자동으로 크레온API와 파이썬 트레이딩 프로그램과 연동해서 메세지를 계속 보낸다?? 너무 복잡하고 어려운거 아니야??

라고 생각하겠지만 차분히 하나씩 해결해봅시다

 

 

제일 중요한 것이 바로 아래의 코드입니다.

' ' 사이에 본인의 카카오톡 대화방의 이름과 똑같은! 문구를 적어 주셔야 돼요

저는 '주식방'이라는 이름의 오픈 카카오톡 방을 만들었습니다.

kakao_opentalk_name = '주식방'
import time, win32con, win32api, win32gui

# # 카톡창 이름 (열려있는 상태, 최소화 X, 창뒤에 숨어있는 비활성화 상태 가능)
kakao_opentalk_name = '주식방'  #채팅 방 이름

def kakao_sendtext(text):
    win32api.SendMessage(hwndEdit, win32con.WM_SETTEXT, 0, text)
    SendReturn(hwndEdit)

# # 엔터
def SendReturn(hwnd):
    win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    time.sleep(0.01)
    win32api.PostMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

# # 핸들
#FindWindow를 이용해 캡션(이름)이 '주식방' 이라는 창을 찾아서 핸들을 hwndMain 에 저장
hwndMain = win32gui.FindWindow( None, kakao_opentalk_name)

#FindWindowEx를 이용해 hwndMain(주식방) 의 자식인 RichEdit50W(텍스트박스) 의 핸들을 hwndEdit 에 저장
hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RICHEDIT50W", None)

#글이 올라오는 대화창의 핸들을 가져온 건데, 나중에 채팅내용 인식 (명령어) 할 때 쓸 거예요
hwndListControl = win32gui.FindWindowEx( hwndMain, None, "EVA_VH_ListControl_Dblclk", None)

# # 채팅 전송
text = "C:\stockauto>c:/python38-32/python.exe c:/stockauto/test.py" #입력할 메세지
kakao_sendtext(text)

 

채팅 방 이름 외에 코드 하단 text 변수에 저희의 다음 포스팅에서 구축할 메인 프로그램 경로와 파일 이름을 위와같이 입력해 주셔야 됩니다.

메인 프로그램의 경로를 설정을 해야, 추후에 메인 프로그램에서 보내는 메세지를 text변수에 담아서 kakao_sendtext(text) 함수가 실행되어서 해당 메세지를 보내게 됩니다.

text = "C:\stockauto>c:/python38-32/python.exe c:/stockauto/test.py" #입력할 메세지

 

이렇게 하면 카카오톡에서 자동메세지 보내기가 가능합니다!

 

CREON PLUS 프로그램을 계속 켜져 있어야 되고, 메인 프로그램과, 위의 클래스(저는 kakao_chatbot1.py 라 명명했습니다)가 실행되고 있어야 됩니다.

 

아래의 코드는 원하는 종목코드(예시는 A276620:비보존)를 입력하여 매도호가(offer 변수)를 카카오톡 '주식방'에 자동으로 메세지를 전송하는 것입니다.

import win32com.client
 
# 크레온 플러스 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
    print("PLUS가 정상적으로 연결되지 않음. ")
    exit()
 
# 현재가 객체 구하기
objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
objStockMst.SetInputValue(0, 'A276620')   #종목 코드 - 비보존
objStockMst.BlockRequest()
 
# 현재가 통신 및 통신 에러 처리 
rqStatus = objStockMst.GetDibStatus()
rqRet = objStockMst.GetDibMsg1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
    exit()
 
# 현재가 정보 조회
code = objStockMst.GetHeaderValue(0)  #종목코드
name= objStockMst.GetHeaderValue(1)  # 종목명
time= objStockMst.GetHeaderValue(4)  # 시간
cprice= objStockMst.GetHeaderValue(11) # 종가
diff= objStockMst.GetHeaderValue(12)  # 대비
open= objStockMst.GetHeaderValue(13)  # 시가
high= objStockMst.GetHeaderValue(14)  # 고가
low= objStockMst.GetHeaderValue(15)   # 저가
offer = objStockMst.GetHeaderValue(16)  #매도호가
bid = objStockMst.GetHeaderValue(17)   #매수호가
vol= objStockMst.GetHeaderValue(18)   #거래량
vol_value= objStockMst.GetHeaderValue(19)  #거래대금
 
# 예상 체결관련 정보
exFlag = objStockMst.GetHeaderValue(58) #예상체결가 구분 플래그
exPrice = objStockMst.GetHeaderValue(55) #예상체결가
exDiff = objStockMst.GetHeaderValue(56) #예상체결가 전일대비
exVol = objStockMst.GetHeaderValue(57) #예상체결수량
 
 
print("코드", code)
print("이름", name)
print("시간", time)
print("종가", cprice)
print("대비", diff)
print("시가", open)
print("고가", high)
print("저가", low)
print("매도호가", offer)
print("매수호가", bid)
print("거래량", vol)
print("거래대금", vol_value)
 
 
if (exFlag == ord('0')):
    print("장 구분값: 동시호가와 장중 이외의 시간")
elif (exFlag == ord('1')) :
    print("장 구분값: 동시호가 시간")
elif (exFlag == ord('2')):
    print("장 구분값: 장중 또는 장종료")
 
print("예상체결가 대비 수량")
print("예상체결가", exPrice)
print("예상체결가 대비", exDiff)
print("예상체결수량", exVol)
 


import time, win32con, win32api, win32gui

# # 카톡창 이름 (열려있는 상태, 최소화 X, 창뒤에 숨어있는 비활성화 상태 가능)
kakao_opentalk_name = '주식방'  #채팅 방 이름

def kakao_sendtext(text):
    win32api.SendMessage(hwndEdit, win32con.WM_SETTEXT, 0, text)
    SendReturn(hwndEdit)

# # 엔터
def SendReturn(hwnd):
    win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
    time.sleep(0.01)
    win32api.PostMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

# # 핸들
#FindWindow를 이용해 캡션(이름)이 '주식방' 이라는 창을 찾아서 핸들을 hwndMain 에 저장
hwndMain = win32gui.FindWindow( None, kakao_opentalk_name)

#FindWindowEx를 이용해 hwndMain(주식방) 의 자식인 RichEdit50W(텍스트박스) 의 핸들을 hwndEdit 에 저장
hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RICHEDIT50W", None)

#글이 올라오는 대화창의 핸들을 가져온 건데, 나중에 채팅내용 인식 (명령어) 할 때 쓸 거예요
hwndListControl = win32gui.FindWindowEx( hwndMain, None, "EVA_VH_ListControl_Dblclk", None)

# # 채팅 전송
text = "비보존 매도호가 : "+ str(offer) #입력할 메세지
kakao_sendtext(text)

 

주의! 카카오톡 채팅방의 이름이 같아야 하고 열려있는 상태여야하며 최소화 상태에선 동작을 안합니다!

 

GITHUB : https://github.com/siilver94/Stock-investment-automation

 

GitHub - siilver94/Stock-investment-automation

Contribute to siilver94/Stock-investment-automation development by creating an account on GitHub.

github.com

 

728x90