API란, Application Programming Interface의 약자로, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
OPEN API란, 사용자가 제공되는 데이터를 자유롭게 활용할 수 있도록 만들어놓은 인터페이스이다.
우리나라는 공공데이터 포털에서 각종 데이터들을 API형태로 제공해주고 있는데, 그 밖에 다양한 사이트에서도 제공해준다.
API로 제공되어지는 형태는 대부분 JSON이나 XML로 제공된다.
XML
JSON
데이터를 요청하면, 위 두형태로 결과를 얻을 수 있는데, 그냥 결과를 쓰기에는 어지럽고 지저분하다. 그래서 얻은 결과를 사용할 수 있도록 사용자가 가공하는 과정을 거쳐야한다.
이 포스트는 두가지 방식중에서 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(); } } }