반응형

전자공시(Open DART) 재무제표 크롤링 04:: 단일회사 주요계정

 

  앞서 "단일회사 전체 재무제표"를 크롤링 하면서 전자공시 사이트를 왔다갔다 하다보니 "단일회사 주요계정"을 조회하는 것도 주요지표로 상장기업을 선별하는데 유용할 것 같은 생각이 들었습니다. 그래서 이번에도 단일회사의 주요계정을 DART API로 요청하여 받아온 데이터를 그대로 줄리아 데이터프레임으로 반환하는 함수를 만들어보겠습니다.

 

  해당 API에 대한 설명은 전자공시 OPENDART 시스템 > 개발가이드 > 상장기업 재무정보 > 단일회사 주요계정 개발가이드를 살펴보시면 됩니다.

 

  일단 요청시 필수적인 인자를 살펴보면 다음과 같습니다.

명칭 타입 값 설명
crtfc_key API 인증키 STRING(40) 발급받은 인증키(40자리)
corp_code 고유번호 STRING(8) 공시대상회사의 고유번호(8자리)
※ 개발가이드 > 공시정보 > 고유번호 API조회 가능
bsns_year 사업연도 STRING(4) 사업연도(4자리)
※ 2015년 이후 부터 정보제공
reprt_code 보고서 코드 STRING(5) 1분기보고서 : 11013
반기보고서 : 11012
3분기보고서 : 11014
사업보고서 : 11011

 

API인증키와 고유번호에 대해서는 앞선 포스팅에서 설명하였습니다. 나머지 사업연도와 보고서코드는 본인이 원하는 값을 넣으면 되는 것이니, 단순해 보입니다.

 

반환되는 키와 값들을 살펴보니 이것도 많네요.

명칭 출력설명
rcept_no 접수번호 접수번호(14자리)

※ 공시뷰어 연결에 이용예시
- PC용 : http://dart.fss.or.kr/dsaf001/main.do?rcpNo=접수번호
- 모바일용 : http://m.dart.fss.or.kr/html_mdart/MD1007.html?rcpNo=접수번호
bsns_year 사업 연도 2019
stock_code 종목 코드 상장회사의 종목코드(6자리)
reprt_code 보고서 코드 1분기보고서 : 11013
반기보고서 : 11012
3분기보고서 : 11014
사업보고서 : 11011
account_nm 계정명 ex) 자본총계
fs_div 개별/연결구분 CFS:연결재무제표, OFS:재무제표
fs_nm 개별/연결명 ex) 연결재무제표 또는 재무제표 출력
sj_div 재무제표구분 BS:재무상태표, IS:손익계산서
sj_nm 재무제표명 ex) 재무상태표 또는 손익계산서 출력
thstrm_nm 당기명 ex) 제 13 기 3분기말
thstrm_dt 당기일자 ex) 2018.09.30 현재
thstrm_amount 당기금액 9,999,999,999
thstrm_add_amount 당기누적금액 9,999,999,999
frmtrm_nm 전기명 ex) 제 12 기말
frmtrm_dt 전기일자 ex) 2017.01.01 ~ 2017.12.31
frmtrm_amount 전기금액 9,999,999,999
frmtrm_add_amount 전기누적금액 9,999,999,999
bfefrmtrm_nm 전전기명 ex) 제 11 기말(※ 사업보고서의 경우에만 출력)
bfefrmtrm_dt 전전기일자 ex) 2016.12.31 현재(※ 사업보고서의 경우에만 출력)
bfefrmtrm_amount 전전기금액 9,999,999,999(※ 사업보고서의 경우에만 출력)
ord 계정과목 정렬순서 계정과목 정렬순서

 

키(key)값을 수차례 보다보니 이제 눈에 익는 것 같긴 하지만 데이터프레임에 넣을 때에는 한글명칭으로 넣을 생각입니다. 앞서 "전자공시(Open DART) 재무제표 크롤링 03:: 단일회사 전체 재무제표"를 하면서 만든 convertFnltt(url, items, item_names) 함수를 여기에서도 이용할 생각입니다. 또한 앞서 동일하게 JSON으로 받아오게끔 하겠습니다.

 

함수명은 "get_fnlttSinglAcnt"로 get 뒤에 약어들은 OpenDART에서 쓰는 걸 그대로 이용하고 있습니다. 아무튼 만들어진 함수는 다음과 같습니다. (마지막 convertFnltt 함수는 앞선 글에서 확인됩니다.)

using HTTP, JSON, DataFrames

function get_fnlttSinglAcnt(crtfc_key::String, corp_code::String,
                            bsns_year::String, reprt_code::String)
  items = ["rcept_no", "bsns_year", "stock_code", "reprt_code", "account_nm",
          "fs_div", "fs_nm","sj_div", "sj_nm", "thstrm_nm", "thstrm_dt",
          "thstrm_amount","thstrm_add_amount", "frmtrm_nm", "frmtrm_dt",
          "frmtrm_amount","frmtrm_add_amount", "bfefrmtrm_nm", "bfefrmtrm_dt",
          "bfefrmtrm_amount","ord"]
  item_names = ["접수번호", "사업연도", "종목코드", "보고서코드", "계정명",
                "개별연결구분","개별연결명", "재무제표구분", "재무제표명", "당기명",
                "당기일자","당기금액", "당기누적금액", "전기명", "전기일자",
                "전기금액","전기누적금액", "전전기명", "전전기일자", "전전기금액",
                "계정과목정렬순서"]
  url = "https://opendart.fss.or.kr/api/fnlttSinglAcnt.json"*
        "?crtfc_key=$(crtfc_key)"*"&corp_code=$(corp_code)"*
        "&bsns_year=$(bsns_year)"*"&reprt_code=$(reprt_code)"
  return convertFnltt(url,items,item_names)
end

 

이번에도 컬럼이 21개인지라 확인이 어려우니, 엑셀로 저장해서 보겠습니다. 요즘 코로나-19 진단키트로 아주 열광적이었던 씨젠의 2019년 사업보고서의 주요계정을 조회한 결과입니다.

 

julia> using XLSX

julia> df = get_fnlttSinglAcnt("OPENDART API 인증키","00788773","2019","11011")
julia> XLSX.writetable("report.xlsx", SHEET1=( collect(DataFrames.eachcol(df)), DataFrames.names(df) ))

 

주요계정이라 그런지 데이터가 길지 않아서 좋네요. 상장기업들의 주요계정만 모아서 주요지표로만 기업을 걸러보는 것도 재미있겠네요.

반응형

+ Recent posts