logo

CYBOS Plus 설치 튜토리얼 📂데이터확보

CYBOS Plus 설치 튜토리얼

환경

  • OS: Windows
  • IDE: VS code

가이드

윈도에서 CYBOS Plus를 설치하고 파이썬으로 연결상태를 확인하는 튜토리얼이다. 파이썬의 객체지향성이나 IDE를 다루는 부분에서는 어느정도 익숙한 사용자라고 가정하겠다.


Step 1. CYBOS Plus 설치

20210716_105422.png

대신증권 다운로드 센터에서 CYBOS Plus를 다운로드 받자.

20210716_105831.png

사실 따로 받을 수 있는 건 아니고, CYBOS 프로그램 안에 Plus가 내장된 형태라 CYBOS를 받긴 해야한다. 마법사의 지시에 따라 설치를 진행하면 된다. 설치가 끝나고 나면 Visual C++ 2008 Setup이 진행된다. 이 단계에서는 조금 오래 기다릴 뿐 별로 어려운 게 없다.

20210716_112458.png

재부팅 할거냐고 물어보면 순순히 재부팅하도록 하자.


Step 2. CYBOS Plus 연결 확인

다음은 CYBOS Plus가 연결되었는지 확인해주는 파이썬 코드로, win32com.clientDispatch() 모듈이 CYBOS를 사용할 수 있는 객체인 instCpCybos를 가져와준다. 연결된 경우 마지막에 IsConnect 프로퍼티가 1로 출력된다. 만약 win32com.client가 존재하지 않을 경우 pip install pywin32로 설치하면 된다.

import win32com.client
instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
print(instCpCybos.IsConnect)

물론 저대로 실행하면 당연히 다음과 같은 에러가 난다. CYBOS Plus를 설치만 했을 뿐 실행하지 않았기 때문이다.

>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
Traceback (most recent call last):
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 81, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 83, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221005, '잘못된 클래스 문자열입니다.', None, None)

이 외에도 에러가 일어났다면 그 이유는 다음 네가지 중 하나일 가능성이 높다:

  • Dispatch("CpUtil.CpCybos")에 들어간 문자열에 오타가 있다.
  • CYBOS Plus를 실행하지 않았다.
  • IDE 혹은 터미널을 관리자권한으로 실행하지 않았다.
  • 파이썬이 32-bit가 아니다.

역으로 위 조건 중 하나라도 만족시키지 못하면 에러가 날 가능성이 높다.


Step 3. CYBOS Plus 실행

20210716_114818.png

CYBOS를 실행하고 위 스크린샷과 같이 정확히 CYBOS Plus 탭을 선택한 후 로그인한다. 잠시 기다리면 다음과 같이 CYBOS Plus 공지사항을 보여주는 창이 뜬다.

20210716_120746.png

트레이에서 CYBOS Plus Start라는 프로그램이 실행되고 있는지 확인할 수 있다.

20210716_120758.png

이 상태에서 다시 연결여부를 확인해보면 아까와는 다르지만 여전히 에러가 뜬다.

>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
Traceback (most recent call last):
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 81, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221021, '작업을 사용할 수 없습니다.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 98, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Users\rmsms\AppData\Local\Programs\Python\Python37\lib\site-packages\win32com\client\dynamic.py", line 83, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None)

Step 4. Python 32-bit 설치

꼭 파이썬이 아니라도 CYBOS Plus는 32-bit로 개발되었기 때문에 사용하고 있는 환경이 어떻게 되든 CYBOS Plust를 불러올 응용 프로그램은 32-bit여야한다.

20210716_121639.png

파이썬 다운로드 페이지에서 32-bit 인스톨러를 찾아 다운로드한다. 만약 본인이 기존에 쓰던 파이썬 64-bit와 같이 쓰기 싫다면 이 기회에 아나콘다 32-bit를 설치해보는 것도 나쁘지 않다. 거꾸로 conda를 쓰던 사람은 그냥 pip를 써보는 것도 괜찮다.

버전 컨트롤이라는게 별로 간편하지도 않거니와 CYBOS Plus 외에 32-bit를 굳이 쓸 필요가 없는 개발자라면 반대 버전을 설치하는 게 훨씬 편할 것이다. 어쨌든 여기선 굳이 아나콘다를 설치하지 않고 pip로 버전을 관리해보겠다. 통으로 아나콘다를 설치하는 게 가장 간단한데, 그래도 튜토리얼이니만큼 제일 어려운 길로 돌아가보는 것이다.

다음은 Python 3.7.2 64-bit를 사용하던 컴퓨터에서 굳이 Python 3.9.6 32-bit를 설치한 후, 거기서 win32com을 사용할 수 있도록 패키지를 설치한 명령어다.

C:\Users\rmsms\AppData\Local\Programs\Python\Python39-32\python.exe -m pip install pywin32

이제 연결 상태를 확인해보면 다음과 같이 에러는 일으키지 않지만 연결이 되지 않아 0이 출력되는 것을 확인할 수 있다.

Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:04:37) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
>>> print(instCpCybos.IsConnect)
0

Step 5. IDE 혹은 터미널 관리자 권한으로 실행

20210716_125142.png

관리자 권한으로 IDE를 실행시키고 다시 연결을 확인해보면 다음과 같이 1이 출력되는 것을 확인할 수 있다.

Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:04:37) [MSC v.1929 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> instCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
>>> print(instCpCybos.IsConnect)
1

20210716_125642.png

연결은 됐다는데 실제로 정보를 받아오는지 어떤지 알 수가 없으니 종목명으로 종목코드가 불러지는지를 확인해보자. 예를 들어 ‘씨젠’이면 다음과 같이 A096530을 잘 받아온다.

>>> instCpStockCode = win32com.client.Distpatch("CpUtil.CpStockCode")
>>> seegene = instCpStockCode.NameToCode("씨젠"); seegene
'A096530'

이러한 API의 응용 프로그램은 CYBOS Plus가 실행된 상태에서만 사용할 수 있다.