지난 포스팅에서 현재위치를 가져와서 카카오 지도에 표출하는 과정까지 진행했다. (https://seollica.tistory.com/153)
이번에는 공공데이터를 활용하여 근처 관광지 정보를 가져오는 과정을 해보도록 하겠다.
* 한국관광공사 오픈 api
https://www.data.go.kr/data/15101971/openapi.do#/
내가 사용한 오픈 api는 위의 링크의 api이며, 위치기반 관광정보조회를 사용할것이다.
활용신청을 하고면 개발용 인증키를 바로 발급받을수 있다.
String serviceUrl = "http://apis.data.go.kr/B551011/KorService1/locationBasedList1";
String param = "MobileOS=" + MobileOS +
"&MobileApp=" + MobileApp +
"&serviceKey=" + serviceKey +
"&mapX=" + mapX +
"&mapY=" + mapY +
"&radius=" + radius +
"&contentTypeId=" + contentTypeId;
URL apiUrl = new URL(serviceUrl+"?"+param);
InputStream apiStream = apiUrl.openStream();
Document doc = null;
try{
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(apiStream);
}catch(Exception e){
e.printStackTrace();
}finally{
apiStream.close();
}
java.net.URL로 서비스 url과 필수 입력정보를 파라미터로 넘긴다.
파라미터중 mapX와 mapY는 현재위치가 되게끔 만들것이다.
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(apiStream);
이부분은 XML기반의 소스를 DOM형태로 변환시키는 과정이다.
임포트부분은 참고하자.
<%@page import="java.io.InputStream"%>
<%@page import="java.net.URL"%>
<%@page import="javax.xml.parsers.DocumentBuilderFactory"%>
<%@page import="javax.xml.parsers.DocumentBuilder"%>
<%@page import="org.w3c.dom.*"%>
<%@page import="javax.xml.xpath.*"%>
<%@page import="org.json.*"%>
try {
// XPath 객체 생성
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
// 태그 이름 목록
String[] tags = {"addr1", "addr2", "firstimage", "firstimage2", "mapx", "mapy", "tel", "title"};
// item의 개수 확인
NodeList items = doc.getElementsByTagName("item");
int size = items.getLength();
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < size; i++) {
JSONObject jsonObject = new JSONObject(); // 각 item을 위한 JSON 객체
Element item = (Element) items.item(i); // 현재 item
for (String tag : tags) {
NodeList nodeList = item.getElementsByTagName(tag);
String value = nodeList.getLength() > 0 ? nodeList.item(0).getTextContent() : null;
jsonObject.put(tag, value); // JSON 객체에 추가
}
// JSON 배열에 추가
jsonArray.put(jsonObject);
}
} catch (Exception e) {
e.printStackTrace();
}
파싱된 DOM 형태의 데이터는 XPath를 활용하면 복잡한 XML구조를 탐색하는데 용이하다.
전체적인 흐름은 JsonObject에 각 item을 태그명과 함께 작성하여 JsonArray에 담았다.
위처럼 소스를 작성하여 관광지 정보를 소스상에서 json형태로 출력하는것에 성공하였다.
....
하지만 해당 api는 json 형태의 값을 제공했었다. 문서를 제대로 읽지 않아서 이렇게 되어버렸다..
다음 포스팅에서는 json 방식으로 api를 불러와서 지도에 표출하는것으로 하겠다..
'JAVA' 카테고리의 다른 글
두 좌표의 거리 계산 (0) | 2024.12.04 |
---|---|
JAVA XML 데이터 값 가져오기 (0) | 2024.12.02 |
싱글톤 패턴 (0) | 2020.07.15 |
객체지향 설계의 5대 원칙 (0) | 2020.07.01 |
[실습] 서블릿+컨넥션+트렌젝션+mvc (0) | 2020.05.22 |