728x90
반응형
이번 포스팅에서는 API를 호출했을 때 xml로 출력되는 자료를 파싱(parsing)하는 방법에 대해 알아보도록 하겠습니다.
예제를 위해 opendart 사이트에 접속해 회원가입하고 API 이용하기 위한 인증키를 신청합니다.
개발가이드 -> 사업보고서 주요정보에서 증자(감자) 현황 정보를 가져와 보도록 하겠습니다.
맨 오른쪽에 바로가기를 클릭합니다.
개발가이드에 보면 기본 정보, 요청 인자, 응답 결과 정보를 확인할 수 있고 화면 아래로 더 내려보면 다음과 같이 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 이용현황에 보면 다음과 같이 일일허용건수와 호출건수를 확인할 수 있습니다.
728x90
반응형
'Programming > Java' 카테고리의 다른 글
[자바] List에서 특정 index가 아닌 원하는 값 삭제하는 방법 (1) | 2021.07.11 |
---|