def get_corp_code() -> OrderedDict: """ DART에 등록되어있는 공시대상회사의 고유번호,회사명,대표자명,종목코드, 최근변경일자 다운로드 Returns ------- OrderedDict 고유번호 및 회사 정보 """ import tempfile with tempfile.TemporaryDirectory() as path: url = 'https://opendart.fss.or.kr/api/corpCode.xml' # Set API KEY api_key = get_api_key() payload = {'crtfc_key': api_key} # Request Download resp = request.download(url=url, path=path, payload=payload) download_path = resp['full_path'] cache_folder = get_cache_folder() # Unzip File in User Cache Folder unzip_path = unzip(file=download_path, path=cache_folder) # Search CORPCODE.xml files = search_file(path=unzip_path, filename='CORPCODE', extensions='xml') if len(files) == 0: raise FileNotFoundError('CORPCODE.xml Not Found') file = files[0] data = xml_to_dict(file) return data['result']['list']
def download_document(path: str, rcept_no: str) -> str: """ 공시서류원본파일 다운로드 Parameters ---------- path: str download path rcept_no: str 접수번호 Returns ------- str download full path """ url = 'https://opendart.fss.or.kr/api/document.xml' # Set API KEY api_key = get_api_key() payload = { 'crtfc_key': api_key, 'rcept_no': rcept_no, } resp = request.download(url=url, path=path, payload=payload) return resp['full_path']
def api_request(path: str, corp_code: str, bsns_year: str = None, reprt_code: str = None) -> dict: """ API Request Helper Parameters ---------- path: str API Path corp_code: str Corporation Code (8 digits) bsns_year: str, optional Year (4 digits) reprt_code: str, optional Report code( Q1: 11013, half: 11012, Q3: 11014, Annual: 11011) Returns ------- dict API Request Result """ if corp_code and corp_code_checker.search(corp_code) is None: raise ValueError('corp_code must be 8 digits') if bsns_year and bsns_year_checker.search(bsns_year) is None: raise ValueError('bsns_year must be 4 digits') if reprt_code and reptr_code_checker.search(reprt_code) is None: raise ValueError('invalid reprt_code') # Open DART Base URL base = 'https://opendart.fss.or.kr/' # Request URL url = urljoin(base, path) # Get DART_API_KEY api_key = get_api_key() # Set payload payload = { 'crtfc_key': api_key, 'corp_code': corp_code, 'bsns_year': bsns_year, 'reprt_code': reprt_code, } # Request Data resp = request.get(url=url, payload=payload) # Convert Response to json dataset = resp.json() # Status Code Check check_status(**dataset) return dataset
def get_multi_corp(corp_code: Union[str, List[str]], bsns_year: str, reprt_code: str): """ 다중회사 주요계정 조회 Parameters ---------- corp_code: str or list of str 공시대상회사의 고유번호(8자리) ex) ['00356370','00334624'] bsns_year: str 사업연도(4자리) reprt_code: str 1분기보고서 : 11013, 반기보고서 : 110123, 3분기보고서 : 11014, 사업보고서 : 11011 Returns ------- dict 다중회사 주요계정 조회 결과 """ if reprt_code and reptr_code_checker.search(reprt_code) is None: raise ValueError('invalid reprt_code') if bsns_year and bsns_year_checker.search(bsns_year) is None: raise ValueError('bsns_year must be 4 digits') # Open DART Base URL base = 'https://opendart.fss.or.kr/' # Path path = '/api/fnlttMultiAcnt.json' # Request URL url = urljoin(base, path) # Get DART_API_KEY api_key = get_api_key() # Set payload payload = { 'crtfc_key': api_key, 'corp_code': corp_code, 'bsns_year': bsns_year, 'reprt_code': reprt_code, } # Request Data resp = request.get(url=url, payload=payload) # Convert Response to json dataset = resp.json() # Status Code Check check_status(**dataset) return dataset
def download_xbrl(path: str, rcept_no: str, reprt_code: str = None) -> str: """ XBRL 파일 다운로드 Parameters ---------- path: str Download Path rcept_no: str 접수번호 reprt_code: str, optinal 1분기보고서 : 11013 반기보고서 : 11012 3분기보고서 : 11014 사업보고서 : 11011 Returns ------- str xbrl file path """ import tempfile with tempfile.TemporaryDirectory() as temp: url = 'https://opendart.fss.or.kr/api/fnlttXbrl.xml' # Set API KEY api_key = get_api_key() payload = { 'crtfc_key': api_key, 'rcept_no': rcept_no, 'reprt_code': reprt_code } # Request Download resp = request.download(url=url, path=temp, payload=payload) download_path = resp['full_path'] # Unzip File in User Cache Folder unzip_path = unzip(file=download_path, path=path) # Search XBRL file files = search_file(path=unzip_path) if len(files) == 0: raise FileNotFoundError('XBRL File Not Found') file = files[0] return file
def search_filings(corp_code: str = None, bgn_de: str = None, end_de: str = None, last_reprt_at: str = 'N', pblntf_ty: str_or_list = None, pblntf_detail_ty: str_or_list = None, sort: str = 'date', sort_mth: str = 'desc', page_no: int = 1, page_count: int = 10): """ 공시보고서 검색 Parameters ---------- corp_code: str, optional 공시대상회사의 고유번호(8자리), 고유번호(corp_code)가 없는 경우 검색기간은 3개월로 제한 bgn_de: str, optional 검색시작 접수일자(YYYYMMDD), 없으면 종료일(end_de) end_de: str, optional 검색종료 접수일자(YYYYMMDD), 없으면 당일 last_reprt_at: str, optional 최종보고서만 검색여부(Y or N), default : N pblntf_ty: str, optional 공시유형 pblntf_detail_ty: str, optional 공시상세유형 sort: str, optional 정렬, {접수일자: date, 회사명: crp, 고서명: rpt} sort_mth: str, optional 오름차순(asc), 내림차순(desc), default : desc page_no: int, optional 페이지 번호(1~n) default : 1 page_count: int, optional 페이지당 건수(1~100) 기본값 : 10, default : 100 Returns ------- dict Response data """ url = 'https://opendart.fss.or.kr/api/list.json' api_key = get_api_key() last_reprt_at = str_upper(last_reprt_at) pblntf_ty = str_upper(pblntf_ty) pblntf_detail_ty = str_upper(pblntf_detail_ty) payload = { 'crtfc_key': api_key, 'corp_code': corp_code, 'bgn_de': bgn_de, 'end_de': end_de, 'last_reprt_at': last_reprt_at, 'pblntf_ty': pblntf_ty, 'pblntf_detail_ty': pblntf_detail_ty, 'sort': sort, 'sort_mth': sort_mth, 'page_no': page_no, 'page_count': page_count } resp = request.get(url=url, payload=payload) dataset = resp.json() # Check Error check_status(**dataset) return dataset
def dart_api_key(): api_key = os.getenv("DART_API_KEY") if api_key is None: pytest.exit('DART_API_KEY not set') else: return get_api_key()
def get_single_fs(corp_code: str, bsns_year: str, reprt_code: str, fs_div: str): """ 단일회사 전체 재무제표 조회 Parameters ---------- corp_code: str 공시대상회사의 고유번호(8자리) bsns_year: str 사업연도(4자리) reprt_code: str 1분기보고서 : 11013, 반기보고서 : 110123, 3분기보고서 : 11014, 사업보고서 : 11011 fs_div: str CFS:연결재무제표, OFS:재무제표 Returns ------- dict 단일회사 전체 재무제표 """ if corp_code_checker.search(corp_code) is None: raise ValueError('corp_code must be 8 digits') if bsns_year_checker.search(bsns_year) is None: raise ValueError('bsns_year must be 4 digits') if reptr_code_checker.search(reprt_code) is None: raise ValueError('invalid reprt_code') if fs_div_checker.search(fs_div) is None: raise ValueError('fs_div must be CFS or OFS') fs_div = fs_div.upper() # Open DART Base URL base = 'https://opendart.fss.or.kr/' path = '/api/fnlttSinglAcntAll.json' # Request URL url = urljoin(base, path) # Get DART_API_KEY api_key = get_api_key() # Set payload payload = { 'crtfc_key': api_key, 'corp_code': corp_code, 'bsns_year': bsns_year, 'reprt_code': reprt_code, 'fs_div': fs_div, } # Request Data resp = request.get(url=url, payload=payload) # Convert Response to json dataset = resp.json() # Status Code Check check_status(**dataset) return dataset