공공데이터 포털의 오픈API 활용해 XML / JSON 형식의 데이터를 Jquery의 ajax를 활용하여 파싱해 데이터를 가져오는 작업을 해보겠습니다.
1. https://www.data.go.kr/ 접속 OPEN API 클릭
2. 저는 활용신청 건순이 가장 많은 국내 관광정보 서비스를 쓰려고 합니다.
3. 국내 관광정보 서비스 오픈 API를 신청하고 인증키를 받습니다.
참고문서에 TourAPI_Guide.zip 파일을 다운받습니다.
zip 파일 안에는 API활용메뉴얼이 있고 자신이 필요한 데이터를 호출하면 됩니다.
저는 행사/공연/축제 에 대한 정보를 받아오려고 합니다.
형식의 http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?ServiceKey=자신의키값&Request Parameter 항목명=값
형태로 요청하면 됩니다.
Request Parameter 에 필수 항목은 꼭 들어가야하는 파라미터항목입니다.
4. 자료실에 공유서비스 활용자 클라이언트 가이드 문서 등 여러 개발에 필요한 문서를 찾아 다운로드합니다.
5. 저는 웹서비스를 호출하는 방식으로 REST방식을 선택하겠습니다.
또한 서블릿과 자바스크립트를 이용해 XML과 JSON 형태의 데이터를 jquery의 ajax를 이용 파싱해 가져오려고 합니다.
6. 먼저 이클립스로 새 프로젝트 생성 후, 서블릿 파일 PublicData.java 생성, index.jsp 생성, 간단히 테스트 해보겠습니다.
7. index.jsp 안 스크립트 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <script> $.ajax({ url: 'PublicData.do', type: 'get', dataType: 'json', success: function(msg){ console.log(msg.response.body.items.item); var myItem = msg.response.body.items.item; for(var i=0; myItem.length; i++){ var output = ''; console.log(myItem.length); output += '<h3>'+ i + '번째 서울 축제 데이터' +'</h3>'; output += '<h4>'+myItem[i].addr1+'</h4>'; output += '<h4>'+myItem[i].title+'</h4>'; output += '<h4>'+myItem[i].tel+'</h4>'; document.body.innerHTML += output; } } }); </script> | cs |
8. PublicData.java 소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | package com; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.URL; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.io.CachedOutputStream; import org.json.simple.JSONObject; /** * Servlet implementation class test */ @WebServlet("/PublicData.do") public class PublicData extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public PublicData() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); String addr = "http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?ServiceKey="; String serviceKey = "자신의 키값 입력"; String parameter = ""; // serviceKey = URLEncoder.encode(serviceKey,"utf-8"); PrintWriter out = response.getWriter(); parameter = parameter + "&" + "areaCode=1"; parameter = parameter + "&" + "eventStartDate=20170401"; parameter = parameter + "&" + "eventEndDate=20171231"; parameter = parameter + "&" + "pageNo=1&numOfRows=10"; parameter = parameter + "&" + "MobileOS=ETC"; parameter = parameter + "&" + "MobileApp=aa"; parameter = parameter + "&" + "_type=json"; addr = addr + serviceKey + parameter; URL url = new URL(addr); InputStream in = url.openStream(); CachedOutputStream bos = new CachedOutputStream(); IOUtils.copy(in, bos); in.close(); bos.close(); // out.println(addr); String data = bos.getOut().toString(); out.println(data); JSONObject json = new JSONObject(); json.put("data", data); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); String addr = "http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?ServiceKey="; String serviceKey = "429e9l%2BRPBvvMYSqI0TIu0JgvFl1vio2dcUfXj7d66%2F%2B2glco1EDs1HDHJBssw9U7HAt1A11Cy6N0Hbk2INDfQ%3D%3D"; String parameter = ""; // serviceKey = URLEncoder.encode(serviceKey,"utf-8"); PrintWriter out = response.getWriter(); parameter = parameter + "&" + "areaCode=1"; parameter = parameter + "&" + "eventStartDate=20170401"; parameter = parameter + "&" + "eventEndDate=20171231"; parameter = parameter + "&" + "pageNo=1&numOfRows=10"; parameter = parameter + "&" + "MobileOS=ETC"; parameter = parameter + "&" + "MobileApp=aa"; parameter = parameter + "&" + "_type=json"; addr = addr + serviceKey + parameter; URL url = new URL(addr); InputStream in = url.openStream(); CachedOutputStream bos = new CachedOutputStream(); IOUtils.copy(in, bos); in.close(); bos.close(); // out.println(addr); String data = bos.getOut().toString(); out.println(data); JSONObject json = new JSONObject(); json.put("data", data); } } | cs |
서블릿인 PublicData.java 코드를 보면 요청할 api주소
http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?
URI 다음에 발급받은 자신의 고유한 서비스 키값과 필요한 파라미터 값을 &로 붙여 주소를 만들고 있습니다.
http://api.visitkorea.or.kr/openapi/service/rest/KorService/searchFestival?ServiceKey=키값&areaCode=1&eventStartDate=20170401&eventEndDate=20171231&pageNo=1&numOfRows=10 ... 생략
요청 파라미터값은 api doc에 자세히 나와있으니 자신이 필요한 요청값을 서비스키값 뒤로 적절히 붙여 요청하면 됩니다.
9. 요청한 주소를 브라우저를 통해 들어가면 xml형식 or json형식의 데이터 포맷으로 나타나게 됩니다.
10. 저는 20170401 ~ 20171231 까지 서울에서 실시하는 축제 정보의 주소, 제목, 전화번호의 키 밸류 형식의 JSON 데이터를 파싱해 가져온 결과입니다.
11. pom.xml 에서 받아온 메이븐 저장소파일 목록입니다.
12. 마지막으로 소스 추가합니다.
첨부파일 :
17년 12월 13일 기준으로 최신소스 등록하였습니다.
'전체 > 오픈 API 활용하기' 카테고리의 다른 글
imgur api 사용하여 이미지 업로드 하기 (2) | 2019.03.27 |
---|---|
택배 배송 조회 API 사용하기(스윗트래커 활용) (8) | 2017.12.07 |
구글 로그인 api 웹 인증하기 (2) | 2017.12.05 |