이번 포스팅에서는 API를 호출했을 때 xml로 출력되는 자료를 파싱(parsing)하는 방법에 대해 알아보도록 하겠습니다.

 

예제를 위해 opendart 사이트에 접속해 회원가입하고 API 이용하기 위한 인증키를 신청합니다.

 

opendart.fss.or.kr/

 

전자공시 OPENDART 시스템

--> 시스템 점검으로 모든 서비스 이용이 일시적으로 중단되어니 양해 부탁드립니다. 시스템 점검 일정 2019년12월30일 23:00 ~ 12월31일 24:00 (1시간) *상기 작업 시간은 사정에 의해 변경 될 수 있습니

opendart.fss.or.kr

개발가이드 -> 사업보고서 주요정보에서 증자(감자) 현황 정보를 가져와 보도록 하겠습니다.

 

맨 오른쪽에 바로가기를 클릭합니다.

개발가이드에 보면 기본 정보, 요청 인자, 응답 결과 정보를 확인할 수 있고 화면 아래로 더 내려보면 다음과 같이 OpenAPI 테스트도 해볼 수 있습니다.

 

XML로 파싱할 것이기 때문에 XML을 선택하고 검색을 누릅니다.

API 결과에 요청인자에 따른 url 주소와 요청한 결과값이 XML값으로 표시되는 것을 볼 수 있습니다.

 

이제 url을 호출해서 XML값을 파싱하는 작업을 자바로 구현해보겠습니다.

 

자바파일로 만들어도 되고 JUnit 테스트 코드로 작성해도 됩니다.

 

다음과 같이 자바 파일을 작성합니다.

import java.net.URLDecoder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class xmlParsingTest {

	// tag값의 정보를 가져오는 메소드
	private static String getTagValue(String tag, Element eElement) {
	    NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();
	    Node nValue = (Node) nlList.item(0);
	    if(nValue == null) 
	        return null;
	    return nValue.getNodeValue();
	}

	@Test
	public void test() {
		try{
			// parsing할 url 지정(API 키 포함해서)
			String url = "https://opendart.fss.or.kr/api/irdsSttus.xml";
			String serviceKey = "인증키";
			String decodeServiceKey = URLDecoder.decode(serviceKey, "UTF-8");
			String corpCode = "00293886"; //공시대상회사의 고유번호(8자리)
			String bsnsYear = "2018"; //사업연도(4자리)
			String reprtCode = "11011"; //보고서 코드
					
			Document documentInfo = DocumentBuilderFactory
					.newInstance()
					.newDocumentBuilder()
					.parse(url+"?crtfc_key="+decodeServiceKey+"&corp_code="+corpCode+"&bsns_year="+bsnsYear+"&reprt_code="+reprtCode);
			
			// root tag 
			documentInfo.getDocumentElement().normalize();
			//				System.out.println("Root element :" + documentInfo.getDocumentElement().getNodeName());
			
			// 파싱할 tag
			NodeList nList = documentInfo.getElementsByTagName("list");
			//				System.out.println("파싱할 리스트 수 : "+ nList.getLength());
			
			for(int temp = 0; temp < nList.getLength(); temp++){
				Node nNode = nList.item(temp);
				if(nNode.getNodeType() == Node.ELEMENT_NODE){
					
					Element eElement = (Element) nNode;
					System.out.println("######################");
					System.out.println("고유번호  : " + getTagValue("corp_code", eElement));
					System.out.println("법인명  : " + getTagValue("corp_name", eElement));
					System.out.println("주식발행 감소일자 : " + getTagValue("isu_dcrs_de", eElement));
					System.out.println("발행 감소 형태  : " + getTagValue("isu_dcrs_stle", eElement));
					System.out.println("발행 감소 주식 종류  : " + getTagValue("isu_dcrs_stock_knd", eElement));
					System.out.println("발행 감소 수량  : " + getTagValue("isu_dcrs_qy", eElement));
					System.out.println("발행 감소 주당 액면 가액 : " + getTagValue("isu_dcrs_mstvdv_fval_amount", eElement));
					System.out.println("발행 감소 주당 가액  : " + getTagValue("isu_dcrs_mstvdv_amount", eElement));
				}	
			}	
		} catch (Exception e){	
			e.printStackTrace();
		}
	}

}

<Ctrl> + <F11>을 눌러서 실행해보면 다음과 같이 콘솔창에 XML데이터가 파싱되어 표시되는 것을 볼 수 있습니다.

다시 Opendart 사이트로 가서 인증키 신청/관리 -> 오픈API 이용현황에 보면 다음과 같이 일일허용건수와 호출건수를 확인할 수 있습니다.

 

+ Recent posts