티스토리 뷰
관광정보 API를 활용해 프로젝트를 진행하면서 오픈 API를 처음 다뤄보게 되었습니다.
따로 배우지도 않은터라 구글링을 열심히 해가면 배웠어요.
그 중에서 제가 이해하기 쉬웠던건 아래 블로그였어요.
http://shlee0882.tistory.com/2
여기에 자바 코드를 파일로 올려주셔서 그걸 뜯어보고 하며 API를 활용할 수 있었습니다.
오픈 API, 공공 데이터를 받아보자(Spring, JSON, AJAX)
자신이 어떤 데이터가 필요한지 생각해보고, 메뉴얼을 보면서 원하는 데이터를 추려낼 방법을 모색하는게 좋겠어요.
제가 필요한건 Tour API(관광정보 서비스 API)에서 장소별 구체적인 내용이었습니다.
<API 활용 메뉴얼 일부>
항목 구분을 보면 필수(1)이라고 적혀있죠
요청 메시지, 즉, URL에 저 항목은 꼭 들어가야지 결과가 나오게 됩니다.
예를 들어)
코엑스 스카이 라운지의 정보가 얻고 싶다고 하면
MobileOS=ETC
MobileApp=TestName
ServiceKey=발급받은 인증키
contentid=1531680
contentTypeid=39
를 입력해주시면 됩니다.
이걸 이어서 주소로 적어보면
http://api.visitkorea.or.kr/openapi/service/rest/KorService/detailIntro?MobileOS=ETC&MobileApp=TestName&ServiceKey=발급받은 인증키&contentid=1531680&contentTypeid=39
('발급받은 인증키' 부분에 인증키를 넣으셔야 합니다.)
이런 형식이 되고 URL로 복붙하면
이렇게 생긴 XML 파일이 나오게 됩니다.
이걸 받아오면 되는데... 크게 두 방식이 있었어요.
1) JSON 파싱
2) XML 파싱
저는 JSON으로 파싱하는 법이 더 이해하기 쉽고 익숙해서 이 방법을 활용하였습니다.
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 | public void callDetail(HttpServletRequest request, HttpServletResponse response, @RequestParam String contentId, @RequestParam String contentTypeId) throws Exception { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); String addr = "http://api.visitkorea.or.kr/openapi/service/rest/KorService/detailIntro?ServiceKey="; String serviceKey = "인증키"; String parameter = ""; PrintWriter out = response.getWriter(); //클라이언트로 보낼 TEXT DATA, JSON에 넣을 때 쭉 나열하는듯 parameter = parameter + "&" + "contentId=" + contentId; //JSP에서 받아올 contentid, contentTypeid parameter = parameter + "&" + "contentTypeId=" + contentTypeId; parameter = parameter + "&" + "MobileOS=ETC"; parameter = parameter + "&" + "MobileApp=tour"; parameter = parameter + "&" + "_type=json"; addr = addr + serviceKey + parameter; URL url = new URL(addr); System.out.println(addr); InputStream in = url.openStream(); //URL로 부터 자바로 데이터 읽어오도록 URL객체로 스트림 열기 ByteArrayOutputStream bos1 = new ByteArrayOutputStream(); //InputStream의 데이터들을 바이트 배열로 저장하기 위해 IOUtils.copy(in, bos1); //InputStream의 데이터를 바이트 배열로 복사 in.close(); bos1.close(); String mbos = bos1.toString("UTF-8"); byte[] b = mbos.getBytes("UTF-8"); String s = new String(b, "UTF-8"); //String으로 풀었다가 byte배열로 했다가 다시 String으로 해서 json에 저장할 배열을 print?? 여긴 잘 모르겠다 out.println(s); JSONObject json = new JSONObject(); json.put("data", s); } | cs |
JS 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | daum.maps.event.addListener(marker, 'click', function() { //다음 맵에 있는 마커 클릭 이벤트 $.ajax({ url: 'callDetail.do', type: 'get', data : {"contentId" : contentid, "contentTypeId" : contenttypeid}, //contentid, contentTypeid 서버로 전송 dataType: 'json', success: function(data){ var myItem = data.response.body.items.item; //이 경로 내부에 데이터가 들어있음 var output = ''; output += '<h4>'+myItem.treatmenu+'</h4>'; //API 활용 메뉴얼 보면 Response 할 수 있는 output += '<h4>'+myItem.opentimefood+'</h4>'; //데이터들이 있음 output += '<h4>'+myItem.reservationfood+'</h4>'; //거기서 골라 쓰면 됨. $('#window').html(output); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("Status: " + textStatus); alert("Error: " + errorThrown); } }); }); } | cs |
결과물
이렇게 지도 위의 마커(Marker)를 클릭하면 출력하고자 했던 항목들이 뜨게 됩니다.
'오픈API' 카테고리의 다른 글
다음 맵 API(카카오 맵) 행정구역 폴리곤(Polygon)으로 구분하기 & 클릭 확대 이벤트 (18) | 2018.02.09 |
---|---|
다음 맵 API(카카오 맵) 라인 그리기, 라인 거리 구하기 (4) | 2018.01.22 |
- Total
- Today
- Yesterday
- API
- 최솟값
- AWS
- 예매 알림
- 완주하지 못한 선수
- 카카오인턴
- 노션트렐로광고X
- 스프링 부트
- cgv
- 자바
- 쇠막대기
- 타겟 넘버
- java
- 기능개발
- 텔레그램
- 맵 api
- FrogJmp
- 프로그래머스
- K번째수
- Spring
- 124 나라의 숫자
- 안드로이드 스튜디오
- json
- 더 나은 내일
- 다음 맵 api
- codility
- 문자열 내 마음대로 정렬하기
- 객체지향과 디자인패턴
- 알고리즘
- 파이팅코리아
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |