본문 바로가기

개발/주식 ( Python )

Dart API를 이용하여 회사 정보 가져오기

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