OpenDartAPI 기업 직원 현황 정보 DBMS insert

 

DBMS : MariaDB 10.x 를 설치하여 사용하였습니다.
 
 
Step.1 DB Table 생성

create table yym_project_eis.OpenDart_03_info_employee
(
    od_03_pk                       bigint auto_increment primary key,
    od_03_corp_code                varchar(200) null comment '고유번호 공시대상회사의 고유번호(8자리)',
    od_03_corp_name                varchar(200) null comment '법인명',
    od_03_bsns_year                varchar(200) null comment '사업년도',
    od_03_fo_bbm                   varchar(200) null comment '사업부문',
    od_03_sexdstn                  varchar(200) null comment '성별	남, 여',
    od_03_reform_bfe_emp_co_rgllbr varchar(200) null comment '개정 전 직원 수 정규직',
    od_03_reform_bfe_emp_co_cnttk  varchar(200) null comment '개정 전 직원 수 계약직',
    od_03_reform_bfe_emp_co_etc    varchar(200) null comment '개정 전 직원 수 기타',
    od_03_rgllbr_co                varchar(200) null comment '정규직 수	상근, 비상근',
    od_03_rgllbr_abacpt_labrr_co   varchar(200) null comment '정규직 단시간 근로자 수	대표이사, 이사, 사외이사 등',
    od_03_cnttk_co                 varchar(200) null comment '계약직 수	9,999,999,999',
    od_03_cnttk_abacpt_labrr_co    varchar(200) null comment '계약직 단시간 근로자 수	9,999,999,999',
    od_03_sm                       varchar(200) null comment '합계	9,999,999,999',
    od_03_avrg_cnwk_sdytrn         varchar(200) null comment '평균 근속 연수	9,999,999,999',
    od_03_fyer_salary_totamt       varchar(200) null comment '연간 급여 총액	9,999,999,999',
    od_03_jan_salary_am            varchar(200) null comment '1인평균 급여 액	9,999,999,999'
)
    comment '직원정보';



Step.2 기업재무정보 수집 및 DB insert

# -*- coding: utf-8 -*-

# OpenDartAPI
# - https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS002&apiId=2019011
# - 사업보고서 주요내용 : 직원현황 정보

import sys
import xml.etree.ElementTree as ET
import mysql.connector
import requests



class ClassAPI_empStatus:
    def __init__(self):
        self.apiKey = "----------------------------------------"
        self.apiUrl = ""
        self.corp_code = ""
        self.bsns_year = ""
        self.reprt_code = ""

    def set_api_url(self):
        url = "https://opendart.fss.or.kr/api/empSttus.xml"
        url = url + "?crtfc_key=" + self.apiKey
        url = url + "&corp_code=" + self.corp_code
        url = url + "&bsns_year=" + self.bsns_year
        url = url + "&reprt_code=" + self.reprt_code
        self.apiUrl = url
        return url

    def call_api(self):
        self.set_api_url()
        response = requests.get(self.apiUrl)
        ### http 통신 결과 코드 확인
        # print("response.status_code : " + str(response.status_code))
        ## http 요청이 성공했을때 API의 리턴값을 가져옵니다.
        if response.status_code == 200:
            rtnString = response.text

        return rtnString


if __name__ == '__main__':
    dbConn = mysql.connector.connect(
        user='--------'
        , password='--------'
        , host='--------'
        , database='--------'
    )

    Obj = ClassAPI_empStatus()

    # 대상기업 : 삼성전자
    Obj.corp_code = "00126380"

    # 대상연도 : 2021
    Obj.bsns_year = "2021"

    # 보고서종류 : 년간사업보고서
    Obj.reprt_code = "11011"

    Obj.call_api()

    tree = ET.fromstring(Obj.call_api())
    ET.dump(tree)

    sql = "insert into OpenDart_03_info_employee SET"
    sql += " od_03_corp_code = %s"
    sql += " ,od_03_corp_name = %s"
    sql += " ,od_03_bsns_year = %s"
    sql += " ,od_03_fo_bbm = %s"
    sql += " ,od_03_sexdstn = %s"
    sql += " ,od_03_reform_bfe_emp_co_rgllbr = %s"
    sql += " ,od_03_reform_bfe_emp_co_cnttk = %s"
    sql += " ,od_03_reform_bfe_emp_co_etc = %s"
    sql += " ,od_03_rgllbr_co = %s"
    sql += " ,od_03_rgllbr_abacpt_labrr_co = %s"
    sql += " ,od_03_cnttk_co = %s"
    sql += " ,od_03_cnttk_abacpt_labrr_co = %s"
    sql += " ,od_03_sm = %s"
    sql += " ,od_03_avrg_cnwk_sdytrn = %s"
    sql += " ,od_03_fyer_salary_totamt = %s"
    sql += " ,od_03_jan_salary_am = %s"
    print(sql)
    with dbConn:
        with dbConn.cursor() as cur:
            for row in tree.iter("list"):
                print("-----------------------------------------------------------------------------------------------")
                # print("접수번호:" + str(row.find('rcept_no').text))
                # print("법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타):" + str(row.find('corp_cls').text))
                print("공시대상회사의 고유번호(8자리):" + str(row.find('corp_code').text))
                print("법인명:" + str(row.find('corp_name').text))
                print("성별 남, 여:" + str(row.find('sexdstn').text))
                print("사업부문:" + str(row.find('fo_bbm').text))
                print("개정 전 직원 수 정규직:" + str(row.find('reform_bfe_emp_co_rgllbr').text))
                print("개정 전 직원 수 계약직:" + str(row.find('reform_bfe_emp_co_cnttk').text))
                print("개정 전 직원 수 기타:" + str(row.find('reform_bfe_emp_co_etc').text))
                print("정규직 수	상근, 비상근:" + str(row.find('rgllbr_co').text))
                print("정규직 단시간 근로자 수	대표이사, 이사, 사외이사 등:" + str(row.find('rgllbr_abacpt_labrr_co').text))
                print("계약직 수:" + str(row.find('cnttk_co').text))
                print("계약직 단시간 근로자 수:" + str(row.find('cnttk_abacpt_labrr_co').text))
                print("합계:" + str(row.find('sm').text))
                print("평균 근속 연수:" + str(row.find('avrg_cnwk_sdytrn').text))
                print("연간 급여 총액:" + str(row.find('fyer_salary_totamt').text))
                print("1인평균 급여 액:" + str(row.find('jan_salary_am').text))

                cur.execute(sql
                            , (
                                str(row.find('corp_code').text).strip()
                                , str(row.find('corp_name').text).strip()
                                , str(Obj.bsns_year).strip()
                                , str(row.find('fo_bbm').text).strip()
                                , str(row.find('sexdstn').text).strip()
                                , str(row.find('reform_bfe_emp_co_rgllbr').text).strip()
                                , str(row.find('reform_bfe_emp_co_cnttk').text).strip()
                                , str(row.find('reform_bfe_emp_co_etc').text).strip()
                                , str(row.find('rgllbr_co').text).strip()
                                , str(row.find('rgllbr_abacpt_labrr_co').text).strip()
                                , str(row.find('cnttk_co').text).strip()
                                , str(row.find('cnttk_abacpt_labrr_co').text).strip()
                                , str(row.find('sm').text).strip()
                                , str(row.find('avrg_cnwk_sdytrn').text).strip()
                                , str(row.find('fyer_salary_totamt').text).strip()
                                , str(row.find('jan_salary_am').text).strip()
                            )
                            )
                dbConn.commit()

    dbConn.close()

sys.exit(0)