이하영

open api connection

1 +# Default ignored files
2 +/shelf/
3 +/workspace.xml
1 +<component name="InspectionProjectProfileManager">
2 + <settings>
3 + <option name="USE_PROJECT_PROFILE" value="false" />
4 + <version value="1.0" />
5 + </settings>
6 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
4 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/.idea/proj.iml" filepath="$PROJECT_DIR$/.idea/proj.iml" />
6 + </modules>
7 + </component>
8 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="PYTHON_MODULE" version="4">
3 + <component name="NewModuleRootManager">
4 + <content url="file://$MODULE_DIR$" />
5 + <orderEntry type="inheritedJdk" />
6 + <orderEntry type="sourceFolder" forTests="false" />
7 + </component>
8 +</module>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="VcsDirectoryMappings">
4 + <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +from PyQt5.QtWidgets import *
2 +from PyQt5.QAxContainer import *
3 +from PyQt5.QtCore import *
4 +from pandas import DataFrame
5 +import time
6 +import sys
7 +import logging.handlers
8 +
9 +# set formatter object
10 +formatter = logging.Formatter('[%(levelname)s|%(filename)s:%(lineno)s] %(asctime)s > %(message)s')
11 +logger = logging.getLogger("crumbs")
12 +logger.setLevel(logging.DEBUG)
13 +# set handler object
14 +streamHandler = logging.StreamHandler()
15 +streamHandler.setFormatter(formatter)
16 +logger.addHandler(streamHandler)
17 +
18 +TR_REQ_TIME_INTERVAL = 0.2
19 +
20 +class OpenApi(QAxWidget):
21 + def __init__(self):
22 + super().__init__()
23 +
24 + # event_loop list
25 + self.login_event_loop=None
26 +
27 + self._get_instance()
28 + self._event_slot()
29 + self.comm_connect()
30 + self.account_info()
31 +
32 + # get ocx controller for kioom open api
33 + def _get_instance(self):
34 + try:
35 + self.setControl("KHOPENAPI.KHOpenAPICtrl.1")
36 + except Exception as e:
37 + logger.critical(e)
38 +
39 + # deal events for using open api
40 + def _event_slot(self):
41 + try:
42 + self.OnEventConnect.connect(self.login_slot)
43 + except Exception as e:
44 + logger.critical(e)
45 +
46 + # if login event success, return errCode=0
47 + def login_slot(self,errCode):
48 + try:
49 + if errCode==0:
50 + logger.debug("connected")
51 + else:
52 + logger.debug("failed to connect. err_code : "+errCode)
53 + self.login_event_loop.exit()
54 + except Exception as e:
55 + logger.critical(e)
56 +
57 + # try login
58 + def comm_connect(self):
59 + try:
60 + self.dynamicCall("CommConnect()")
61 + self.login_event_loop = QEventLoop() # wait for login complete
62 + self.login_event_loop.exec_()
63 + except Exception as e:
64 + logger.critical(e)
65 +
66 + # get user account information
67 + def get_login_info(self,tag):
68 + try:
69 + ret=self.dynamicCall("GetLoginInfo(QString)",tag)
70 + return ret
71 + except Exception as e:
72 + logger.critical(e)
73 +
74 + # print user account information
75 + def account_info(self):
76 + try:
77 + account_number=self.get_login_info("ACCNO")
78 + self.account_no=account_number.split(";")[0]
79 + logger.debug("계좌번호 : "+self.account_no)
80 + except AttributeError as e:
81 + logger.critical(e)
82 +
83 +if __name__ == "__main__":
84 + app = QApplication(sys.argv)
85 + OpenApi()
...\ No newline at end of file ...\ No newline at end of file