본문 바로가기
python/주식

python - 다트.전자공시 Open API 활용(2), 기업개황 응답데이터 JSON 핸들링( JSON 기초 )

by 맑은안개 2020. 2. 23.

 

 

 

 

 

전자공시 OPEN API는 응답 데이터유형으로 JSON과 XML을 제공한다.

JSON과 XML중 어떤 데이터 포맷을 사용할지는 사용자의 몫이다. 가독성은 기본이고 협업을 하는 상황이라면 다수 사용자들이 다루기 쉬운 용어가 더 적합할 것이다. 본 장에서는 JSON 포맷을 다룬다. 

 

관련 포스트 시리즈

 

JSON이란 ? 

https://ko.wikipedia.org/wiki/JSON

JSON(제이슨, JavaScript Object Notation)은 속성-값 쌍( attribute–value pairs and array data types (or any other serializable value)) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.

 

JSON은 다음과 같은 기본 자료형을 제공한다.

  • Object
  • String
  • Number
  • Array
  • Boolean 

JSON 데이터 구조

 {
    "이름": "홍길동",   # string
    "나이": 25,		 # Number
    "성별": "여",
    "주소": "서울특별시 양천구 목동",
    "특기": ["농구", "도술"],      # Array
    "가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},  # Object
    "회사": "경기 수원시 팔달구 우만동"
 }
 
 출처: https://ko.wikipedia.org/wiki/JSON

 

JSON과 Python 의 기본자료형 구조 비교

JSON Python
object dict
string str
number int, float
true / false True / False
null None

 

Python은 JSON 라이브러리를 Built-in 라이브러리로 포함하고 있다. 별도 설치없이 아래와 같이 사용할 수 있다.

import JSON

 

자 이제 OPEN DART의 기업개황 서비스 호출하고 JSON 포맷으로 수신해보자

 

python - [OPEN DART]전자공시 OPEN API, HTTP로 얻은 Stream zip파일 읽기

https://youngwonhan-family.tistory.com/6 에서 HTTP url 호출하는 내용을 그대로 사용한다.

 

기업개황 URL : https://opendart.fss.or.kr/api/company.json

from urllib.request import urlopen
from zipfile import ZipFile
from io import BytesIO

def bind_params(params : dict):
  url_params = []
  for key in params:
    url_params.append(key + '=' + params[key])
  return url_params

url = 'https://opendart.fss.or.kr/api/company.json?'
params = {
  'crtfc_key':'Insert your crtfc key', # API 인증키
  'corp_code':'00132008' # 기업 고유번호 8자리
}

url = url + '&'.join(bind_params(params))

resp = urlopen(url)

if resp.code == 200:
    resp_json_str = resp.read().decode()

    

수신한 resp_json 데이터를 출력해보자

>>> print(resp_json_str)

{"status":"000","message":"정상","corp_code":"00132008","corp_name":"(주)선우",
"corp_name_eng":"SUN WOO CO., LTD.","stock_name":"선우","stock_code":"",
"ceo_nm":"김병욱","corp_cls":"E","jurir_no":"1701110017162","bizr_no":"5038113212",
"adres":"경상북도 고령군 성산면 성산로 868 (어곡리)","hm_url":"www.isunwoo.com","ir_url":"",
"phn_no":"054-955-1700","fax_no":"054-955-1715","induty_code":"33303","est_dt":"19810427",
"acc_mt":"12"}

 >>> print(type(resp_json_str))
 
 <class 'str'>

 형태는 JSON으로 보이지만 str 형태이다. JSON data가 데이터 송수신등을 위해 직렬화 되어있는 상태이다. 이를 역직렬화 하기 위해서 load 함수를 사용하여 JSON Object로 변환한다.

>>> resp_json = json.loads(resp_json_str)
    
>>> print(type(resp_json))
    
>>> print(json.dumps(resp_json, indent=4, ensure_ascii=False))

 

반응형