전자공시시스템(dart) Open API 활용하기(1) 공시정보 - 고유번호 가져오기
최근 코로나 이슈로 장이 말그대로 꼬꾸라지고 있다.
이러한 현실에서 도피하기 위해 뉴스를 멀리하고 DART를 둘러보던중
오픈다트라는 것이 생긴것이 아닌가?
기존에도 있었지만 그것을 좀 더 확대 개편을 해서 현재 시범운영 중이라고 한다.
4월 1일부터 정식 서비스 되며 그전까지는 최근 3년치 데이터만 이용 가능하다고 한다.
근데 2월 중으로 업데이트 되기로 한 부분이 아직도 업데이트가 안되고 있는 것으로 보아 연기 될 가능성도 없지않아 있어보인다.
어쨌던 시간이 남아도는 주제에 주식투자하는 시간을 줄이는데 관심이 많은 나로써는 아주 흥미로운 대상이다.
한번 공부해 보자.
일단 무슨 언어를 쓸 것인가?
고민 없이 파이썬을 선택한다.
왜냐면 머신러닝과 tensorflow를 공부하면서 최근에서야 파이썬을 사용하게 됐는데
한번 써보니까 데이터 처리용으로 너무 편하다.
그냥 파이썬 쓰자.
오늘 목표는 각 회사의 재무데이터를 정리하기 위해 일단 고유번호를 가져와서 정리 해 보는거였고.
했다 (?)
(쓸말이 없구만..)
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from zipfile import ZipFile
from io import BytesIO
import xml.etree.ElementTree as elemTree
API_key = "xxxxxxxxxxxxxxxxx"
url = "https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=" + API_key
resp = urlopen(url)
# 수신된 resp의 bytes를 Buffer에 쌓고 zip file을 로드한다. #도움(맑은안개님): https://youngwonhan-family.tistory.com/6
with ZipFile(BytesIO(resp.read())) as zf:
file_list = zf.namelist()
while len(file_list) > 0:
file_name = file_list.pop()
corpCode = zf.open(file_name).read().decode()
tree = elemTree.fromstring(corpCode)
XML_stocklist = tree.findall("list")
corp_code = [x.findtext("corp_code") for x in XML_stocklist]
corp_name = [x.findtext("corp_name") for x in XML_stocklist]
stock_code = [x.findtext("stock_code") for x in XML_stocklist]
modify_date = [x.findtext("modify_date") for x in XML_stocklist]
stocklist = {}
for i in range(len(corp_code)):
stocklist[corp_code[i]] = (corp_name[i], stock_code[i], modify_date[i])
for i in corp_code:
print(stocklist[i])
마지막 출력부는 테스트용으로 만들어 놓았는데 길이가 엄청나서 시간을 많이 잡아먹는다. 주의.
중간 쯔음 zipfile 압축푸는 부분은 머리싸메면서 구글링 하다가 누가 만들어 놓았길래 가져왔다.
https://youngwonhan-family.tistory.com/6 감사합니다.
데이터 구조는 {corp_code : (corp_name, stock_code, modify_date)} 로 만들었다.
딕셔너리로 만들어 놓으면 검색속도가 빠를 것 같고 내용물은 혹시라도 수정되면 안되니까 튜플로 만들었는데
이렇게 하는게 좋은 건지는 잘 모르겠다.
어쨌던 오늘은 여기까지
단일회사 전체 재무제표 기다리고 있습니다. 2월 중 맞는거 겠죠? 일해라 dart