다른 분이 작성하신 증권사 API 관련 코드입니다. 중간에 BlockRequest()로 값을 넘겨준 뒤 증권사 서버로부터 cpSvr7254.GetHeaderValue(1) 메소드를 통해 자료를 받고 GetDataValue로 자료를 리턴하거나 출력하는 형식입니다.
그런데 중간에 보면 for 안에 for이 들어간 부분이 있습니다. 이것을 어떤 식으로 읽어 오는 지 잘 모르겠습니다. 모두 완성하고 나서 데이터 값은 밑의 엑셀 파일과 같이 되는데요. 가로 데이터 개수가 14개라서 'for ixCol in range(14)'에 14을 입력한 것은 알겠습니다. 그런데 이게 어떤 형식으로 데이터를 읽어 나가는 건 지 잘 모르겠습니다. 세로 방향으로 다 읽어 낸 뒤 tempdata에 입력하고 그 다음에 가로 방향으로 입력하는 건가요? 혼자 해결해보려고 했지만 너무 힘드네요. 고수 분의 답변을 기다립니다.
import time
import win32com.client
def subCpSvr7254(m_code, m_FromDate, m_ToDate):
## 대신 API 세팅
cpSvr7254 = win32com.client.Dispatch("CpSysDib.CpSvr7254")
cpSvr7254.SetInputValue(0, m_code) # 종목코드
cpSvr7254.SetInputValue(1, '6') # 기간선택 0:기간선택, 1:1개월, ... , 4:6개월
cpSvr7254.SetInputValue(2, m_FromDate) # 시작일자
cpSvr7254.SetInputValue(3, m_ToDate) # 끝일자
cpSvr7254.SetInputValue(4, '0') # 0:순매수 1:비중
cpSvr7254.SetInputValue(5, '0') # 투자자
**cpSvr7254.BlockRequest()**
**numData=cpSvr7254.GetHeaderValue(1)
#print(numData)
data=[]
for ixRow in range(numData):
tempData=[]
for ixCol in range(14):
tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
data.append(tempData)**
#연속 수행
while cpSvr7254.Continue:
cpSvr7254.BlockRequest()
numData = cpSvr7254.GetHeaderValue(1)
#print(numData)
for ixRow in range(numData):
tempData=[]
for ixCol in range(14):
tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
data.append(tempData)
time.sleep(0.1)
return data
from subDS import subCpSvr7254
from pandas import DataFrame
if __name__ == "__main__":
code='A005930' # 삼성전자 코드
fromDate = '20161201' # 요청 시작 날짜
toDate = '20161223' # 요청 마지막 날짜
### 자료가져오기
data=subCpSvr7254(code, fromDate, toDate)
print(data)
df=DataFrame(data, columns=['일자', '개인', '외국인', '기관계', '금융투자', '보험', '투신', '은행', '기타금융', '연기금', '기타법인', '기타외인', '사모펀드', '국가지자체'])
df.to_csv('subCpSvr7254.csv')