[Java] OPEN API 파싱하기 (XML)

garam0410·2022년 1월 11일
1
post-custom-banner

OPEN API

API란, Application Programming Interface의 약자로, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

OPEN API란, 사용자가 제공되는 데이터를 자유롭게 활용할 수 있도록 만들어놓은 인터페이스이다.

우리나라는 공공데이터 포털에서 각종 데이터들을 API형태로 제공해주고 있는데, 그 밖에 다양한 사이트에서도 제공해준다.

API로 제공되어지는 형태는 대부분 JSON이나 XML로 제공된다.

  • XML

  • JSON

데이터를 요청하면, 위 두형태로 결과를 얻을 수 있는데, 그냥 결과를 쓰기에는 어지럽고 지저분하다. 그래서 얻은 결과를 사용할 수 있도록 사용자가 가공하는 과정을 거쳐야한다.

이 포스트는 두가지 방식중에서 XML에 대한것만 다루겠다.


XML

XML이란, Extensible Markup Language 의 약자로, HTML과 매우 비슷한 마크업 언어언어이다.

HTML 에서 div 태그가 있는 것 처럼, XML 도 태그로 이루어져 있고, 태그에는 데이터의 분류명(?)을 적어준다. 분류명에 해당되는 값을 읽어서 데이터를 보여주는 용도로 쓰이는게 XML이다.

<분류></분류>

위와 같은 형태로 되어 있으며, 우리는 <분류> 에 해당하는 태그명을 가져와서 그 태그에 해당되는 값을 쓰려고한다.

영화 상세정보 데이터 출력하기

이전에 JSON 형태의 영화 상세정보 데이터를 출력했다면, 이번엔 XML 형식의 영화 상세정보 데이터를 출력해보았다.

영화 정보 데이터는 KOBIS에서 제공해주는 영화 상세정보 OPEN API를 사용하였다.

String key = "";

먼저 데이터를 불러오기 위해서 사이트에서 제공 받은 API key를 key에 넣어준다. 아래에 있을 URL 부분에 넣어주어도 상관 없지만, 보기좋게 하기위해서 따로 변수를 선언해 주었다.

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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

public class movie_xml {

   	 // tag값의 정보를 가져오는 함수
	public static String getTagValue(String tag, Element eElement) {

            	//결과를 저장할 result 변수 선언
            	String result = "";

	    	NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();

	    	result = nlList.item(0).getTextContent();

	    	return result;
	}

	// tag값의 정보를 가져오는 함수
	public static String getTagValue(String tag, String childTag, Element eElement) {

		//결과를 저장할 result 변수 선언
		String result = "";

		NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();

		for(int i = 0; i < eElement.getElementsByTagName(childTag).getLength(); i++) {

			//result += nlList.item(i).getFirstChild().getTextContent() + " ";
			result += nlList.item(i).getChildNodes().item(0).getTextContent() + " ";
		}

		return result;
	}

	public static void main(String[] args) {

		// 본인이 받은 api키를 추가
		String key = "";

		try{
			// parsing할 url 지정(API 키 포함해서)
			String url = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieInfo.xml?key="+key+"&movieCd=20124079";
	        
			DocumentBuilderFactory dbFactoty = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = dbFactoty.newDocumentBuilder();
			Document doc = dBuilder.parse(url);
			
			// 제일 첫번째 태그
			doc.getDocumentElement().normalize();
			
			// 파싱할 tag
			NodeList nList = doc.getElementsByTagName("movieInfo");

			for(int temp = 0; temp < nList.getLength(); temp++){
				Node nNode = nList.item(temp);
			
				Element eElement = (Element) nNode;
				
				System.out.println("영화코드 : " + getTagValue("movieCd", eElement));
				System.out.println("영화명(한글) : " + getTagValue("movieNm", eElement));
				System.out.println("영화명(영문) : " + getTagValue("movieNmEn", eElement));
				System.out.println("재생시간 : " + getTagValue("showTm", eElement));
				System.out.println("개봉일 : " + getTagValue("openDt", eElement));
				System.out.println("영화유형 : " + getTagValue("typeNm", eElement));
				System.out.println("제작국가명 : " + getTagValue("nationNm", eElement));
				System.out.println("장르 : " + getTagValue("genres", "genre",eElement));
				System.out.println("감독명 : " + getTagValue("directors", "director",eElement));
				System.out.println("출연배우 : " + getTagValue("actors", "actor", eElement));
			}
			
		} catch (Exception e){	
			e.printStackTrace();
		}	
	}

}
post-custom-banner

0개의 댓글