해당 프로젝트는 크레온 API가 오직 Windows에서만 작동하기 때문에 Windows OS에서 작업한다
1. python 설치하기
1) 64bit는 크레온 API가 작동하지 않기 때문에 32bit로 다시 다운받아줘야 한다
2) 설치에 나오는 것 모든 것을 다 체크해주고 설치가 완료되면 제어판 > 시스템 > 고급 시스템 설정 > 환경 변수에서 python이 변수로 설정되었는지 확인해준다
3) 그리고 python폴더에 들어가서 python.exe와 pythonw.exe 설정 > 호환성 > 관리자 권한으로 이 프로그램 실행 부분을 체크해준다.
4) cmd에서 python을 입력하면 python.exe가 실행되면 설치 성공!
2. VS Code로 py 실행
1) VScode에서 /stockauto 폴더를 생성하여 실행한 다음 terminal(cmd)을 열어 라이브러리를 설치해준다
$ pip install pywinauto
→ pywinauto는 윈도우 작업을 자동화하는 파이썬 라이브러리이다.
2) test.py 파일을 생성한다
그러면 아래와 같은 알림이 뜨는데 이는 VS Code에서 지원하는 python 확장 프로그램으로 install을 클릭하여 설치한다 (juptyer도 설치)
jupyter를 실행시켜 (ctrl+shift+p) > python select interpreter를 선택한 후 이번에 설치한 v3.8.6 32bit를 선택해준다.
그럼 vscode하단에 해당 버전이 설정되었다는 것을 확인시켜준다.
3. 크레온API로 주식 투자 코드짜보기
사전으로 대신증권 크레온 앱 다운 > 크레온 비대면 계좌 개설 > 윈도우에 크레온 HTS 다운을 실행해줘야 한다.
힘들게 고생하지말고 API 복붙하면 간단하다.
종목리스트 구하기 코드
import win32com.client
# 연결 여부 체크
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect
if (bConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
exit()
# 종목코드 리스트 구하기
objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
codeList = objCpCodeMgr.GetStockListByMarket(1) #거래소
codeList2 = objCpCodeMgr.GetStockListByMarket(2) #코스닥
print("거래소 종목코드", len(codeList))
for i, code in enumerate(codeList):
secondCode = objCpCodeMgr.GetStockSectionKind(code)
name = objCpCodeMgr.CodeToName(code)
stdPrice = objCpCodeMgr.GetStockStdPrice(code)
print(i, code, secondCode, stdPrice, name)
print("코스닥 종목코드", len(codeList2))
for i, code in enumerate(codeList2):
secondCode = objCpCodeMgr.GetStockSectionKind(code)
name = objCpCodeMgr.CodeToName(code)
stdPrice = objCpCodeMgr.GetStockStdPrice(code)
print(i, code, secondCode, stdPrice, name)
print("거래소 + 코스닥 종목코드 ",len(codeList) + len(codeList2))
$python test.py
(크레온Plus가 로그인 되어있는 상태에서 실행)
4. 주가 Slack 알림 봇 만들기
1) api.slack.com 에서 stock-bot을 만든 후 자신의 채널에 추가해준다.
python프로젝트 폴더에 slacker 라이브러리를 설치한다 (link)
$ pip install slacker
슬랙의 정책 업데이트가 있어서 위의 라이브러리는 더이상 사용하지 못한다
(api.slack.com/changelog/2021-02-24-how-we-broke-your-slack-app)
2) 그래서 대신 requests 라이브러리를 설치한다.
$ pip install requests
3)requests를 활용하여 slacker의 기능을 하는 아래의 코드를 복붙한다.
post_message의 첫 번째 인자 myToken에는 slack에서 제공한 oauth토큰을 넣어주고
두번째에는 채널 이름, 세 번째에는 보낼 메세지를 입력한다.
slackbot.py
import requests
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)
myToken = "xoxb-123*****"
post_message(myToken,"#stock","jocoding")
4) 실행하면 아래와 같이 slack에 메세지가 전달된다.
$python slackbot.py
이제 저 세 번째 인자 메세지에 다른 정보를 입력하면 slack을 통해 주가를 확인할 수 있게 된다.
크레온Plus API에서 '주식 현재가 조회' 코드를 가져와 적용하면 아래와 같다.
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, 'A005930') #종목 코드 - 삼성전자
objStockMst.BlockRequest()
# 현재가 통신 및 통신 에러 처리
rqStatus = objStockMst.GetDibStatus()
rqRet = objStockMst.GetDibMsg1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
exit()
# 현재가 정보 조회
offer = objStockMst.GetHeaderValue(16) #매도호가
import requests
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)
myToken = "xoxb-1816391606471-1837334229092-qyNvyhx6plJMTV8HDVLulHcg"
post_message(myToken,"#stock","삼성 주가: "+ str(offer))
※ 출처
'Dot Programming > Python' 카테고리의 다른 글
[Python] Python Boto3로 AWS S3 사용법 간단 정리 (0) | 2021.05.20 |
---|---|
[Python] awscli, boto3를 이용하여 AWS S3 연동하기 (0) | 2021.05.18 |
[Python] BeautifulSoup으로 웹 스크래핑하기 (0) | 2021.05.12 |
[Python] Mac에서 Python 가상환경(Pyenv) 사용 (0) | 2021.03.23 |