1. Dart 회원가입
- https://opendart.fss.or.kr/uat/uia/egovLoginUsr.do
- 인증키 신청으로 회원 가입 후 API KEY를 발급 받을 수 있다
- 발급 받은 API는 "마이페이지/오픈API 이용현황"에서 확인 가능하다
2. 회사 정보 다운로드 및 가공
- Dart에 등록된 고유번호 API를 가져와 회사 정보를 가져온다.
- API 정보 : https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019018
- Dart에서 등록 된 고유번호는 zip파일로 다운로드 되며 다운로드 된 파일을 가공하는 부분까지 정리해놓았다
3. 회사 정보 가공 코드
#회사 정보 저장 ( 외부에서 데이터 가져와서 저장 )
def getCompanyFileData(dbInfo):
dartKey = "[Dart에서 받은 API Key]"
# 저장 폴더
filePath = "Data/TmpData/"
# 회사 고유 정보 파일 저장 위치
nowFileNm = filePath + "CORPCODE.xml"
# 이전에 받았던 파일 저장 위치
preFileNm = filePath + "PRE_CORPCODE.xml"
reqParam = {}
# Dart에서 발급 받은 API Key
reqParam["crtfc_key"] = dartKey
# API 호출
res = requests.get(self.corpCode, params=reqParam)
# API 호출 후 return 받은 바이너리 값을 zip파일로 저장 후 xml파일로 압축해제
# 다운로드 받은 파일은 아래와 같은 xml 파일 형식으로 되어있다
# <result>
# <list>
# <corp_code>00434003</corp_code>
# <corp_name>다코</corp_name>
# <stock_code> </stock_code>
# <modify_date>20170630</modify_date>
# </list>
# <list>
# <corp_code>00434456</corp_code>
# <corp_name>일산약품</corp_name>
# <stock_code> </stock_code>
# <modify_date>20170630</modify_date>
# </list>
# </result>
with ZipFile(BytesIO(res.content)) as zipfile:
zipfile.extractall(filePath)
# 현재 받은 파일 MD5값 추출
nowFileMd5 = FileUtil.fileHash(nowFileNm)
# 이전에 받은 파일 MD5값 추출
preFileMd5 = FileUtil.fileHash(preFileNm)
# 현재파일과 이전파일과 수정될 경우 MD5값이 불일치 되므로 다른값일 경우 가공
if(nowFileMd5 != preFileMd5) :
xmlTree = parse(nowFileNm)
root = xmlTree.getroot()
list = root.findall('list')
for corpData in list:
param = {}
param["comCd"] = corpData.findtext('corp_code').replace(' ', '')
param["comNm"] = corpData.findtext('corp_name').replace(' ', '')
param["stockCd"] = corpData.findtext('stock_code').replace(' ', '')
param["comUseYn"] = "Y"
#param[""] = corpData.findtext('modify_date')
param["updId"] = "batch"
param["updDt"] = "SYSDATE"
# DB에 저장된 회사 정보 조회 ( comCd값이 고유값이기때문에 comCd값으로 조회 )
compnayData = dbInfo.select("selectCompany", param)
if len(compnayData) < 1 :
param["regId"] = "batch"
param["regDt"] = "SYSDATE"
# comCd값이 DB에 존재하지 않을 경우 INSERT
dbInfo.insert("STOCK_COMP", param)
else :
wParam = {}
wParam["comCd"] = corpData.findtext('corp_code')
# comCd값이 DB에 존재하지 않을 경우 UPDATE
dbInfo.update("STOCK_COMP", param, wParam)
# 이번에 다운로드 받은 파일을 이전 파일로 변경
FileUtil.fileMove(preFileNm, nowFileNm)
'개발 > 주식 ( Python )' 카테고리의 다른 글
Dart API를 이용하여 상세 정보 가져오기 (0) | 2024.01.10 |
---|